ミギムキ

[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です。