web-dev-qa-db-fra.com

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

Le plugin SEO WordPress de Yoast permet aux utilisateurs d’ajouter des titres et méta-descriptions SEO aux pages d’archives des termes de taxonomie. Ceux-ci sont ensuite utilisés dans l'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 faire cela dans un message, le type de message ou la page est facile:

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

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

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

Exemple de capture d'écran

C'est le titre d'un terme spécifique. J'essaie d'afficher ce titre - mais ensuite pour un terme de taxonomie personnalisé - dans mes modèles d'archive.

The tag archive edit screen

Code final

C'est ce que j'ai fini par utiliser dans mon modèle archive.php. 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>  
11
Mattvic

Obtenir les titres d'Archive SEO

Si vous avez défini un titre d'archive Custom Post Type, 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_TYPE par votre propre type de message personnalisé.

Pour afficher toutes les variables wpseo_title, vous pouvez utiliser:

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

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

Obtenir des titres de terme SEO

Les catégories

En utilisant ce code, vous pouvez obtenir le titre de référencement 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 de référencement 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 variables wpseo_taxonomy_meta, 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.

15
Mike Madern

Sur la page d'archive dans la boucle de publication, ajoutez la ligne de code suivante pour que cela fonctionne

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

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

5
Vinod Dalvi

Obtenir le 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 car de cette façon, je n'ai pas à chercher ou à me préoccuper de l'option méta.

Dans votre functions.php, vous voudrez peut-être tester if class_exists( 'WPSEO_Taxonomy_Meta' ), puis envelopper la fonction Yoast dans une fonction qui lui est propre, par mesure de sécurité, au cas où vous arrêteriez d'utiliser Yoast SEO plus tard.

Un peu de fond

Comme mentionné dans la question initiale, quelque chose comme get_post_meta( $tag->term_id, '_yoast_wpseo_focuskw', true); ne fonctionnera pas pour les catégories et les pages (cela ne renverra 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é dans la table wp_postmeta comme d'habitude, il est enfoui profondément dans la table wp_options, 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 plus du nom des taxonomies (par exemple, il n'est pas évident de comprendre pourquoi les balises utilisent la taxonomie post_tag et pas seulement tag, il suffit de consulter les URL lorsque vous modifiez une catégorie ou une balise: affichera …taxonomy=category… ou similaire

0
Fabien Snauwaert

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

// ça marche merci
// avec repos api

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

plugin.in use Méthode 1

changer de ligne

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

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

0
Chaiiz Rataphan