berghiloさん、こんにちは。
カテゴリーのテンプレート上でquery_postsを行い、エントリーの再取得を行う方法と、エントリーの取得時にDBへのクエリーを書き替えてしまう方法があります。
後者は少々難度が高い(&私がめんどくさい)ので、簡単な前者の方法を紹介しておきます。下記のコードをカテゴリーで利用されるテンプレートのif( have_posts() )と記述されている部分より前に記述していただければ、子カテゴリーのエントリーを含めない表示となるはずです。
if ( is_category() ) {
$cat = get_query_var( 'cat' );
$paged = get_query_var( 'paged' );
query_posts( array( 'category__and' => array( $cat ), 'paged' => $paged ) );
}
jim912さん
ご教授いただきましたコードで、子カテゴリーが出なくなりました。
大変嬉しいです。
ありがとうございました。
今後とも宜しくお願いします。
上記ですが、解決したのですが、指定したカテゴリーを降順、昇順したいため、
<?php if (is_category(array('1','2'))) { ?>
<?php query_posts($query_string . '&order=DESC&orderby=date'); ?>
<?php } else { ?>
<?php query_posts($query_string . '&order=ASC&orderby=ID'); ?>
<?php } ?>
のように書いていたのですが、ご指示いただきましたコードを追記したところ、
<?php if (is_category(array('1','2'))) { ?>
<?php query_posts($query_string . '&order=DESC&orderby=date'); ?>
<?php } else { ?>
<?php query_posts($query_string . '&order=ASC&orderby=ID'); ?>
<?php } ?>
<?php if ( is_category() ) {
$cat = get_query_var( 'cat' );
$paged = get_query_var( 'paged' );
query_posts( array( 'category__and' => array( $cat ), 'paged' => $paged ) );
}
?>
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
これまで昇順(ASC)していたカテゴリーもすべてWordPressのデフォルト値である降順(DESC)になってしまいました。
昇順(ASC)と降順(DESC)を指定しているコードが無効になってしまったのでしょうか。
これはどのようにしましたら、親記事に子記事を出さないままにして、なおかつ、指定したカテゴリーを降順、昇順に出来るでしょうか。
大変お手数でございますが、ご教授よろしくお願いします。
berghiloさん、こんにちは。
query_postsは、1回毎に指定内容をクリアしますので、最初のquery_postsは無かったことにされ、2回目の指定での順序になってしまいます。この場合は、指定がなされていないため、デフォルトの指定になってしまいますね。
降順、昇順の指定を行うには、2回目のquery_postsにorderとorderbyのパラメータを追加してあげれば良いです。また、1回目は、無効化されますから、削除してしまって構いません。動作テストしてませんが、下記コードで試してみてください。
<?php if ( is_category() ) {
$cat = get_query_var( 'cat' );
$paged = get_query_var( 'paged' );
if ( in_array( $cat, array( 1, 2 ) ) {
$order = 'DESC';
$orderby = 'date';
} else {
$order = 'ASC';
$orderby = 'ID';
}
query_posts( array( 'category__and' => array( $cat ), 'paged' => $paged, 'order' => $order, 'orderby' => $orderby ) );
}
if (have_posts()) : while (have_posts()) : the_post(); ?>
jim912さん
ご連絡ありがとうございます!
意図した通りになりました。
でもその後に続く、特定カテのみコメント欄を出す箇所
<?php if (is_category(array('1','2'))): ?>
|<?php comments_popup_link(__('Comments (0)'), __('Comments (1)'), __('Comments (%)')); ?>
<?php else: ?>
<?endif; ?>
が非表示になってしまいました。
jim912さんが言われた「query_postsは、1回毎に指定内容をクリアします」に関連しそうなのですが、よくわからないので、今回は断念致します。
いろいろとお手間をお掛け致しまして、大変ありがとうございました。
berghiloさん、こんにちは。
特定カテのみコメント欄を出す箇所の
<?php if (is_category(array('1','2'))): ?>
を、query_postsで行っているのと同様に
<?php if ( in_array( $cat, array( 1, 2 ) ) : ?>
にしてみてもらえれば、直るのではと思います。
jim912さん
ご連絡ありがとうございます!
あきらめていたのですが、なんと考えていた通りの掲載になりました。
大変嬉しいです。
この度は、大変ありがとうございました。
今後ともよろしくお願いします。