アーカイブテンプレートにYoast WordPress SEOタイトルを表示する


13

YoastのWordPress SEOプラグインを使用すると、ユーザーはSEOタイトルとメタディスクリプションを分類用語アーカイブページに追加できます。これらは、ドキュメントのヘッドで使用されます。

分類学アーカイブテンプレートで分類学用語のSEOタイトルをH1として表示しようとしています。

投稿でこれを行うには、投稿タイプまたはページが簡単です:

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>  

回答:


19

アーカイブSEOタイトルを取得する

カスタム投稿タイプのアーカイブタイトルを定義した場合、次の方法で取得できます。

$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 ) );

そのため、必要なものを簡単に選択できます。

Term SEOタイトルを取得する

カテゴリー

このコードを使用すると、定義した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 ) );

これにより、構造と使用可能な変数を確認できます。


SEO > titles&metas > Post Typesでタイトルを追加しましたか?
マイクマダーン

ソリューションで私の答えを改善しました:
マイクマダーン

私はあなたが私の最後の投稿の編集を見逃したと推測しています:-PIはでバージョンを追加しました$tag_id
マイクマダーン

1
コードを本当にありがとう、私はこれを理解することができなかったでしょう。カスタム分類法で動作するように、いくつかの小さな変更を加えました。
マットヴィック

これは素晴らしい。get_queried_object()->term_id代わりにを使用する必要がget_query_var()ありました。前者はidを返し、後者はスラッグを返すため、コードは「未定義のインデックス」通知をスローします。また、に設定されているものがあるかどうかを確認してください$meta['post_tag|category']。未定義のインデックス通知も表示されます。(WP 4.2.2、btw)
cabgfx

5

ポストループのアーカイブページで、次のコード行を追加して機能させます

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

それがあなたのために働いているかどうか教えてください、または私は別のソリューションを提供します。


残念ながらうまくいきませんでした。アーカイブの最初の投稿のSEOタイトルを示しています。このデータが保存されている場所を確認するには、おそらくDBに飛び込む必要があります。
マットヴィック

ループで使用していますか?コードを見せてもらえますか?
ヴィノッドダルビ

コードを追加しました。ループ内の各投稿のタイトルではなく、ページタイトルを出力したいと説明したかどうかはわかりません。
マットヴィッチ

これはまさに私が探していたものです。ループ内のSEOタイトルを出力します。また、get_the_ID()を$ post-> IDに置き換えました
gerbz

これは私の命を救います。良い..
Mukiiクマー

0

カテゴリとタグのフォーカスキーワードを取得する

プログラムでカテゴリまたはタグのフォーカスキーワードを取得するには、次の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'];
                }
            }

これは基本的に、Mikeが投稿の最後で使用したアプローチです。

または

            /** 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番目のアプローチを好む傾向があります。

で、Yoastの機能functions.phpをテストしてif class_exists( 'WPSEO_Taxonomy_Meta' )から、独自の機能にラップして、Yoast SEOの使用を途中でやめた場合に備えて安全にすることができます。

いくつかの背景

元の質問で述べたように、get_post_meta( $tag->term_id, '_yoast_wpseo_focuskw', true);カテゴリやページでは機能しません(何も返されません)。

それはなぜですか?

これは、カテゴリとタグの場合、フォーカスキーワードがデータベースの他の場所に保存されるためです。wp_postmeta通常のようにテーブル内に保存される代わりに、テーブルの奥深くにwp_optionsJSONオブジェクトとして埋め込まれます。

上記のメソッドにより、これらの値にアクセスできます。


あなたが私に似ていると分類法の名前を思い出せない場合は最後に、(例:タグは分類法を使用する理由、それはない明らかだpost_tagだけではなく、tagあなたがカテゴリやタグを編集するとき、単にURLをチェックしてください:それは見せします…taxonomy=category…かなど。


0

返信カテゴリとタグのフォーカスキーワードを取得する

//感謝します
//残りのAPIで

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

plugin.in使用方法1

行を変更

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.