[WordPress] [Yoast SEO] メインに設定したタームのリンクと名前を取得したい
Yoast SEOは、タイトルやディスクリプションなどのSEO設定が簡単にできるプラグインです。
Yoast SEOには、カテゴリーやタームに「メイン」という属性を設定できる機能があります。
この機能を活用することで、投稿に設定された複数のカテゴリー(ターム)に優先順位をつけることができます。
例えば、ある投稿の関連記事を表示するときに、その投稿の主要なカテゴリーを一つだけ参照したい、というケースで重宝します。
本記事では、メイン属性が設定されたカテゴリーやタームを取得する方法について紹介します。
サンプルコード
$taxonomy_slug = 'category';
$term = '';
if(class_exists('WPSEO_Primary_Term')) {
$wpseo_primary_term = new WPSEO_Primary_Term($taxonomy_slug, get_the_ID());
$term = get_term($wpseo_primary_term->get_primary_term());
}
if($term == '' || is_wp_error($term)) {
$term = get_the_terms(get_the_ID(), $taxonomy_slug)[0];
}
$term_link = get_term_link($term->slug, $taxonomy_slug);
echo '<a href="'. $term_link .'">'. $term->name .'</a>';
上記サンプルでは「メイン」設定されたカテゴリーを取得し、そのリンクを出力しています。
タームを取得する場合は変数「$taxonomy_slug」の内容をタクソノミーのスラッグに書き換えて使用します。
サンプルコードの解説
if(class_exists('WPSEO_Primary_Term')) {
$wpseo_primary_term = new WPSEO_Primary_Term($taxonomy_slug, get_the_ID());
$term = get_term($wpseo_primary_term->get_primary_term());
}
Yoast SEOから提供されているクラス「WPSEO_Primary_Term」と、そのAPIを実行することで、「メイン」設定されたカテゴリー、タームが取得できます。
何らかの要因でYoast SEOが停止している場合に、不正なクラス生成が行われないように「class_exists」関数でクラス定義の有無をチェックしています。
あとは生成したクラス経由で「get_primary_term」関数を実行し、その結果を「get_term」関数に渡すことで、対象のターム情報を取得します。
if($term == '' || is_wp_error($term)) {
$term = get_the_terms(get_the_ID(), $taxonomy_slug)[0];
}
「メイン」設定されたカテゴリー、タームを取得する際の注意点として、必ずしもすべてのカテゴリー、タームに「メイン」設定がされていない可能性があります。
「メイン」設定されていない投稿に対して「get_primary_term」関数を実行すると、実行結果は「なし」ということになり、そのままターム情報を参照すると下記のエラーが発生してしまいます。
Object of class WP_Error could not be converted to string
このようなエラーを回避するために、ターム情報が取得できていない場合には「get_the_terms」関数でターム情報を取得し直すようにしています。
ご質問など受け付けています
記事の中でわかりにくかったところ、もっと知りたかったこと、間違っていることなど、何でもお気軽にご連絡ください。
ご連絡は下記フォームを利用いただくか、ツイッターアカウント@flat8migi宛てでもOKです。