質問: 「Wordpressでサイドバーにカテゴリー別のアーカイブリンクを記述したい」 該当ページ1 該当ページ2 サイドバーのアーカイブのリンク先を年月の後にカテゴリーIDを記述できれば解決できるかと思うのですが、 記述箇所がわからずでして...。 また、他に良い方法等あればご教示いただきますと幸いです。 よろしくお願い致します。 --- 追記(2019/1/28) テーマはTwenty Sixteen(https://ja.wordpress.org/themes/twentysixteen/)をコピーして、カスタマイズしました。 --- 追記(2019/1/31) 上記ページでのアーカイブのリンク先は、 http://takamori.work/miyama/〇〇〇〇/〇〇?category_name=お知らせ とし、 上記ページでのアーカイブのリンク先は、 と、そのページのカテゴリー名が一致するようにしたいです。
回答: > > サイドバーのアーカイブのリンク先を年月の後にカテゴリーIDを記述できれば解決できるかと思うのですが、 > > > これだけでいいのであれば、ウィジェット「アーカイブ」の内部で使われている`get_archives_link`フックを利用できます。 ``` add_filter( 'get_archives_link', 'teratail168423_HisaoAndo_3', 10, 6 ); function teratail168423_HisaoAndo_3( $link_html, $url, $text, $format, $before, $after ) { //$category_name = "item"; // 20190201 修正 $category_name = get_query_var('category_name'); // 20190201 修正 $link_html = preg_replace('/href="\'["\']/','href="$1?category_name=' . $category_name .'"', $link_html); return $link_html; } ``` ただし、該当するカテゴリーの月別アーカイブが存在しない場合に404エラーになってしまうので、もう少し丁寧にやるなら、`getarchives_join`と`getarchives_where`フックを使用する必要があります。 2019/02/01 追記 上記コードを修正。 2019/02/01 追記2 `getarchives_join`と`getarchives_where`フックの処理を追加し、該当のカテゴリーに所属する投稿がある場合のみ月別アーカイブのリンクが表示されるようにしました。 また、カテゴリースラッグではなく、カテゴリーIDでの処理に変更にしました。 ``` add_filter( 'getarchives_join', 'teratail168423_HisaoAndo_1', 10, 2 ); add_filter( 'getarchives_where', 'teratail168423_HisaoAndo_2', 10, 2 ); add_filter( 'get_archives_link', 'teratail168423_HisaoAndo_3', 10, 6 ); function teratail168423_HisaoAndo_1( $join, $r ) { global $wpdb; $join .= <<< EOF LEFT JOIN $wpdb->term_relationships AS tr ON ( $wpdb->posts.ID = tr.object_id ) EOF; return $join; } function teratail168423_HisaoAndo_2( $where, $r ) { $cat = get_query_var('cat'); $where .= " AND tr.term_taxonomy_id =" . $cat; return $where; } function teratail168423_HisaoAndo_3( $link_html, $url, $text, $format, $before, $after ) { $cat = get_query_var('cat'); $link_html = preg_replace('/href="\'["\']/','href="$1?cat=' . $cat .'"', $link_html); return $link_html; } ```