kzさま
いつも本当にありがとうございます。今回も教えていただいた方法を参考にしたところ、意図通りの表示が実現できました。少しカスタマイズしたので、フォーラムのために方法を記しておきます。
【変更手順】
もともとカテゴリ52と53はそれ以外のカテゴリとは別のデザインレイアウトにしていたため、category-52.phpとcategory-53.phpを作成し、それ以外のカテゴリはcategory.phpを読み込ませていた。kzさんの方法をとるため、
1. category.phpをyour-category.phpにファイル名変更
2. category.phpを新規作成し、次のコードを記述。
<?php
$post = $wp_query->post;
if(in_category('52')){
include(TEMPLATEPATH . '/archives-by-category52.php');
}elseif(in_category('53')){
include(TEMPLATEPATH . '/archives-by-category53.php');
}else{
include(TEMPLATEPATH . '/your-category.php');
}
?>
カテゴリ52と53のファイルを分けない場合は、kzさんの教えてくださったコードでok。
ただし、3行目の
if(in_category('52') || in_category('53'){
は、
if(in_category('52') || in_category('53')){
にする。
3. category-52.phpをarchives-by-category52.phpに、category-53.phpをarchives-by-category53.phpに名称変更する
それぞれファイルの一番上に、kzさんの教えてくださったコードの「…get_header(); ?>」までを記述。
<?php
function my_year_link($url, $year){
global $wp_rewrite;
$yearlink = $wp_rewrite->get_year_permastruct();
if(empty($yearlink))
return $url . '&cat=' . get_query_var('cat');
return $url;
}
function my_getarchives_where($where, $r){
return $where .
" AND t.taxonomy = 'category' AND terms.term_id = ".get_query_var('cat');
}
function my_getarchives_join($join, $r){
global $wpdb;
return
" LEFT JOIN $wpdb->term_relationships as r ON $wpdb->posts.ID = r.object_ID
LEFT JOIN $wpdb->term_taxonomy as t ON r.term_taxonomy_id = t.term_taxonomy_id
LEFT JOIN $wpdb->terms as terms ON t.term_id = terms.term_id";
}
add_filter('year_link', 'my_year_link', 10, 2);
add_filter('getarchives_where', 'my_getarchives_where', 10, 2);
add_filter('getarchives_join', 'my_getarchives_join', 10, 2);
get_header(); ?>
4. archives-by-category52.phpとarchives-by-category53.phpそれぞれに、年別アーカイブを置きたい所に次のコードを入れる
<div id="yearlyarchive">
<ul>
<?php wp_get_archives('type=yearly&after=年'); ?>
</ul>
</div>
5. archives-by-category52.phpとarchives-by-category53.phpそれぞれの最後に、kzさんの教えてくださったコードの途中から(下記)を入れる
<?php get_footer();
remove_filter('year_link', 'my_year_link', 10, 2);
remove_filter('getarchives_where', 'my_getarchives_where', 10, 2);
remove_filter('getarchives_join', 'my_getarchives_join', 10, 2);
?>
説明が長くなりましたが、以上の方法で実現できました。
方法はこれで正しいのかはわかりませんが、私の環境では作動しています。
kzさん、誠にありがとうございました。