Utiliser un champ image ACF pour définir l’image à la une

Avec Advanded Custom Fields, nous pouvons ajouter différents types de champs à tous les contenus de notre site WordPress. Pour certaines raisons (comme la taille de la prévisualisation ou le caractère obligatoire) nous pouvons vouloir faire en sorte de synchroniser le champs ACF avec le champs Image à la une, géré par le CMS. Le morceau de code suivant est fonctionnel avec les versions 4 et 5 de ACF.

add_action('acf/save_post', 'kodex_acf_save_post_thumbnail', 1);
add_action('acf/save_post', 'kodex_acf_save_post_thumbnail', 20);
function kodex_acf_save_post_thumbnail($post_id){
	$post = get_post($post_id);

	// tableau associatif post_type => Clé du champs ACF
	$images = array(
		'post'      => 'field_56012c62bc5b3',
		'evenement' => 'field_56012a64e8428',
	);

	if(!array_key_exists($post->post_type, $images)) return;
	
	if( isset($_POST['fields']) && !empty($_POST['fields']) ){
		$fields = $_POST['fields'];	// ACF 4
	}elseif( isset($_POST['acf']) && !empty($_POST['acf']) ){
		$fields = $_POST['acf'];	// ACF Pro 5
	}else{
		return;
	}

	/* on met le champs image en image à la une */
	$acf_key = $images[$post->post_type];
	$illu_id = $fields[$acf_key];

	if($illu_id && !empty($illu_id) && is_numeric($illu_id)){
		set_post_thumbnail($post_id, $illu_id);
	}
}