Afficher le titre SEO de Yoast WordPress dans le modèle d'archive

14

Le plugin WordPress SEO de Yoast permet aux utilisateurs d'ajouter des titres SEO et des méta descriptions aux pages d'archives des termes de taxonomie. Celles-ci sont ensuite utilisées en tête du document.

J'essaie d'afficher le titre SEO des termes de taxonomie en tant que H1 dans mon modèle d'archive de taxonomie.

Pour ce faire, dans une publication, un type de publication ou une page, rien de plus simple:

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

Sur les modèles d'archives, cela ne fonctionne pas.

Est-ce que quelqu'un sait comment faire fonctionner cela?

Exemple de capture d'écran

Il s'agit du titre d'un terme de balise spécifique. J'essaie d'afficher ce titre - mais ensuite pour un terme de taxonomie personnalisé - dans mes modèles d'archives.

L'écran d'édition des archives de balises

Code final

C'est ce que j'ai fini par utiliser dans mon archive.phpmodèle. Cela fonctionne si vous utilisez une taxonomie personnalisée. Pour les tags ou les catégories, consultez la réponse de Mike Madern ci-dessous.

<h1 class="archive-title">
<?php
if ( is_tax() ) :                                                                   
    $taxonomy = get_queried_object()->taxonomy;
    $term_id = get_queried_object()->term_id;
    $meta   = get_option( 'wpseo_taxonomy_meta' );
    $title  = $meta[$taxonomy][$term_id]['wpseo_title'];
    //printf( '<pre>%s</pre>', print_r( get_option( 'wpseo_taxonomy_meta' ), 1 ) );
    if ( isset($meta) && !empty($title) ) :         
        echo apply_filters( 'the_title', $title );
    else :
        single_term_title();    
    endif;
endif;                              
?>
</h1>  
Mattvic
la source

Réponses:

19

Obtenez des titres SEO d'archivage

Si vous avez défini un titre d'archive de type de publication personnalisé, vous pouvez l'obtenir en:

$titles = get_option( 'wpseo_titles' );
$title  = $titles['title-ptarchive-POST_TYPE'];

echo apply_filters( 'the_title', $title );

N'oubliez pas de remplacer POST_TYPEpar votre propre type de publication personnalisé.

Pour afficher toutes les wpseo_titlevariables, vous pouvez utiliser:

printf( '<pre>%s</pre>', print_r( get_option( 'wpseo_titles' ), 1 ) );

Ainsi, vous pouvez facilement choisir celui dont vous avez besoin.

Obtenez des titres SEO à terme

Les catégories

En utilisant ce code, vous pouvez obtenir le titre SEO que vous avez défini:

$cat_id = get_query_var( 'cat' );
$meta   = get_option( 'wpseo_taxonomy_meta' );

$title  = $meta['category'][$cat_id]['wpseo_title'];

echo apply_filters( 'the_title', $title );

Mots clés

En utilisant ce code, vous pouvez obtenir le titre SEO que vous avez défini:

$tag_id = get_query_var( 'tag' );
$meta   = get_option( 'wpseo_taxonomy_meta' );

$title  = $meta['post_tag'][$tag_id]['wpseo_title'];

echo apply_filters( 'the_title', $title );

Pour afficher toutes les wpseo_taxonomy_metavariables, vous pouvez utiliser:

printf( '<pre>%s</pre>', print_r( get_option( 'wpseo_taxonomy_meta' ), 1 ) );

De cette façon, vous pouvez voir la structure et les variables disponibles.

Mike Madern
la source
Vous avez ajouté le titre dans SEO > titres et métas > Types de publication ?
Mike Madern
J'ai amélioré ma réponse avec la solution :-)
Mike Madern
Je suppose que vous avez manqué ma dernière édition: -PI a ajouté une version avec $tag_id.
Mike Madern
1
Merci beaucoup pour le code, je ne pourrais jamais comprendre cela. J'ai apporté quelques modifications mineures pour le faire fonctionner avec des taxonomies personnalisées.
Mattvic
C'est bien. J'ai dû utiliser get_queried_object()->term_id, au lieu de get_query_var()cela, car le premier retourne l'identifiant, le second renvoie le slug, ce qui fait que le code envoie des remarques «index non défini». Aussi, prenez soin de vérifier s'il est quelque chose ensemble à $meta['post_tag|category'], comme vous obtenez des avis d'index non définis ainsi. (WP 4.2.2, btw)
cabgfx
5

