web-dev-qa-db-fra.com

Affichage de champs personnalisés sur le thème enfant avec Genesis

J'ai tout essayé pour que les champs personnalisés soient affichés sur mes messages en utilisant un cadre de thème Enfant du thème Genesis. J'ai essayé de suivre tous les tutoriels que je pouvais trouver concernant ce sujet, mais je ne parviens toujours pas à afficher mes champs personnalisés sur mes messages!

La solution la plus simple que j'ai essayée est d'utiliser les instructions de Brad Daltons (j'ai essayé beaucoup d'autres méthodes) et d'ajouter ce qui suit dans mon fichier de fonctions:

add_action( 'genesis_after_post_title', 'custom_field_before_content' );
/**
* @author Brad Dalton - WP Sites
* @link http://wp.me/p1lTu0-9WF
*/
function custom_field_before_content() {
if(is_page() || is_single() ) {
genesis_custom_field('instrument');
}
}

J'ai ensuite ajouté le champ personnalisé dans mes messages. J'ai essayé d'ajouter le champ personnalisé avec Advanced Custom Fields qui s'affiche parfaitement dans l'admin, mais pas dans la publication sur mon site.

Est-ce que quelqu'un sait ce que je fais de mal pour obtenir cela à la sortie ou une méthode différente qui pourrait fonctionner pour moi. Je n'ai pas rencontré de problème avec différents thèmes, mais en utilisant le framework de thèmes Genesis, je ne peux pas le faire fonctionner - cela fait deux jours que je travaille!

Merci,

Ciarán

2
Ciarán

Que diriez-vous au lieu de genesis_custom_field('instrument'); utilisez: echo genesis_get_custom_field('instrument');

De plus, le hook d'action genesis_after_post_title est déconseillé depuis la version 1.7.0 et vous devez utiliser genesis_entry_header avec les priorités appropriées. Pour plus d'informations, veuillez utiliser les liens de référence ci-dessous.

Référence:

1
Borek

Voici ma solution pour un type de message personnalisé:

Ajoutez ceci à functions.php. (Ou, si vous avez créé un modèle pour votre type d'article personnalisé, tel que single-instrument.php, ajoutez-le à celui-ci au lieu de functions.php)

// Display Advanced Custom Fields
add_action('genesis_entry_header', 'type_of_instrument');

function type_of_attorney() {
if ( is_singular('profile') && genesis_get_custom_field('type_of_instrument') )
echo '<hr /><div id="type_of_instrument">Title: '. genesis_get_custom_field('type_of_instrument') .'</div>';
}

En supposant que vous ayez nommé votre champ 'type_of_instrument' dans Champs personnalisés avancés. Utilisez le nom que vous avez réellement donné au champ. Vous devrez ajuster le code pour plusieurs champs. Il crée également une division autour du champ pour un style plus facile.

Si vous n'utilisez pas un type de publication personnalisé, vous souhaitez remplacer is_singular('profile'). Ma supposition est avec is_single mais ne me citez pas. Sinon, essayez if(is_page() || is_single() ) tel qu'il est utilisé dans le code que vous avez soumis dans votre question.

J'espère que cela pourra aider!

2
user55013

Bonne question Ciarán. Moi aussi, j'étais coincé à essayer d'afficher des champs personnalisés dans Genesis. Ce fil m'a débrouillé. Et en chemin, j'ai découvert qu'il était possible de pousser ces idées encore plus loin.

Par exemple, j'ai trouvé utile d'utiliser le plugin Advanced Custom Fields pour créer des pages d'arrivée dans WordPress. Je peux ajouter autant de champs WYSIWYG que nécessaire dans la page et les éditer tous séparément.

Pour afficher les champs dans Genesis, j'utilise une variante du code donné précédemment par Borek et user55013. Dans le code ci-dessous, j'ai ajouté des balises div pour pouvoir formater chaque champ séparément avec CSS:

add_action( 'genesis_after_content', 'display_custom_fields' );
function display_custom_fields() {
    if( is_page_template( 'page_landing.php') ) {
        printf( '<div class="landing-part-one">%s</div>', get_field('landing_part_one') );
        printf( '<div class="landing-part-two">%s</div>', get_field('landing_part_two') );
        printf( '<div class="landing-part-three">%s</div>', get_field('landing_part_three') );
        printf( '<div class="landing-part-four">%s</div>', get_field('landing_part_four') );
    }
}

En attendant, dans le panneau d'options de l'éditeur de groupe de champs des champs personnalisés avancés, j'ai positionné les champs WYSIWYG personnalisés "Élevé (après le titre)" et j'ai caché l'éditeur de contenu. Cela produit un espace d'édition vierge pour les champs personnalisés, qui apparaissent dans l'éditeur de pages comme s'ils étaient natifs de WordPress. Et dans les règles d'emplacement, j'ai configuré le groupe de champs pour qu'il ne s'affiche que pour le modèle de page de destination.

Et bien que j’ai à l’origine essayé à genesis_get_custom_fields () d’afficher les champs de cette fonction, il a supprimé toutes les balises <p> du champ. La sortie était un paragraphe run-on. La fonction Advanced Custom Fields get_field () fonctionne mieux.

En cours de route, j'ai également appris la différence entre 'genesis_custom_fields ()' et 'genesis_get_custom_fields ()'. Le premier fait directement écho au champ. Le second retourne le contenu du champ sous forme de chaîne.

Si vous utilisez des champs personnalisés avancés pour générer des images, ce fil est peut-être utile.

J'espère que ça aide :-)

0
lflier