Yoast SEOパンくずリスト出力項目をカスタマイズ【wpseo_breadcrumb_links】

- WordPress -
2019.11.28
WordPress

Yoast SEOは内部SEO対策で使っていて、ついでにパンくずリストの機能も使っている時。

階層構造を持ったカテゴリー・タクソノミーや固定ページ配下にカスタム投稿タイプのアーカイブページを持っていたりすると、デフォルトのままではパンくずリストの出力項目が思い通りにならないことがあった。

たとえば、こう↓したいのに、

ホーム > 会社情報 > 支店一覧 > 〇〇支店

こう↓なってしまうなどがパンくずあるある。

ホーム > 支店一覧 > 〇〇支店

そんなとき、Yoast SEOのwpseo_breadcrumb_linksフィルターフックを使うと思った以上に自由にカスタマイズできたので、カスタマイズ方法をメモしておく。

日本語で情報があまりなかったので役立てば幸いです。

Yoast SEOパンくずをカスタマイズ【wpseo_breadcrumb_linksフック】

前提として、Yoast SEOの以下のパンくずリスト出力コードをheader.php(など)に書いてあることとします。

if ( function_exists('yoast_breadcrumb') ) {
    yoast_breadcrumb( '</p><p id="breadcrumbs">','</p><p>' );
}

参考How do I Implement Yoast SEO Breadcrumbs?

まず、var_dump でパンくずリスト生成に必要な情報の構造を確認

functions.phpへ以下を貼り付ける。

function override_yoast_breadcrumb( $links ) {
    // $linksの構造を確認する
    var_dump( $links );
    return $links;
}
add_filter( 'wpseo_breadcrumb_links', 'override_yoast_breadcrumb' );

その後にパンくずリストの出力調整をしたいページにアクセスすると、以下のように$linksの中身がダンプされる。

まだパンくず出力の処理は加えておらず、単純に$linksの中身を把握しただけ。現在出力されているパンくずリストと見比べながらダンプを眺めてみると、なんとな~く構造が理解できると思う。

$linksの配列を加工する

上記の例で、例えば「"子カテゴリー"をパンくずには表示したくない」とする。その場合、以下のように$links配列の4番目(index 3)をマルっと削除してしまえばいい。

function override_yoast_breadcrumb( $links ) {
    // $links配列の4番目を削除
    array_splice( $links, 3, 1 );
    var_dump( $links );
    return $links;
}
add_filter( 'wpseo_breadcrumb_links', 'override_yoast_breadcrumb' );

すると、以下のように「子カテゴリ-」がダンプからもパンくずリストからも消えたことが分かる。

Yoast SEOのパンくずリストカスタマイズ

削除だけでなく、例えばこんな風に追加することもできる(実際にはあり得ない構造だけど、あくまでも何でも好きなように追加できるよ、という例)。

function override_yoast_breadcrumb( $links ) {
    // $links配列の2番目に'会社情報'を追加
    $add_link[] = array('text' => '会社情報', 'url' => '/company/');
    array_splice( $links, 1, 0, $add_link );
    return $links;
}
add_filter( 'wpseo_breadcrumb_links', 'override_yoast_breadcrumb' );

Yoast SEOのパンくずリストカスタマイズ

アーカイブページを加えたい場合は、以下のように書くとurlを直書きをせずともよくなる。以下は「投稿」のアーカイブページを加えたい場合(これもあくまでも例)。

function override_yoast_breadcrumb( $links ) {
    // 投稿アーカイブページを2番目に追加
    $add_link[] = array('ptarchive' => 'post');
    array_splice( $links, 1, 0, $add_link );
    return $links;
}
add_filter( 'wpseo_breadcrumb_links', 'override_yoast_breadcrumb' );

投稿ではなくカスタム投稿タイプのアーカイブページなら、3行目の'post'をカスタム投稿タイプのスラッグに置き換えればよい。

このままだと全ページのパンくずリストに反映されてしまうので、if分岐させることを忘れないこと。

function override_yoast_breadcrumb( $links ) {
    // newsアーカイブページ、news詳細ページでのみ処理
    if (is_post_type_archive( 'news' ) || is_singular( 'news' )) {
        array_splice( $links, 3, 1 );
    }
    return $links;
}
add_filter( 'wpseo_breadcrumb_links', 'override_yoast_breadcrumb' );