Yoast SEOのメインカテゴリを取得する関数【Wordpress】

※本記事のコードは参考用です。使用前にご自身で動作確認をお願いします。

はじめに

WordPressサイトでYoast SEOプラグインを使っている場合、記事に「メインカテゴリ(Primary Category)」を設定できます。しかし、その値をテーマやテンプレート内で取得したい場合、少しコードが必要になります。

この記事では、Yoast SEOのメインカテゴリを取得するための WPSEO_Primary_Term クラスの使い方と、再利用しやすい関数の作成方法について解説します。

WPSEO_Primary_Term

WPSEO_Primary_Term は、Yoast SEOが提供する内部クラスで、投稿に紐づけられた「メインカテゴリ(Primary Term)」を取得するために使います。

再利用可能な関数を作る

以下のように関数化することで、どこからでも簡単に使えるようになります。リンク付きで出力するか、タームだけを出力するかを引数で設定できます。
また、もしYoastSEOのプラグインを無効化してしまった場合やメインカテゴリーが設定されていない場合のフォールバックも設定しています。

function the_primary_category( $linked = true, $post_id = null ) {
    if ( is_null( $post_id ) ) {
        $post_id = get_the_ID();
    }

    $term = null;

    if ( class_exists( 'WPSEO_Primary_Term' ) ) {
        $primary_term = new WPSEO_Primary_Term( 'category', $post_id );
        $primary_term_id = $primary_term->get_primary_term();
        $term = get_term( $primary_term_id );
        if ( is_wp_error( $term ) ) {
            $term = null;
        }
    }

    if ( ! $term ) {
        $categories = get_the_category( $post_id );
        if ( ! empty( $categories ) ) {
            $term = $categories[0];
        }
    }

    if ( $term ) {
        $name = esc_html( $term->name );
        if ( $linked ) {
            $url = esc_url( get_category_link( $term->term_id ) );
            echo '<a href="' . $url . '">' . $name . '</a>';
        } else {
            echo $name;
        }
    }
}

使い方

テンプレート内で以下のように呼び出すだけでOKです。

リンク付きで表示したい場合:

<?php the_primary_category(); ?>

リンクなしで表示したい場合:

<?php the_primary_category(false); ?>

まとめ

Yoast SEOの「メインカテゴリ」を取得したい場合は WPSEO_Primary_Term クラスを活用しましょう。関数化しておけば、テーマ内のどこでも簡単に使い回すことができます。

SEOに関する細かな設定をテーマに反映させたい方は、ぜひ活用してみてください。