Blog

ブログ

【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とは別プラグインですので、プライマリカテゴリーは反映されません。残念。

Web Designer / Developer

前田 大地

沼津高専中退。デザイン会社、システム開発会社を経てセブンシックスを設立。マーケティング、デザイン、テクノロジーに精通するオールラウンダーとして、県内の中小企業に向けた戦略型ホームページ制作を開始。一方で、都内の広告代理店からの要請で大企業案件にも多数参加。企業が本当に必要とするホームページ制作とは何か、を日々探求している。

Blog top