WEBTODESIGN

年別アーカイブのパーマリンクを変更する【WordPress】

年別アーカイブのリンクって、こうなってますよね…

https://example.com/2023

これを、ブログの階層に合わせたい!

https:///example.com/blog/2023

functions.php

以下のコードをfunctions.phpに追加することで実現できました。

function custom_rewrite_rules_array($rules){
    $newrules = [];
    $newrules['^blog/([0-9]{4})/?$'] = 'index.php?year=$matches[1]';
    return $newrules + $rules;
}
add_filter('rewrite_rules_array', 'custom_rewrite_rules_array');

function custom_year_link($link){
    $wp_home_url = home_url();
    $link = str_replace( $wp_home_url, $wp_home_url.'/blog', $link);
    return $link;
}
add_filter('year_link', 'custom_year_link');

blogの部分はブログの階層に。

rewrite_rules_array

rewrite_rules_arrayの部分で、年別アーカイブのリンクのリライトルールを追加しています。

year_link

year_linkの部分で、以下のテンプレートコードで得られる年別アーカイブへのリンクを変更しています。

<?php wp_get_archives( 'post_type=post&type=yearly' ); ?>

注意点

注意点としては、このコードでは

https://example.com/blog/[year]

で年別アーカイブにアクセスできるようになりますが、

https://example.com/[year]

も存在したままです。

どちらのリンクでも年別アーカイブにアクセスできます。
この辺を整理するにはさらに追加のコードが必要となるので注意です。
(サイトマップとかはどうなってるんだろうか…後々この辺ちゃんとしたい…)