【WordPressの小技】Yoastのプライマリカテゴリを取得する関数
前田 大地
WordPressでYoast SEOプラグイン導入時、プライマリカテゴリを取得するコードをいつも忘れて調べ直しているので、常にfunctions.phpに記述しておけるように関数にしました。
関数:ss_get_primary_category
投稿に割り当てられたプライマリカテゴリを取得します。プライマリカテゴリが設定されていない記事では、最初のカテゴリを取得します。
コード
下記のコードをfunctions.php内に記述することで、テーマ内で関数が使えるようになります。
// プライマリカテゴリ取得 function ss_get_primary_category($post_id, $taxonomy='category'){ $primary_category = 0; if (class_exists('WPSEO_Primary_Term')){ $wpseo_primary_term = new WPSEO_Primary_Term( $taxonomy, $post_id ); $primary_term = get_term($wpseo_primary_term->get_primary_term()); if (!is_wp_error($primary_term)){ $primary_category = $primary_term; } } if (empty($primary_category)){ $categories_list = get_the_terms($post_id, $taxonomy); if (!empty($categories_list)){ $primary_category = $categories_list[0]; } } return $primary_category; }
使い方
<?php $primary_category = ss_get_primary_category($post_id, $taxonomy); ?>
パラメータ
$post_id
投稿のID。例:$post->ID
$taxonomy
タクソノミーのスラッグ。初期値:category
戻り値
タームのオブジェクトの配列が返ります。
get_termなどのテンプレートタグと同じです。
$primary_category = ss_get_primary_category($post->ID); $primary_category->term_id //カテゴリID $primary_category->name //カテゴリ名 $primary_category->slug //スラッグ // カテゴリアーカイブのURL取得はテンプレートタグを使う get_term_link( $primary_category );
色々な使用例
プライマリカテゴリのカテゴリアーカイブページにリンクを貼る
<?php $primary_category = ss_get_primary_category($post->ID); ?> <a href="<?php echo get_term_link( $primary_category ); ?>"><?php echo $primary_category->name; ?></a>
カスタム分類「works_cat」のプライマリカテゴリを取得する
<?php $primary_category = ss_get_primary_category($post->ID, 'works_cat'); ?>
おまけ:カスタムパーマリンクへのプライマリカテゴリ適用について
カスタムパーマリンクの設定で、カテゴリを含めるための「%category%」という変数があります。通常は、複数のカテゴリを選択したとき、パーマリンクに含めるカテゴリは選べません。Yoastを導入すれば、自動的にプライマリカテゴリが入ります。素晴らしい。
カスタム投稿タイプで、「Custom Post Type Permalinks」プラグインを導入すると、カスタム分類のタームスラッグをパーマリンクに入れられるようになります。が、こちらはYoastとは別プラグインですので、プライマリカテゴリーは反映されません。残念。