Repérer le sens qui ne fonctionne plus
Une fiche Lieu peut présenter les ateliers qui s’y déroulent, et une fiche Atelier les lieux où elle est proposée. Lorsque vous ajoutez l’atelier « Gravure » dans la fiche « Salle Nord », vous attendez de retrouver « Salle Nord » après avoir rouvert la fiche « Gravure ». Ce retour dépend d’une mise à jour d’un deuxième champ. Vérifiez d’abord les deux écrans d’édition et leurs valeurs enregistrées. Si les champs sont cohérents et que la liste publique reste incomplète, la prochaine vérification porte sur le modèle ou la requête qui affiche la liste.
Définissez le sens attendu avant de modifier les champs. Certaines équipes ne gèrent les relations que depuis les lieux, les ateliers servant de lecture. D’autres souhaitent pouvoir ajouter ou enlever un lien depuis les deux écrans. Notez la règle actuelle, les types de contenus concernés et la version ACF chargée sur le site. L’interface de configuration native existe depuis ACF 6.2 pour les types pris en charge. Un site plus ancien peut posséder un filtre historique qui écrit la valeur inverse. Un autre peut produire une liste à partir d’une requête inverse sans conserver de deuxième valeur.
Sur une copie autorisée, préparez quatre fiches synthétiques, deux Lieux et deux Ateliers. Utilisez « Salle Nord » et « Gravure » pour le premier ajout, « Salle Sud » pour vérifier qu’un même atelier peut recevoir deux lieux et « Poterie » comme témoin hors de la paire. Si vous avez besoin d’un lien préexistant à préserver, établissez « Salle Nord → Poterie » et vérifiez son retour avant de tester Gravure. Donnez des noms reconnaissables et relevez les identifiants. En multisite ou avec des traductions, précisez quels site, langue et objets vous testez.
Relever les deux champs et la définition active
Avec le compte qui maintient les définitions, ouvrez ACF > Groupes de champs. Relevez de chaque côté le groupe, le type de champ, son nom technique, sa clé de champ et sa règle de localisation. Les libellés « Lieux associés » et « Ateliers associés » aident le rédacteur, tandis que les clés permettent de distinguer deux champs de même libellé. Vérifiez quel groupe s’affiche effectivement sur chaque fiche. Si Local JSON ou un fichier PHP fait autorité, relevez aussi sa version. Préparez l’essai avec le mainteneur de cette définition pour que le même réglage reste chargé après le rechargement de l’éditeur.
Pour l’exemple, choisissez deux champs Relation de premier niveau. Le champ du lieu accepte des Ateliers et celui de l’atelier accepte des Lieux. Les deux stockent plusieurs choix si l’organisation autorise plusieurs liens. Dans les réglages du champ, notez les types autorisés et les autres filtres qui gouvernent la liste des choix. Un atelier écarté par un filtre avant même la sélection pose un problème différent d’un atelier sélectionné dont la fiche ne reçoit aucune valeur en retour.
Avant l’essai, enregistrez les réglages et les valeurs utiles des fiches témoins dans un relevé daté. Dessinez chaque lien sous la forme « Salle Nord → Gravure » et ajoutez la valeur inverse attendue. Si une relation existe déjà vers une autre fiche, conservez-la comme contre-exemple. Ce témoin vous dira si l’essai a simplement ajouté un lien ou s’il a remplacé la liste complète. Faites la même lecture pour les valeurs qui doivent rester vides.
Approche 1. Configurer les cibles dans le ou les deux sens
Dans le groupe qui s’affiche sur les Lieux, ouvrez le champ Relation qui sélectionne les Ateliers. Dans l’onglet Avancé, activez le réglage bidirectionnel et choisissez comme cible le champ qui sélectionne les Lieux sur les Ateliers. Enregistrez la définition par la voie maintenue sur votre site. Cette configuration indique à ACF où écrire, sur l’Atelier choisi, l’identifiant du Lieu que vous enregistrez. Avec cette seule configuration, l’édition du champ Atelier ne configure pas automatiquement la propagation dans le sens opposé.
Si les rédacteurs doivent travailler depuis chaque fiche, ouvrez le champ du groupe des Ateliers, activez aussi son réglage bidirectionnel et choisissez le champ Relation des Lieux comme cible. Vérifiez les deux choix après avoir rechargé les groupes. Si le même champ est réellement utilisé sur des fiches d’un même type, l’option qui désigne ce champ lui-même permet une relation réciproque à l’intérieur de ce type. Utilisez-la uniquement si chaque côté représente le même rôle, par exemple deux ressources associées. Deux rôles distincts peuvent appeler deux champs même si les fiches partagent un type de contenu.
ACF met à jour les champs cibles indiqués pour cette sauvegarde. Une propagation de A vers B ne déclenche pas en chaîne la mise à jour de C via B. Si vous utilisez plusieurs cibles, vérifiez l’intention de chacune et testez séparément chaque destination. Commencez avec une seule paire. Une ancienne fonction qui maintient les mêmes valeurs peut continuer à agir en parallèle. Repérez-la avant d’activer le réglage natif et faites tester le remplacement sur la copie. Comparez le résultat lors d’un ajout et lors d’un retrait, car un doublon ou une suppression excessive peut rester invisible lors du seul premier ajout.
Vérifier le type, les limites et les droits d’écriture
La fonction native s’applique aux champs Relation, Objet de publication, Utilisateur et Taxonomie. Le champ cible doit être au premier niveau et le type de valeur doit correspondre à l’objet dont l’identifiant sera écrit. Par exemple, un champ installé sur un profil utilisateur peut viser un champ Utilisateur sur une publication, parce que la valeur à propager désigne un utilisateur. Un champ Objet de publication attend un identifiant de publication. Les écrans qui ne fournissent pas l’identité d’une publication, d’un terme ou d’un utilisateur, tels qu’une page d’options, demandent une autre conception. Déplacer le champ pour obtenir l’option modifie l’organisation des données et mérite un essai séparé.
Vérifiez aussi la cardinalité. Si deux lieux peuvent choisir le même atelier, le champ inverse doit pouvoir représenter deux lieux. ACF documente que la mise à jour bidirectionnelle peut enregistrer plusieurs valeurs même si le champ cible présente une limite ou un réglage de valeur unique. Dans ce dernier cas, le formatage peut ne renvoyer qu’une valeur. Testez donc deux liens concurrents et rapprochez la valeur brute de ce que l’écran et le modèle peuvent montrer. Pour imposer une relation réellement unique, faites appliquer cette règle lors des modifications autorisées dans les deux sens et testez aussi le remplacement d’un lien existant.
Sur les versions récentes, ACF contrôle certains droits de mise à jour des cibles dans les sauvegardes de l’interface. Le changelog de la version 6.8.11 indique notamment que l’ajout d’une référence vers une publication cible exige que le compte puisse éditer cette publication. Testez avec le rôle qui effectue les vraies saisies après un premier essai avec un administrateur. Une sauvegarde déclenchée par un script peut s’exécuter dans un autre contexte de confiance. Gardez les mêmes comptes et le même parcours pour reproduire un problème de droits. Préservez les contrôles d’accès lorsque la relation rapproche des fiches de propriétaires ou d’équipes différentes.
Faire un ajout et un retrait de chaque côté
Ouvrez Salle Nord, sélectionnez Gravure et enregistrez. Rouvrez Salle Nord puis Gravure depuis leurs listes. Vérifiez que Gravure figure dans Salle Nord et que Salle Nord figure dans Gravure. Rouvrez aussi Poterie. Si elle était liée à Salle Nord avant l’essai, le lien doit rester présent de chaque côté. Si les deux sens sont configurés et que l’atelier accepte plusieurs lieux, ouvrez Gravure, ajoutez Salle Sud et enregistrez. Après rechargement, Salle Sud doit pointer vers Gravure et Gravure doit toujours contenir Salle Nord. Si l’édition est réservée au côté Lieu, faites ce second ajout dans Salle Sud et observez seulement le résultat du côté Atelier.
Depuis Salle Nord, retirez seulement Gravure. Après rechargement des deux fiches, cette paire doit avoir disparu alors que les liens Salle Nord–Poterie et Salle Sud–Gravure, s’ils font partie de l’essai, doivent subsister. Recréez la paire sur la copie et essayez le retrait depuis Gravure si les deux directions sont activées. Pour chaque sauvegarde, notez le champ modifié, le compte utilisé et les identifiants attendus. Contrôlez les deux valeurs après avoir rouvert les fiches depuis leurs listes.
Si le retour échoue dans un seul sens, relisez d’abord la cible du champ où vous avez cliqué et vérifiez le contexte de sauvegarde. Si l’échec concerne seulement certaines fiches, comparez leurs types, leur statut, leur localisation et les droits du compte. Refaites le contrôle sur un témoin simple avant d’envisager une reprise de tout le fonds. Si le champ stocke bien le résultat mais qu’un composant le montre dans un ordre inattendu, établissez séparément qui définit l’ordre affiché et si celui-ci a une valeur métier.
Approche 2. Comparer les valeurs brutes avec WP-CLI
Un mainteneur qui dispose déjà de WP-CLI peut lire les deux champs sur une copie. Le troisième paramètre de get_field() désactive le formatage de la valeur. Enregistrez le fragment hors de l’arborescence publique, par exemple dans /srv/diagnostics/relation-temoin.php. Dans chaque ligne de $temoins, remplacez l’identifiant par celui de la fiche qui porte le champ et la clé fictive par la clé de ce champ. Vérifiez que WP-CLI pointe vers la copie, puis lancez wp --path=/srv/recette/wordpress --url=https://recette.example eval-file /srv/diagnostics/relation-temoin.php en remplaçant le chemin et l’URL. En multisite, l’URL sélectionne le sous-site. Le fragment ne contient aucune instruction d’écriture.
Conservez un relevé avant l’ajout, un après l’ajout et un après le retrait. Selon la valeur enregistrée, un tableau peut contenir des identifiants sous forme de chaînes numériques. Le résultat brut ne correspond pas forcément à ce que lit un modèle qui demande des objets complets ou applique des restrictions d’affichage. Une valeur vide ou booléenne demande de vérifier la clé et la définition de champ chargée avant de conclure. Le fragment lit les données dans le contexte technique de WP-CLI. Le test avec le rédacteur demeure nécessaire pour observer ce que son compte peut voir et enregistrer.
<?php
if (!defined('WP_CLI') || !WP_CLI) {
return;
}
if (!function_exists('get_field')) {
WP_CLI::error('ACF est indisponible sur le site ciblé.');
}
$temoins = [
[314, 'field_EXEMPLE_ATELIERS'],
[427, 'field_EXEMPLE_LIEUX'],
];
foreach ($temoins as [$id, $cle]) {
$valeur = get_field($cle, $id, false);
WP_CLI::line(sprintf('%d | %s | %s', $id, $cle, wp_json_encode($valeur)));
}Approche 3. Reprendre l’historique par paires validées
L’activation du réglage modifie le comportement des sauvegardes. Traitez séparément les fiches liées avant le changement. Constituez un relevé des liens présents de chaque côté. Séparez les paires cohérentes, les liens renseignés d’un seul côté et les divergences dont le sens reste à confirmer. Si la fiche Atelier conserve un lien que la fiche Lieu n’a plus, demandez quel côté représente l’état voulu. Une fusion automatique des deux listes pourrait réintroduire un lien volontairement retiré.
Sur une copie, choisissez un petit lot de paires approuvées. Pour une paire présente d’un seul côté, enregistrez depuis la fiche où le lien est déjà renseigné, puis relisez les deux côtés. Dans le code d’ACF 6.8.11, les références sélectionnées sont réexaminées lors d’une sauvegarde, y compris celles qui existaient déjà. Si la valeur inverse reste absente, confirmez que le champ source est bien passé par la sauvegarde ACF et que le compte peut écrire sur la cible. Si votre version exige un changement de sélection, faites l’essai de retrait puis de réajout sur une paire de recette approuvée, en contrôlant les liens voisins après chaque sauvegarde.
Évitez le réenregistrement en masse des fiches. Si une automatisation s’impose, fournissez au mainteneur la liste explicite des paires, leurs valeurs de départ et les différences attendues avant toute écriture. Une création par l’API ACF doit utiliser la clé du champ quand la fiche ne porte pas encore de valeur. Les écritures programmatiques s’exécutent dans un contexte différent de la saisie des rédacteurs. Faites contrôler leurs droits et leurs effets séparément.
Pour une relation confirmée dans les deux écrans, ouvrez ensuite le rendu attendu de chaque fiche. La liste publique peut provenir d’un modèle qui applique d’autres filtres ou d’une version mise en cache. Comparez les résultats sur le même site, avec la même langue et le même type de visiteur. Si le modèle affiche des titres de fiches privées ou des brouillons, faites contrôler ses règles d’affichage avant de réutiliser cette liste ailleurs.
Vérifier les deux fiches et revenir à un état connu
Considérez l’essai concluant après avoir vérifié l’ajout, le retrait, les liens voisins et une fiche hors périmètre. Si les deux sens sont autorisés, exigez les mêmes contrôles depuis chacun des écrans. Rejouez au moins une fois avec le rôle courant et une fiche où le champ permet plusieurs valeurs. Vérifiez le résultat dans l’administration après rechargement, puis dans les deux vues publiques attendues. Si les cibles ne sont pas censées être publiques, contrôlez le résultat avec les comptes qui peuvent effectivement les consulter.
Pour revenir en arrière, distinguez la définition des champs des valeurs déjà sauvegardées. Rétablissez d’abord la version précédente des réglages ou du fichier qui fait autorité pour suspendre la propagation ajoutée. Désactiver le réglage bidirectionnel ne retire pas les relations écrites pendant l’essai. Comparez alors le relevé de départ et la liste des modifications réellement faites. Sur la copie, restaurez les valeurs des seules paires touchées, en tenant compte des changements approuvés qui auraient été réalisés depuis. Vérifiez le voisinage après chaque correction. Si un ancien filtre fonctionne encore, le mainteneur doit tenir compte de son effet pendant la restauration.
Dans la remise, gardez les noms et clés des deux champs, les types concernés, les groupes actifs, le ou les sens autorisés et la version ACF utilisée. Ajoutez les résultats des témoins et précisez la méthode retenue pour l’historique. Retirez enfin le fragment technique de la copie selon votre procédure. L’équipe pourra ensuite reproduire un ajout ou un retrait sans deviner quel écran commande la relation.





