Q&A
実現したいこと
WordPressの年別アーカイブを階層化したいです。
例えば、2023年のアーカイブはデフォルトでは以下のようなURLだと思います。
https://example.com/2023/
しかし、サイト内でブログの階層を
https://example.com/blog/
としているため、年別アーカイブを以下のような階層にしたいです。
https://example.com/blog/2023/
前提
- WordPress 6.1.1
- functions.phpの編集が可能
- ここでいう年別アーカイブとは
<?php wp_get_archives( 'post_type=post&type=yearly' ); ?>
で得られるページのことです。 - ブログの記事一覧、カテゴリー一覧などのURLは、プラグインでリライトに成功しています。
現状のリライトに使用しているプラグインは以下です。
- Permalink Manager Lite(投稿ページや個別ページのパーマリンクリライト)
- Custom Post Type Permalinks(カスタム投稿タイプのパーマリンクリライト)
試したこと
-
まずはパーマリンクのプラグインでリライトできないかトライしましたが、年別アーカイブに関する設定項目がありませんでした。
-
次に英語や日本語で検索しましたが、カスタム投稿タイプの年別アーカイブの話ばかりで、標準で用意されている年別アーカイブのリライトについての記事が見つけられませんでした。(いくつか質問スレッドがありましたが解決策の回答があるものが見つけられませんでした。)
-
以下のようなコードにも挑戦してみたのですが、機能しませんでした。(functions.php)
function add_my_test_rewrite_rule() { $query = new WP_Query([ 'post_type' => 'post', 'post_per_page' => -1 ]); if($query->have_posts()){ $years = []; while($query->have_posts()){ $query->the_post(); if(get_the_date('Y')){ array_push($years, get_the_date('Y')); } } } wp_reset_postdata(); $years = array_unique( $years ); $years = array_values( $years ); foreach($years as $year){ add_rewrite_rule( 'blog/'. $year, 'index.php?m=' .$year , 'top' ); } }
何か解決の糸口など、ご教授いただけましたら幸いです。
自分の中でできる限りの試行錯誤はした上で質問させていただきました。
よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。