サポート » 使い方全般 » 親カテゴリーに子カテゴリーのエントリーを表示させたくない

  • 解決済 berghilo

    (@berghilo)


    お世話になります。
    投稿ページの親カテゴリーページには、子カテゴリーのエントリーも表示されてしまいます。
    親カテゴリーA
      子カテゴリーB
      子カテゴリーC
      子カテゴリーD

    とあると、Aをクリックすると、AからDまでのエントリーがすべて表示されますが、
    これをカテゴリーAクリックでは、カテゴリーAしかでないようにしたいのですが、
    ご教授よろしくお願いします。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • モデレーター jim912

    (@jim912)

    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 ) );
    }

    トピック投稿者 berghilo

    (@berghilo)

    jim912さん
    ご教授いただきましたコードで、子カテゴリーが出なくなりました。
    大変嬉しいです。
    ありがとうございました。
    今後とも宜しくお願いします。

    トピック投稿者 berghilo

    (@berghilo)

    上記ですが、解決したのですが、指定したカテゴリーを降順、昇順したいため、

    <?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)を指定しているコードが無効になってしまったのでしょうか。
    これはどのようにしましたら、親記事に子記事を出さないままにして、なおかつ、指定したカテゴリーを降順、昇順に出来るでしょうか。

    大変お手数でございますが、ご教授よろしくお願いします。

    モデレーター jim912

    (@jim912)

    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(); ?>
    トピック投稿者 berghilo

    (@berghilo)

    jim912さん
    ご連絡ありがとうございます!
    意図した通りになりました。

    でもその後に続く、特定カテのみコメント欄を出す箇所

    <?php if (is_category(array('1','2'))): ?>
    |<?php comments_popup_link(__('Comments (0)'), __('Comments (1)'), __('Comments (%)')); ?>
    <?php else: ?>
    <?endif; ?>

    が非表示になってしまいました。
    jim912さんが言われた「query_postsは、1回毎に指定内容をクリアします」に関連しそうなのですが、よくわからないので、今回は断念致します。

    いろいろとお手間をお掛け致しまして、大変ありがとうございました。

    モデレーター jim912

    (@jim912)

    berghiloさん、こんにちは。

    特定カテのみコメント欄を出す箇所の

    <?php if (is_category(array('1','2'))): ?>

    を、query_postsで行っているのと同様に

    <?php if ( in_array( $cat, array( 1, 2 ) ) : ?>

    にしてみてもらえれば、直るのではと思います。

    トピック投稿者 berghilo

    (@berghilo)

    jim912さん
    ご連絡ありがとうございます!

    あきらめていたのですが、なんと考えていた通りの掲載になりました。
    大変嬉しいです。
    この度は、大変ありがとうございました。
    今後ともよろしくお願いします。

7件の返信を表示中 - 1 - 7件目 (全7件中)
  • トピック「親カテゴリーに子カテゴリーのエントリーを表示させたくない」には新たに返信することはできません。