web-dev-qa-db-fra.com

Utilisation de champs personnalisés avancés d'un type de publication personnalisé dans un autre type de publication personnalisée/à l'aide de codes abrégés imbriqués

J'ai 2 types de messages personnalisés, project et person. Les deux ont plusieurs champs personnalisés. Je travaille sur un modèle pour le type de publication personnalisé project.

Dans les champs personnalisés project, j'ai plusieurs champs de type relation, comme le montre cette capture d'écran. Malheureusement, je ne comprends pas vraiment ce qu'ils veulent dire et comment les utiliser, mais ce n'est pas ma question principale. enter image description here

Ensuite, dans les champs personnalisés person, je n'ai que des champs de texte, tels que first_name, last_name, etc.

Maintenant, disons que j'ai un type de message personnalisé de type person. Cette personne a contribué à un projet, qui est un type de publication personnalisé de type project.

Comment puis-je maintenant, lorsque je travaille sur le modèle des publications project, inclure un shortcode [champ acf] dans un champ personnalisé de type person?

Voici une capture d'écran/un concept de ce que je veux faire: les informations tirées des champs personnalisés project sont entourées en rouge, tandis que les informations tirées des champs personnalisés person sont entourées en bleu. enter image description here

Remarques:

  • Je suis assez nouveau sur Wordpress et je n'ai aucune connaissance en php

  • Idéalement, une solution à mon problème ne devrait pas nécessiter que j'ajoute du code aux fichiers php, car cela n'est pas souhaité par mon client. De préférence, cela devrait être faisable dans l'éditeur de modèles WPBakery.

    • Les plugins installés et utilisables sont ACF, WPBakery, jeu d’outils, saillant, acf-vc, interface utilisateur de type post personnalisée

Merci pour votre aide, j'espère avoir réussi à formuler mon problème de manière compréhensible.

METTRE À JOUR

J'ai trouvé ce plugin, qui semble fournir une solution: shortcodes imbriqués: https://wordpress.org/plugins/nested-shortcodes/

Malheureusement, cela pose aussi des contraintes et ne m’a pas permis de trouver une solution. Ce que je veux faire, c'est ceci:

Entrée: [acf field="first_name" post_id=[acf field="student"]]

La sortie attendue étant: John Doe

Malheureusement, le résultat obtenu est: ]

Ce qui selon eux est en partie dû aux limitations de shortcode énumérées ici https://codex.wordpress.org/Shortcode_API#Limitations

D'autre part, cette solution de contournement codée fonctionne:

Entrée: [acf field="student"] Sortie: 89

Entrée: [acf field="first_name" post_id=89] Sortie: John Doe

Malheureusement, cette solution de contournement a l'ID unique codé en dur 89, ce qui l'empêche de l'utiliser comme modèle pour une utilisation future.

Quelqu'un at-il une solution ou une meilleure solution de contournement qui ne nécessite pas de code dur? Je suis également ouvert à de nouvelles idées et orientations, pour autant que cela me permette de résoudre ce problème.

1
charel-f

Je pense que, comme vous utilisez un modèle de relation dans vos paramètres ACF, vous devez parcourir les éléments de votre page. Pour cette raison, vous pouvez simplement utiliser le code de la documentation ACF et l'ajouter à votre single.php ou page.php. https://www.advancedcustomfields.com/resources/relationship/

Si vous souhaitez toujours utiliser des codes abrégés, vous pouvez créer un propre code abrégé comprenant l'exemple de code du lien ci-dessus.

J'espère que cela t'aides!

0
be.fresh

Voici une solution que j'ai trouvée avec l'aide de be.fresh. L'ajout de cette ligne de code dans le fichier functions.php crée un shortcode [personne], qui donne le résultat correct.

function person_func() {
    $postID = do_shortcode("[acf field='student']");
    $postField = get_field("first_name", $postID);
    return $postField;
}
add_shortcode( 'person', 'person_func' );

Pourquoi ça marche? J'ai trouvé ici qu'ACF accepte également les identifiants de publication dans leur fonction get_field (), ce qui me permet de contourner mon problème avec le 89 codé en dur comme identifiant de publication.

Bien sûr, cette fonction peut être rendue plus utile en créant un shortcode pouvant prendre des attributs, comme on peut le trouver ici .

0
charel-f