この実装、面倒なら代行します
投稿のパーマリンク構造をこのようにしたいとします。
https://domain.com/親カテゴリ/子カテゴリ/年/月/詳細ページID/
たまにあるかもしれませんね。
カテゴリで分けつつ、さらに投稿月で分けるような構造。
パーマリンク構造自体は、管理画面の「設定 – パーマリンク」から「カスタム構造」を選んで次のように登録すれば、簡単に設定できます。
/%category%/%year%/%monthnum%/%post_id%/
ただ、パンくずがうまくいかなかった。
100ウェブでは普段からパンくずリストプラグインはBreadcrumb NavXTを使っていますが、今回のパンくずをBreadcrumb NavXTで吐き出すようにするのに、少々調べる必要がありました。
そもそも年月アーカイブは、カテゴリ関係なく投稿すべてを取得して年月に振り分ける仕様がWordPressの標準のためだからか、パーマリンク構造を管理画面から変更登録しても、Breadcrumb NavXTではそれを意識してくれませんでした。
パンくずの理想的には
ホーム > 親カテゴリ > 子カテゴリ > 2022年 > 11月
となってほしいところですが、Breadcrumb NavXTの標準機能のままでやると実際はこうなります。
ホーム > 2022年 > 11月
そうですか。。標準仕様のまんま、変わらないんですね。
なら直しましょう。
具体的にはBreadcrumb NavXTが用意してくれているbcn_after_fillにアクションフックをひっかけます。
テーマの functions.php に次の記述を加えます。
functions.php
function bcn_category_year_month_insert( $bcnObj ) { if ( is_date() ) { if ( get_post_type() == 'post' && is_archive() ) { $year = get_query_var( 'year' ); $cat_id = (int) get_query_var( 'cat' ); $the_cat = get_category( $cat_id ); $cat_url = get_category_link( $cat_id ); $year_url = $cat_url . $year . '/'; $cat_name = $the_cat->name; $cat_slug = $the_cat->slug; $parent_cat_id = ''; while ( $the_cat->parent ) { $the_cat = get_category( $the_cat->parent ); $parent_cat_id = $the_cat->term_id; } $parent_cat_slug = ( $the_cat->slug != $cat_slug ) ? $the_cat->slug : ''; $parent_cat_name = ( $the_cat->name != $cat_name ) ? $the_cat->name : ''; $parent_cat_url = ''; if ( $parent_cat_id ) { $parent_cat_url = get_category_link( $parent_cat_id ); } $end = count( $bcnObj->trail ); for ( $i = 0; $i < $end; $i ++ ) { if ( $i == $end - 1 ) { $trail[] = $bcnObj->add( new bcn_breadcrumb( $cat_name, null, array( 'archive' ), $cat_url, null, true ) ); if ( $parent_cat_slug ) { $trail[] = $bcnObj->add( new bcn_breadcrumb( $parent_cat_name, null, array( 'archive' ), $parent_cat_url, null, true ) ); } $trail[] = $bcnObj->trail[ $i ]; } else { $trail[] = $bcnObj->trail[ $i ]; $trail[ $i ]->set_url( $year_url ); } } $bcnObj->trail = $trail; } } return $bcnObj; } add_action( 'bcn_after_fill', 'bcn_category_year_month_insert' );
※ ただし、今回の記述はカテゴリが親子の2層までを想定しています。3層以上になる場合はもう少し処理を加える必要があります。ご留意ください。
コードの解説を少々しますと、
現在のページの年と、カテゴリと、その親カテゴリがあれば親カテゴリについて、それらのスラッグやらURLを取得しておいてから、「ホーム」をパンくず出力するところで、「ホーム」の前にカテゴリパンくずを挿し込む処理を加えています。
もしかしたらもっと簡単な方法があるのかもしれませんが、プラグインのコードはほとんど見ずに直そうとするとこういうコードになりました。
ひと月に1件程度しか投稿しないサイトでは必要ないですが、コツコツ月5件とかコラムを投稿する会社社長のコラムページなどは、こんなパーマリンク構造にするとメリットもありますね。
WordPressカスタマイズ事例やウェブ制作ノウハウの新着情報、お役立ち情報を
リアルタイムにメルマガ配信!
100ウェブで手がけた制作・開発案件を一部、ご紹介。
クライアントからご相談いただいた内容とその実装におけるポイント、工期、予算について確認いただけます。
【テレワーク実施中 につきお電話転送中】
コール中1秒程度無音状態になりますがそのままお待ちください。
受付時間
平日 10:00~18:00
メールでのお問い合わせでも
1営業日以内にご連絡いたします。