Yoast SEOプラグインの「プライマリカテゴリ」機能の使い方
前田 大地
セブンシックスのダイチです。
WordPressのSEOプラグインはいろいろありますが、私はYoast SEOプラグインをおすすめします。ネット上では、機能が豊富なため敬遠する人も多いみたいですけどね。その豊富な機能の中に隠された「プライマリカテゴリ」について、日本語で解説しているサイトが見つからなかったので、ここで紹介したいと思います。
目次
Yoast SEOプラグインって?
SEOのためのプラグインです。ざっくり説明すると、「ページタイトル」などのMETAタグを細かく設定したり、XMLサイトマップを生成できます。
https://ja.wordpress.org/plugins/wordpress-seo/
プライマリカテゴリって?
Yoast SEOプラグインの(隠してないけど)隠された機能です。Yoast SEOプラグインをインストールすると、投稿に複数のカテゴリを設定した際に、メインとなるカテゴリを指定できるようになります。果たしてこれが一体何を意味するものなのか、疑問に思っていた人も多いことでしょう。
例えば、投稿一覧画面でメインのカテゴリを1つだけ表示したい場合などに真価を発揮します。また、パーマリンクにカテゴリ名を含めている場合なども、プライマリカテゴリが適用されます。すごいねっ!
使い方
何やらプライマリカテゴリを取得する関数が用意されているような情報もありましたが、ちょっと良くわからなかったので、昔から私が問題なく使用できている方法で。
プライマリカテゴリの取得
プライマリカテゴリのカテゴリIDは、ループ内でget_post_meta関数を使うと取得できます。
$primaryTerm = get_post_meta( $post->ID, '_yoast_wpseo_primary_category', true );
カテゴリ名の取得
カテゴリ名を取得したい場合は、get_cat_name関数を使いましょう。
$termName = get_cat_name( $primaryTerm );
カテゴリURLの取得
URLなら、get_category_link関数ですね。
$termUrl = get_category_link( $primaryTerm );
実践編
実際に使うケースを想定してみます。プライマリカテゴリが指定されていない場合は、最初のカテゴリを取得するようにしてみましょう。
$primaryTerm = get_post_meta( $post->ID, '_yoast_wpseo_primary_category', true ); if(!$primaryTerm) { $primaryTerm = get_the_category(); $primaryTerm = $primaryTerm[0]->term_id; } $termName = get_cat_name( $primaryTerm ); $termUrl = get_category_link( $primaryTerm );
カスタム分類で使う
プライマリカテゴリ機能は、カスタム分類でも使用できます。その場合は、カテゴリとはちょっと変わります。
プライマリカテゴリの取得
$primaryTerm = get_post_meta( get_the_ID(), '_yoast_wpseo_primary_カスタム分類名', true );
例えば、カスタム分類名が「news_category」だった場合は、
$primaryTerm = get_post_meta( get_the_ID(), '_yoast_wpseo_primary_news_category', true );
となります。
カテゴリ名・URLの取得
で、名前とURLの取得も、カテゴリと同じ関数は使えないので。
$termObject = get_term( $primaryTerm, 'カスタム分類名' ); $termName = $termObject->name; $termUrl = get_term_link( $termObject->term_id, 'カスタム分類名' );
みたいな感じで、一旦オブジェクトを取得してからまわりくどく入手します。もしかしたら、もっといい方法あるかもしれませんが。
実践編
で、これも、プライマリカテゴリが指定されていない場合は最初のカスタム分類を取得するようにコードを書いてみます。
$primaryTerm = get_post_meta( get_the_ID(), '_yoast_wpseo_primary_カスタム分類名', true ); if( $primaryTerm ) { $termObject = get_term( $primaryTerm, 'カスタム分類名' ); $termName = $termObject->name; $termUrl = get_term_link( $termObject->term_id, 'カスタム分類名' ); } else { $termObject = get_the_terms( $post->ID, 'カスタム分類名' ); $termName = $termObject[0]->name; $termUrl = get_term_link( $termObject[0]->term_id, 'カスタム分類名' ); }
こんな感じになりました。
おしまい
以上、プライマリカテゴリ機能の使い方でした。海外製のプラグインは、なかなか日本語で情報が出回らないのがネックですが、調べてみると新しい発見もたくさんあります。ヒマな休日は、ぜひ翻訳ツール片手に新しいプラグイン発見の旅へ!