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?
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.
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>
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.
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 );
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.
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.
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.
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
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'];