[WordPress] Synchroniser les champs ACF de type « taxonomie » lors d’une duplication via WPML

Ce billet inaugure le retour des articles techniques sur le blog (parce qu’on code hein!)

WPML et ACF sont deux plugins WordPress bien connus, l’un servant au multilingue, l’autre à la gestion des champs personnalisés.

Dans ACF, il est possible de réaliser des champs de type « taxonomie », et même de les synchroniser avec les taxonomies existantes de l’article.

Le seul « problème » est que cette association est pensée pour s’actualiser à l’édition de l’article via le formulaire classique de WordPress : cela ne pose pas de problème dans la majorité des cas, sauf :

  • si on rajoute la taxonomie par d’autres moyens (directement via l’API par exemple)
  • si on duplique l’article via WPML

En effet, cette duplication recopie bien les taxonomies, mais ne synchronise pas les valeurs cochées dans l’ACF de type « taxonomie » (j’espère que je ne vous ai pas perdus à ce stade).

On peut cependant contourner le problème en utilisant le code suivant :

function alter_terms() {
	//On récupère le contexte
	global $post;
	
	//On récupère ensuite les termes de taxonomie de l'article...
	$terms = get_the_terms($post->ID, 'nom_de_la_taxonomie');
	
	//..et ceux stockés dans ACF
	$acf_terms = get_field('nom_du_champ_de_taxonomie_dans_ACF', $post->ID);
	
	// Si ceux d'ACF sont vides, on va les mettre à jour
	if (!empty($sectors) && empty($acf_sectors)) {
		$tmp_terms = array_map(function($term) {
			return $term->term_id;
		}, $terms);
		
		//On utilise ici directement les ID natives d'ACF
		//Cela est lié au fait que ce sont des champs de taxonomie
		update_field('field_54fdc5f026a79', $tmp_terms, $post->ID );

	}
}
/* Il faut ensuite déclencher cette fonction 
	assez haut dans le traitement du back-office */
add_action('admin_enqueue_scripts','alter_terms');

En résumé :

  • On récupère les termes de taxonomie de l’article
  • On les compare à ceux stockés dans ACF
  • Si ceux d’ACF sont vides (comme dans le cas de la duplication via WPML), on met à jour celui d’ACF

L’aide officielle du plugin ACF explique comment récupérer l’ID du champ qu’on souhaite mettre à jour.

On peut bien sûr filtrer l’application de ce traitement, par exemple en vérifiant dans quel type d’objet on se trouve, via la valeur de $post->post_type.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *