From d6c10baf0cb52cb5131e03337009faefeda24474 Mon Sep 17 00:00:00 2001 From: Antoine M Date: Tue, 13 Jan 2026 15:00:10 +0100 Subject: [PATCH] REFACTOR Ajout de la synchronisation des tags entre articles et revues au save post --- mu-plugins/dynamiques-taxonomies.php | 86 +++++++++++++++++++++++++++- 1 file changed, 85 insertions(+), 1 deletion(-) diff --git a/mu-plugins/dynamiques-taxonomies.php b/mu-plugins/dynamiques-taxonomies.php index 8739022..c4e6de6 100644 --- a/mu-plugins/dynamiques-taxonomies.php +++ b/mu-plugins/dynamiques-taxonomies.php @@ -47,4 +47,88 @@ function dynamiques_taxonomy_init() ); register_taxonomy('etiquettes', array('articles', 'revues'), $args); } -add_action('init', 'dynamiques_taxonomy_init', 0); +add_action(hook_name: 'init', callback: 'dynamiques_taxonomy_init', priority: 0); + + +/** + * SYNCHRONISATION DES TAGS ('ETIQUETTES') ENTRE ARTICLES ET REVUES. + * + * - À l'enregistrement d'un Article (hook `save_post_articles`), on récupère la Revue liée + * via le champ ACF `related_revue`, puis on ajoute ses tags à ceux de la Revue, + * + * - À l'enregistrement d'une Revue (hook `save_post_revues`), on récupère tous les Articles liés à la revue + * via le champ ACF `articles` et on propage leurs étiquettes vers la Revue en réutilisant + * la fonction précédente pour chaque Article. + * + * Détails d'implémentation : + * - Conversion des objets WP_Term en IDs via `wp_list_pluck`. + * - Gestion des cas vides / non valides (false, WP_Error) avant fusion. + * - Affectation finale avec `wp_set_object_terms`. + */ +function dynamiques_apply_current_article_tags_to_related_revue($article_ID) +{ + if (!$article_ID) return; + $related_revue_ID = get_field(selector: 'related_revue', post_id: $article_ID); + if (!$related_revue_ID) return; + + $article_terms = get_the_terms($article_ID, 'etiquettes'); + $revue_terms = get_the_terms($related_revue_ID, 'etiquettes'); + + $article_ids = is_array($article_terms) ? wp_list_pluck($article_terms, 'term_id') : []; + $revue_ids = is_array($revue_terms) ? wp_list_pluck($revue_terms, 'term_id') : []; + + $revue_updated_terms_ids = array_values(array_unique(array_merge($revue_ids, $article_ids))); + + + wp_set_object_terms(object_id: $related_revue_ID, terms: $revue_updated_terms_ids, taxonomy: 'etiquettes'); +} + +add_action(hook_name: 'save_post_articles', callback: 'dynamiques_apply_current_article_tags_to_related_revue', priority: 99, accepted_args: 3); + + +function dynamiques_update_revue_tags_from_related_articles_on_save_post($post_ID) +{ + if (get_post_type($post_ID) !== 'revues') { + return; + } + $related_articles = get_field(selector: 'articles', post_id: $post_ID); + if (!$related_articles) return; + + + foreach ($related_articles as $article) { + dynamiques_apply_current_article_tags_to_related_revue($article->ID); + } +} +add_action(hook_name: 'save_post_revues', callback: 'dynamiques_update_revue_tags_from_related_articles_on_save_post', priority: 99, accepted_args: 1); + + + +function retetest() +{ + $revue_ID = 687; + + $revue_terms = get_the_terms($revue_ID, 'etiquettes'); + + $revue_term_ids = (is_array($revue_terms) && !is_wp_error($revue_terms)) + ? wp_list_pluck($revue_terms, 'term_id') + : []; + + + // Option A: ne pas lancer la requête si vide + if (empty($revue_term_ids)) { + return; // ou autre logique + } + + $query = new WP_Query([ + 'post_type' => 'revues', + 'posts_per_page' => -1, + 'tax_query' => [[ + 'taxonomy' => 'etiquettes', + 'field' => 'term_id', + 'terms' => $revue_term_ids, + 'operator' => 'IN', // ou 'AND' si tu veux toutes les étiquettes + ]], + ]); + +} +add_action('init', 'retetest');