wp_get_archives()で出力されるURLにdataが含まれていなかったので変更する

カスタム投稿タイプの月別アーカイブを出力するにあたり、wp_get_archives()を使用しました。
そしたら、なぜかURLにdateが含まれておらずリンク先が404になります。

  • 出力されてほしいURL
    https://ドメイン/カスタム投稿タイプ名/date/年/月/
  • 実際出力されたURL
    https://ドメイン/カスタム投稿タイプ名/年/月/

幸い、出力されてほしいURLを直接叩くと該当ページは存在しました。
しかし、どうしてもwp_get_archivesで出力するURLにdateが入りません。

プラグインやパーマリンクの再設定をしてみましたがうまくいかず、もうめんどうくさいのでwp_get_archivesで出力されるURLを一部変更することで無理やり解決としました。

URLにdataが含まれていなかった書き方

※カスタム投稿タイプ名を「custom」としています。

<?php wp_get_archives('type=monthly&post_type=custom&format=option&show_post_count=1'); ?>

URLにdataを追加した書き方

※カスタム投稿タイプ名を「custom」としています。

<??php $args= array(
  'type' => 'monthly',
  'echo' => false,
  'post_type' => 'custom',
  'format' => 'option',
  'show_post_count' => '1'
);
$monthly_archives = wp_get_archives($args);
if(strpos($monthly_archives,'/date') === false) {
	$monthly_archives = str_replace('/custom/', '/custom/date/', $monthly_archives);
}
echo $monthly_archives; ?>

簡単な解説

引数にecho => falseをつけることで値の「出力」から「取得」とすることができます。
取得した値にstr_replaceを使って/dateを追加して改めて出力します。
これで月別アーカイブ一覧のリンクが正常になりました。

ただし、なぜwp_get_archivesで出力するURLにdateが入らないのか全くわからないため、WordPressや使用しているプラグイン更新などのタイミングで出力URLが正常に戻る可能性があります。
「そこで変更前のURL内に/dateが含まれていない場合」というifを追加しました。
これで今後wp_get_archivesの出力URLにdateが入ってきたらdateが2個入ってしまう事態を防げます。

書いた人:やまライダー(嫁)

Web屋さんで8時間フルタイム勤務をしている、いわゆるワーキングマザー。
夫婦共働きで、ムスメ氏を育てています。
主に資産運用にかかわるお金の話、ムスメ氏を育てていく上での子育ての話、そしてたまにお仕事関連の記事を書いていく予定。
プロフィールを見る