YoastによるWordPress SEOプラグインは、ユーザーがSEOタイトルとメタ説明を分類学用語アーカイブページに追加することを可能にします。これらは文書の先頭で使用されます。
私は私の分類アーカイブテンプレートのH1として分類用語のSEOタイトルを表示しようとしています。
投稿でこれを行うには、投稿の種類またはページは簡単です。
echo get_post_meta($post->ID, '_yoast_wpseo_title', true);
アーカイブテンプレートではこれは機能しません。
これを機能させる方法を誰かが知っていますか?
これは特定のタグ用語のタイトルです。私のアーカイブテンプレートには、このタイトルを表示しようとしています。
これが私のarchive.php
テンプレートで使用した結果です。カスタム分類法を使用している場合は機能します。タグやカテゴリについては、下記のMike Madernの回答をご覧ください。
<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>
カスタム投稿タイプのアーカイブタイトルを定義した場合は、次の方法で取得できます。
$titles = get_option( 'wpseo_titles' );
$title = $titles['title-ptarchive-POST_TYPE'];
echo apply_filters( 'the_title', $title );
POST_TYPE
をあなた自身のカスタム投稿タイプに置き換えることを忘れないでください。
すべてのwpseo_title
変数を表示するには、次のようにします。
printf( '<pre>%s</pre>', print_r( get_option( 'wpseo_titles' ), 1 ) );
だからあなたは簡単にあなたが必要なものを選ぶことができます。
このコードを使うことであなたが定義したSEOタイトルを得ることができます:
$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 );
このコードを使うことであなたが定義したSEOタイトルを得ることができます:
$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 );
すべてのwpseo_taxonomy_meta
変数を表示するには、次のようにします。
printf( '<pre>%s</pre>', print_r( get_option( 'wpseo_taxonomy_meta' ), 1 ) );
このようにして、構造と利用可能な変数を見ることができます。
ポストループのアーカイブページに、それを機能させるために次のコード行を追加します。
echo get_post_meta(get_the_ID(), '_yoast_wpseo_title', true);
それがあなたのために働いているかどうか教えてくださいまたは私は別の解決策を提供します。
プログラムでカテゴリまたはタグの focusキーワード を取得するには、次の2つの方法のいずれかを使用できます。
/** 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'];
}
}
これは基本的に彼の投稿の最後にマイクが使ったアプローチです。
または
/** 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' );
}
}
私は自分自身でメタオプションを取得することや取得することを気にする必要がないので、私は2番目のアプローチを好む傾向があります。
あなたのfunctions.php
では、if class_exists( 'WPSEO_Taxonomy_Meta' )
をテストし、それからYoast SEOの使用をやめることになった場合に備えて安全のためにYoast関数をあなた自身の関数にラップすることができます。
元の質問で述べたように、get_post_meta( $tag->term_id, '_yoast_wpseo_focuskw', true);
のようなものはカテゴリやページには機能しません(何も返しません)。
それで、それはなぜですか?
これは、カテゴリとタグの場合、focusキーワードがデータベースの他の場所に保存されているためです。通常のようにwp_postmeta
テーブルの内部に保存されるのではなく、JSONオブジェクトとしてwp_options
テーブルの内部に埋め込まれます。
上記の方法でこれらの値にアクセスできます。
最後に、あなたが私のようで分類法の名前を思い出せない場合(例:なぜtag
ではなく分類法post_tag
が使われるのかはっきりしません、カテゴリやタグを編集するときにURLをチェックするだけです:it …taxonomy=category…
などを表示します
カテゴリとタグのfocusキーワードを取得する
//うまくいきます
//残りの部分にapiを付けて
/ wp-json/wp/v2/categoriesを取得しますか?slug = slug_name
方法1を使用するplugin.in
改行
$meta['post_tag'][$tag->term_id]['wpseo_focuskw'];
$meta['category'][$param_post_id]['wpseo_focuskw'];