Relations bidirectionnelles avec ACF

Se simplifier la vie et celle de son client avec un simple plugin WordPress

J’ai récemment travaillé sur un projet WordPress nécessitant beaucoup de custom post types, et surtout beaucoup de relations entre eux : 1 à 1, 1 à n, etc. Le but était aussi de faciliter la saisie du client pour qu’il n’ait pas à multiplier les relations manuellement ; en effet, par défaut, un champ de type “relation” dans Advanced Custom Fields est unidirectionnel : un livre a un auteur, mais en l’indiquant, ce livre n’est pas forcément attribué à cet auteur.

La première solution serait de créer un autre champ relationnel côté auteur pour lier des livres, mais ce serait risquer une maintenance d’autant plus complexe et “bugogène” pour le développeur, et un temps de saisie double pour le client.

Deuxième alternative, on pourrait jouer de “reverse relationship” pour chercher, parmi les auteurs, qui a écrit ce livre. Malheureusement cela obligerait à utiliser des requêtes peu optimisées côté frontoffice, et à créer une ambiguïté côté backoffice puisque, sur la fiche d’un auteur, on n’y listerait pas les livres liés. On ne pourrait pas non plus le modifier, obligeant à retourner sur la fiche d’un livre pour y modifier les auteurs. Pas pratique !

The main reason for implementing some way to make relationship and post object fields biderectional is that doing reverse relationship queries for ACF is a huge PITA — https://github.com/Hube2/acf-post2post#so-why-do-this

La solution la plus simple m’a paru de pouvoir dédoubler automatiquement le lien d’un CPT à l’autre lors de son édition (un peu sur le principe de la “denormalization” en NoSQL finalement). Heureusement pour moi, un plugin existe déjà pour ça (merci l’écosystème WordPress !) :

Ce plugin fonctionne de manière tout à fait transparente et ne pourrait être plus simple à utiliser : il s’agit simplement de donner un nom identique aux champs des deux custom post types qui seront liés. Par exemple, créer un champ “relation” avec comme nom linked_books_authors pour le CPT books et authors. À l’enregistrement d’un livre par exemple, les auteurs liés seront mis à jour automatiquement pour être liés à leur tour à l’auteur en question. Le meilleur dans tout ça : aucune modification nécessaire dans vos templates, les données ressortiront exactement comme avant, c’est à dire sous la simple forme d’une tableau d’objets !

Votre client vous remerciera ;)