カスタム分類のアーカイブのリンクが表示できない

昨日カスタム分類のアーカイブページを作成しようとしていましたが、うまく機能しなくて四苦八苦していました。

<?php dynamic_sidebar();?>

をsidebar.phpに書き込んでサイドバーを出力しても、リンクされるのは「投稿」に属する記事(このサイトでは使用しない)が表示されるだけで、PhotoGalleryやBlogのアーカイブになってくれません。

サイトでいろいろ調べてみましたが、function.phpに2つ関数を追加して、wp_get_archives()でカスタムタイプでの分類ができるようにしてもうまく動作せず、エラーが出てしまいます。

更に詳しく調べてみると、ネットに落ちている2つのコードはWordPress 3系で使うもので、WordPress4系やPHPの動作する環境によってはエラーが出るとのこと。コードを修正してエラーが出ないようにしました。

それでもアーカイブページにはリンクできません。

さらにwp_get_archives()が出力するアーカイブページのリンクを調べてみると、

?m=201505の次に、?post_type=photoと記載されています。?じゃなくて&じゃないのか?

function.phpを調べ、?post_type=と吐き出すところを&post_type=と吐き出すようにコードを修正すると、

カテゴリー分類ごとの月別アーカイブができました!

そのときのコードは

<?php
global $my_archives_post_type;
add_filter( 'getarchives_where', 'my_getarchives_where', 10, 2 );
function my_getarchives_where( $where, $r ) {
global $my_archives_post_type;
if ( isset($r['post_type']) ) {
$my_archives_post_type = $r['post_type'];
$where = str_replace( ''post'', ''' . $r['post_type'] . ''', $where );
} else {
$my_archives_post_type = '';
}
return $where;
}

add_filter( 'get_archives_link', 'my_get_archives_link' );
function my_get_archives_link($link_html) {
global $my_archives_post_type;
if ($my_archives_post_type != '') {
$add_link = '&post_type=' . $my_archives_post_type;
$link_html = preg_replace("/href='(.+)'/", "href='$1" . $add_link. "'", $link_html);
}
return $link_html;
}
?>

この2つをfunction.phpに書き込んで、

sidebar.phpのアーカイブページへのリンクを書き出す部分へ

<?php wp_get_archives('type=monthly&post_type=category'); ?>

categoryのところは、サイトが該当するカスタム分類名を入れてください。

これでこのサイトの完成が近づきます。あとは記事をたくさん書き込まなくては…お問い合わせページも作らなくては。


コメント

送信フォーム

入力エリアすべてが必須項目です。

内容をご確認の上、送信してください。

※メールアドレスは公開されません