1
votes

Echo get_post_meta () dans une fonction

Je n'ai pas trouvé de questions similaires comme la mienne, donc j'espère que quelqu'un pourra m'expliquer ce que je fais mal.

Je voudrais faire écho aux champs personnalisés de wordpress via une fonction. Voici ce que je fais:

 page de backend de capture d'écran

function add_meta_data() {
    if ( is_page() ) {
        echo'<meta property="og:title" content="' . get_post_meta( $post_id, 'og_title', true ) . '">';
    }
add_action('wp_head','add_meta_data',1);


1 commentaires

où est post_id dans get_post_meta?


3 Réponses :


0
votes

utilisez cette fonction avec l'identifiant de publication /

get_post_meta( $post->ID, 'your_meta_key', true );

Merci


0 commentaires

0
votes

Si vous enregistrez le og_title via get_post_meta dans db, vous aurez certainement le og_title. Mais il semble que vous ne transmettez pas le post_id qui est obligatoire.

Veuillez consulter le document mentionné sur WP

https://developer.wordpress.org/reference/functions/get_post_meta/ a>

Vous devez mettre le post_id pour obtenir les métadonnées. Voir le code ci-dessous

function add_meta_data() {
    if ( is_page() ) {
        echo'<meta property="og:title" content="' . get_post_meta($post_id ,'og_title' ) . '">';
    }
add_action('wp_head','add_meta_data',1);


12 commentaires

si vous voulez aller plus loin, si le champ personnalisé og_title n'est pas défini, utilisez le titre de la page actuelle comme solution de secours au lieu de laisser la propriété vide


Oui, vous pouvez utiliser le même. Même dans la plupart des cas, le titre est utilisé comme og_title. pour la description de l'og, vous pouvez utiliser l'extrait de post.


@Kevin Je comprends, mais c'est le cas, je veux injecter un titre différent pour le og que le titre existant pour la page. J'ai essayé votre proposition, mais cela se traduit également par une balise meta vide.


@Demian essaie d'abord d'imprimer la sortie et vérifie quelle est la sortie? print_r (get_post_meta ($ post_id, 'og_title'));


Vérifiez également votre table wp_postmeta et vérifiez que le og_title pour le post_id existe ou non? Sinon, la fonction ne fonctionnera pas.


@Rohit il est probable qu'il n'existe pas dans wp_postmeta . Mes limitations dans la connaissance de php pensaient que l'enregistrement d'un champ personnalisé ferait cela, donc cela signifie que je dois d'abord l'injecter dans wp_postmeta ?


Youps, vous devez d'abord l'enregistrer dans wp_postmeta en utilisant la fonction add_post_meta. Ce n'est qu'alors que vous pouvez obtenir le og_title.


@Rohit Je comprends maintenant, c'est là que se trouve mon erreur et je n'ai pas pu trouver cela dans la documentation WP.


@Rohit J'ai vérifié postmeta et je vois cette capture d'écran wp_postmeta


Alors maintenant, essayez de faire écho à cette fonction - print_r (get_post_meta ('9145', 'og_title')); où 9145 est votre post_id. Voyez ce qui se passe?


Il vous manque juste post_id. Les données sont enregistrées dans la base de données.


@Rohit J'ai trouvé que le problème $ post_id n'est pas défini, c'est pourquoi il y a une balise meta vide sur le frontend.



0
votes

L'erreur que j'ai faite dans la fonction est que $ post_id n'est pas défini, car ce n'est pas une variable globale. Ce qu'il faut faire est:

function add_meta_data() {
    if ( is_page() ) {
        $post_id = get_the_id();
        echo'<meta property="og:title" content="' . get_post_meta( $post_id, 'og_title', true ) . '">';
    }
add_action('wp_head','add_meta_data',1);


0 commentaires