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個入ってしまう事態を防げます。
MovableType/WordPressを使ったホームページ制作、機能追加や設置代行などの改修、システム開発、サイトの保守を手掛けております。
アナタが実現させたい機能、やりたい事をお聞かせいただけませんか? そのイメージを一緒に実現しましょう!
お問い合わせは以下のページから!!