Sur la page d'archive dans la boucle de post, ajoutez la ligne de code suivante pour le faire fonctionner

echo get_post_meta(get_the_ID(), '_yoast_wpseo_title', true); 

Dites-moi si cela fonctionne pour vous ou je fournirai une autre solution.

Vinod Dalvi
la source
Cela n'a malheureusement pas fonctionné. Il montre le titre SEO du premier message dans les archives. Je vais probablement devoir plonger dans la base de données pour voir où ces données sont stockées.
Mattvic
L'utilisez-vous en boucle? Pouvez-vous me montrer le code?
Vinod Dalvi
J'ai ajouté mon code. Je ne sais pas si j'ai expliqué que je voulais sortir le titre de la page, pas les titres de chaque article dans la boucle.
Mattvic
Ceci est exactement ce que je cherchais. Affiche le titre SEO dans la boucle. De plus, j'ai remplacé get_the_ID () par $ post-> ID
gerbz
cela me sauve la vie. bon ..
Mukii kumar
0

Obtention du mot clé focus pour les catégories et les balises

Pour obtenir le mot clé focus d'une catégorie ou d'une balise par programme, vous pouvez utiliser l'une des deux méthodes suivantes:

            /** Method 1. Tap into the options directly. **/
            $meta = get_option( 'wpseo_taxonomy_meta' ); // needed only once, so keep this outside/before your foreach loop.

            $posttags = get_the_tags();
            if ($posttags) {
                foreach( $posttags as $tag ) {
                    echo $meta['post_tag'][$tag->term_id]['wpseo_focuskw'];
                }
            }

C'est essentiellement l'approche utilisée par Mike à la fin de son post.

ou

            /** Method 2. Use Yoast's function. **/
            $posttags = get_the_tags();
            if ($posttags) {
                foreach( $posttags as $tag ) {
                    echo WPSEO_Taxonomy_Meta::get_term_meta( $tag->term_id, 'post_tag', 'focuskw' );
                }
            }

J'ai tendance à préférer la deuxième approche parce que de cette façon, je n'ai pas à chercher ou à me soucier d'obtenir la méta-option moi-même.

Dans votre cas functions.php, vous voudrez peut-être tester if class_exists( 'WPSEO_Taxonomy_Meta' ), puis peut-être envelopper la fonction Yoast dans un functon, pour être sûr au cas où vous deviez cesser d'utiliser Yoast SEO en fin de compte.

Quelques antécédents

Comme mentionné dans la question d'origine, quelque chose comme ça get_post_meta( $tag->term_id, '_yoast_wpseo_focuskw', true);ne fonctionnera pas pour les catégories et les pages (il ne retournera rien.)

Alors pourquoi ça?

En effet, pour les catégories et les balises, le mot clé focus est enregistré ailleurs dans la base de données. Au lieu d'être enregistré à l'intérieur de la wp_postmetatable comme d'habitude, il est enfoui profondément à l'intérieur de la wp_optionstable, en tant qu'objet JSON.

Les méthodes ci-dessus nous permettent d'accéder à ces valeurs.


Enfin, si vous êtes comme moi et que vous ne vous souvenez pas du nom des taxonomies (par exemple: il n'est pas évident pourquoi les balises utilisent la taxonomie post_taget pas seulement tag, vérifiez simplement les URL lorsque vous modifiez une catégorie ou une balise: elle affichera …taxonomy=category…ou similaires.

Fabien Snauwaert
la source
0

Réponse Obtenir le mot clé de focus pour les catégories et les balises

// ça marche merci
// avec reste api

obtenir / wp-json / wp / v2 / categories? slug =slug_name

plugin.in utilise la méthode 1

changer de ligne

$meta['post_tag'][$tag->term_id]['wpseo_focuskw'];

$meta['category'][$param_post_id]['wpseo_focuskw'];

Chaiiz Rataphan
la source