トランスビット
トランスビットの開発ノート Webサイト制作に役立つTipsやトラブルシューティングなどの備忘録

wp_get_archives()で出力されるURLを一部変更する

カスタム投稿タイプにカスタムタクソノミーをつけ、パーマリンク設定やfunction.phpをカスタマイズし、何とか思惑通りのパーマリンクに変更……
↓↓↓
[ターム] https://ドメイン/カスタム投稿タイプ名/ターム名/
[記事] https://ドメイン/カスタム投稿タイプ名/ターム名/記事ID/
[月別アーカイブ] https://ドメイン/カスタム投稿タイプ名/date/年/月/
↑↑↑
こんな感じにした時の話です。

WordPressのバージョンも、各種プラグインのバージョンも最新で、テーマは一から作ってすっきり。そんな状態で、テンプレートにwp_get_archives()使って月別アーカイブ一覧を出力したら、なんと https://ドメイン/カスタム投稿タイプ名/年/月/ といったリンクが生成されました……orz

プラグインのコンフリクトを疑ってみたり、パーマリンクの再設定をしてみたり、思いつくことはいろいろやってみたんですが、なんとも上手くいかず。
思惑通りのパーマリンクは得られていることだし、wp_get_archives()のほうをいじってお茶を濁すことにしました。

wp_get_archives()では、引数に echo => false としてやると、値を表示じゃなくって値を取得することができます。なのでその後、str_replaceでdateを入れてやればオッケーというわけです。

例えば、infoというカスタム投稿タイプだったとしたら……

$args= array(
  'type' => 'monthly',
  'echo' => false,
  'post_type' => 'info'
);
$monthly_list = wp_get_archives($args);
$monthly_list = str_replace('/info/', '/info/date/', $monthly_list);

echo $monthly_list;

これで月別アーカイブ一覧のリンクが正常に!
ただし、今後Wordpressやプラグインのバージョンアップでwp_get_archives()が普通に使えるようになるかもしれないので、置き換え前に、if(strpos($monthly_list,’/date/’) !== false){……とかしとくといいかもですね。

Filed under: