サポート » 使い方全般 » サブカテゴリ以下の記事タイトルを表示しない

  • 解決済 miyu03

    (@miyu03)


    サイドバーに現在カテゴリの記事のタイトル一覧を表示したいのですが、
    サブカテゴリ以下の記事タイトルは非表示にしたいです。

    現在、記事のタイトル一覧表示は、

    <?php
    $catname= single_cat_title("",false);
    $cat=get_cat_ID($catname);
    
    if (is_home() == False) {
    
    	if (have_posts()) :  query_posts("posts_per_page=-1&cat=$cat"); ?>
    
        <ul>
    	<?php while (have_posts()) : the_post(); ?>
            <li><a href="<?php the_permalink() ?>" title="<?php the_title(); ?>">
    	<?php the_title(); ?></a></li>
    	<?php endwhile; endif; ?>
    	<?php wp_reset_query(); ?>
    	</ul>
    <?php } ?>

    上記のようにしていますが、
    サブカテゴリの記事タイトルも一緒に表示されてしまいます。

    どの部分をいじればうまくいきますか?
    よろしくお願いします。

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • まず、サイドバーにループを作るのにquery_postsはどうかなと思います。
    Codexにも

    重要事項

    query_posts 関数はメインの WordPress ループだけを変更するためのものです。新たなループを作るためのものではありません。メインループの他にループが必要な場合は、別の WP_Query オブジェクトを作ってください。メインループの他で query_posts を使用すると、メインループが不正な状態になり期待する結果が得られません。

    とありますので。

    で、get postsでマルチループを生成する方法をお勧めしますが、3.0かつTwenty Tenの子テーマとかであればループの作り方が変わるので、一概に言えません…
    Twenty Tenの子テーマでないのであればget_postscategoryを指定してデータを取得すれば可能かと思います。

    <?php $cat = get_the_category(); $cat = $cat[0]; {
    $myposts = get_posts('category=' . $cat->cat_ID);
    } ?>

    未検証ですが、参考になりますか?

    トピック投稿者 miyu03

    (@miyu03)

    > shokun0803 様

    返信ありがとうございます。

    さっそく下記のようにしてみました。

    <ul>
    <?php $cat = get_the_category(); $cat = $cat[0];
    $myposts = get_posts('category='. $cat->cat_ID);
    foreach($myposts as $post) :
    ?>
    <li><a href="<?php the_permalink() ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></li>
    <?php endforeach; ?>
    </ul>

    ですが、サブカテゴリがある場合、親カテゴリの記事タイトルは非表示になってしまい、
    サブカテゴリの記事タイトルのみが表示されてしまいます・・。

    初心者で申し訳ないのですが、ご指導お願いいたします。

    <ul>
    <?php $cat = get_the_category(); $cat = $cat[0];
    $myposts = get_posts('category='. $cat->category_parent);
    foreach($myposts as $post) :
    ?>
    <li><a href="<?php the_permalink() ?>" title="<?php the_title(); ?>"><?php the_title(); ?></a></li>
    <?php endforeach; ?>
    </ul>

    なんてのでどうでしょうか?親カテゴリーのIDのみ取得しています。同じく未検証ですみません、すみません。

    トピック投稿者 miyu03

    (@miyu03)

    > shokun0803 様

    今度は全ての記事タイトルが表示されてしまいました。。。

    $cat->cat_IDは現在カテゴリのIDを取得するということでしょうか?

    表示例を書くと、

    現在カテゴリ(親カテゴリ)
    ・記事タイトル
    ・記事タイトル
    ・記事タイトル(子カテゴリのもの)←これを非表示にしたい

    のようなかんじです。

    なかなか難しいですね・・。

    なんていうか・・・

    現在表示中のカテゴリに属する記事を表示させたいということですか?
    また、その記事は1つのカテゴリのみという法則になっているのか、それとも複数の場合とかもあるのでしょうか?

    トピック投稿者 miyu03

    (@miyu03)

    > kvex 様

    現在表示中のカテゴリに属する記事を表示させたいということですか?

    その通りです。
    そして、その現在表示中のカテゴリの子カテゴリに属しているものは表示しない、ということです。

    記事のカテゴリは1つのみです。

    子孫カテゴリを取ってこないようにする方法:
    テーマの functions.php に以下を追加します。

    <?php
    function my_category_children( $return ) {
      return array();
    }
    add_filter( 'pre_option_category_children', 'my_category_children' );
    ?>

    うわーん子孫が欲しい時もあるんだよう、って場合は欲しい時に
    remove_filter( ‘pre_option_category_children’, ‘my_category_children’ );
    イラン時に
    add_filter( ‘pre_option_category_children’, ‘my_category_children’ );
    を query_posts() だか get_posts() の前に書けば OK。

    トピック投稿者 miyu03

    (@miyu03)

    > kz 様

    functions.phpに追加してみたところ、
    うまくいきました!!ありがとうございます!

    ずっと悩んでいたのですっきりです!

8件の返信を表示中 - 1 - 8件目 (全8件中)
  • トピック「サブカテゴリ以下の記事タイトルを表示しない」には新たに返信することはできません。