今回は少々面倒なケースです。
ワードプレスは、元来ブログのためのシステムなので、「ホーム」は投稿の一覧(アーカイブ)であることがデフォルトです。ですが、企業サイトを制作する際にはホームは、単なるアーカイブではないことが殆どであるため、投稿カテゴリーとして「ブログ」などを作成、その下にさらに子カテゴリーを追加して、その下に記事をぶら下げていることが多いのです。が、投稿=ブロク記事にするならば、そもそも「ブログ」カテゴリーは不要だよな、と思っておりました。今回親カテゴリーの「ブログ」を削除、投稿のカテゴリーを直接作成し、記事を入れていくことにしました。ここで、ワードプレスをかじった人なら「では投稿一覧のURLって何になるの?」と思いますよね。
調べたところ、ワードプレスのデフォルト設定では、投稿アーカイブは無効になっているらしい。home=投稿アーカイブなのだから、当然か・・・そこで下記をfunctions.phpに追加すると投稿アーカイブが使えるようになります。
/* 投稿アーカイブページの作成 */
function post_has_archive( $args, $post_type ) {
if ( 'post' == $post_type ) {
$args['rewrite'] = true;
$args['has_archive'] = 'blogs'; //任意のスラッグ名
}
return $args;
}
add_filter( 'register_post_type_args', 'post_has_archive', 10, 2 );
ここではスラッグを「blogs」にしていますので、「URL/blogs」で投稿の一覧を表示することができました。これで目出度く解決か?と思いきや・・・Breadcrumb NavXTに、「ブログ」が入らない。当然か・・・・アーカイブ一覧は「ホーム」なので、Breadcrumb NavXT管理画面の「ホームページテンプレート」箇所に無理に「ブログ」をつければ一応解決するのですが、同じサイトにカスタム投稿タイプが存在する場合、カスタム投稿タイプにも「ブログ」がついてしまい問題です。そこでBreadcrumb NavXTのフィルターフックを使うことにしました。
if (function_exists('bcn_display_list')){
//デフォルトのHOMEパンくずを除去
add_action('bcn_after_fill', 'foo_pop');
function foo_pop($trail)
{
array_pop($trail->breadcrumbs);
}
//パンくずを追加
add_action('bcn_after_fill', 'my_static_breadcrumb_adder');
function my_static_breadcrumb_adder($breadcrumb_trail)
{
if( is_post_type_archive( 'post' )||is_singular('post') ) {
//投稿タイプ post の時、2番目に/blog/のパンくず
$breadcrumb_trail->add(new bcn_breadcrumb('ブログ', null, array('post-clumn-archive'), home_url('/blog'), null, true));
}
// HOMEを追加
$breadcrumb_trail->add(new bcn_breadcrumb('Home', null, array('post-clumn-archive'), home_url('/'), null, true));
}
}
デフォルトのHOMEを消してまた追加するので、そもそも消さなくてもいいのでは?と思ったのですが、これを省くと
ブログ > Home
と、順序が逆にになってしまうんです。。。。
更に投稿アーカイブのタイトルが「投稿」になってしまう問題がありまして、こちらはあまりスマートではない方法で解決しました。(以下は条件分岐の一部です)
<?php } elseif( is_post_type_archive('topics') ) { ?>
<?php echo esc_html(get_post_type_object(get_post_type())->label); ?>
<?php } elseif( is_post_type_archive() ) { ?>
ブログ
メニューにアーカイブを追加する場合は、「投稿一覧」を選ぶとホームに飛んでしまうので、カスタムリンクで入れるしかなさそうです。
これで一応全ての問題はクリアしたかな。ううむ、意外と面倒だった。