サポート » 使い方全般 » サブカテゴリーに属している場合、特定の画像を表示させた上、並び順を

  • 解決済 lemonneko

    (@lemonneko)


    こんにちは。初心者です。

    あるカテゴリーのループ中に、そのサブカテゴリーにも属していると、特定の画像を追加で表示させ、
    なおかつ、そのサブカテゴリーは上部に表示されるようにしたいです。

    ショッピングサイトで例を言うと
    「シャツ」という大カテゴリーをループを使って一覧で出力し、
    その中で、サブカテゴリー「売り切れ」や「NEW」に属していると
    それに適した画像が表示されるようにしたいのです。

    表示させたい出力と順番は下記の通りです。
    1.大カテゴリー「シャツ(カテゴリーIDは3)」に属しており、商品の画像や情報を表示。
     そのサブカテゴリー「売り切れ(IDは4)」に属していると、売り切れの画像を表示。
     同じくサブカテゴリー「NEW(IDは6)」にも属していると、NEWの画像を表示。

    2.大カテゴリー「シャツ(カテゴリーIDは3)」に属しており、商品の画像や情報を表示。
     そのサブカテゴリー「売り切れ(IDは4)」に属していると、売り切れの画像を表示。

    3.大カテゴリー「シャツ(カテゴリーIDは3)」に属しており、商品の画像や情報を表示。
     そのサブカテゴリー「NEW(IDは6)」に属していると、NEWの画像を表示。

    4.大カテゴリー「シャツ(カテゴリーIDは3)」に属しており、商品の画像や情報を表示。

    上記の様に表示させたいです。

    ループの中で、更にループ処理?という考えが正しいのかどうかが分からないのですが、、
    試している所うまくいきません。

    ソースは下記の通りです。

    <!–大カテゴリーのループ開始–>
    <?php query_posts(“cat=3”); ?>
    <?php if (have_posts()) : while (have_posts()) : the_post(); ?>

    <div class=”list-box”>
    “>
    <img src=”<?php echo get_post_meta($post->ID,’faceimage’,TRUE); ?>” alt=”<?php the_title(); ?>” width=”141″ height=”141″ />

    <p class=”name”><?php the_title(); ?></p>
    <p class=”size”><?php echo get_post_meta($post->ID,’textfield’,TRUE); ?></p>

    <!–売り切れの場合、画像表示–>
    <?php $my_query = new WP_Query(“cat=4”); ?>
    <?php if ($my_query->have_posts()) : ?>
    <?php while ($my_query->have_posts()) : $my_query->the_post(); ?>
    <div class=”ico-on”>
    <img src=”hogehoge.jpg” alt=”売り切れ” />
    </div>
    <?php endwhile; ?>
    <?php endif; ?>

    <!–新着アイテムの場合、画像表示–>
    <?php $my_query = new WP_Query(“cat=6”); ?>
    <?php if ($my_query->have_posts()) : ?>
    <?php while ($my_query->have_posts()) : $my_query->the_post(); ?>
    <div class=”ico-new”>
    <img src=”hogehoge2.jpg” alt=”新着アイテム” />
    </div>
    <?php endwhile; ?>
    <?php endif; ?>

    </div>
    <!–大カテゴリーのループ完全に終了–>
    <?php endwhile; ?>
    <?php endif; ?>
    <?php wp_reset_query(); ?>

    調べてみたものの、行き詰まっています。

    他にも方法を考えながら、
    ID3、4、6と全て属している出力のループのソースを書き、その次に。
    ID3、4に属しているループのソースを書き、その次に
    ID3、6に属しているループのソースを書き、最後に
    ID3のみ属しているループのソースを書く方法がいいのだろうか・・・と
    試しているもののうまくいきません。

    稚拙な質問ではございますが、
    どうぞご教授お願い致します。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • kz

    (@kz)

    細かいところはよきにはからってください:

    <?php
    global $wpdb, $post;
    $posts = (array) $wpdb->get_results("
      SELECT $wpdb->posts.*
      FROM $wpdb->posts
        INNER JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id)
        INNER JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
      WHERE $wpdb->term_taxonomy.taxonomy = 'category'
        AND $wpdb->term_taxonomy.term_id IN ( 3, 4, 6 )
      GROUP BY $wpdb->posts.ID
      ORDER BY COUNT($wpdb->posts.ID) DESC
    ");
    foreach ( $posts as $post ) {
      ?>
      <p class="name"><?php the_title(); ?></p>
      <p class="size"><?php echo get_post_meta( $post->ID, 'textfield', true); ?></p>
      <?php
      foreach( get_the_category() as $cat )
        switch( $cat->term_id ) {
          case 4:
            ?>
            <div class="ico-on">
              <img src="hogehoge.jpg" alt="売り切れ" />
            </div>
            <?php
    	break;
          case 6:
            ?>
            <div class="ico-new">
              <img src="hogehoge2.jpg" alt="新着アイテム" />
            </div>
            <?php
    	break;
        }
    }
    ?>

    lemonneko

    (@lemonneko)

    kz様、大変ありがとうございます!
    思った通りの処理ができました、本当に感謝です。

    ただ、1つ1つの記事を <div class=”list-box”> と、divで囲いたいのですが、
    分からないまま試した所、<div class=”list-box”>の中に<div class=”list-box”>・・・
    と入れ子になって出力されてしまいます。

    <?php
    global $wpdb, $post;
    $posts = (array) $wpdb->get_results("
      SELECT $wpdb->posts.*
      FROM $wpdb->posts
        INNER JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id)
        INNER JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
      WHERE $wpdb->term_taxonomy.taxonomy = 'category'
        AND $wpdb->term_taxonomy.term_id IN ( 3, 4, 6 )
      GROUP BY $wpdb->posts.ID
      ORDER BY COUNT($wpdb->posts.ID) DESC
    ");
    foreach ( $posts as $post ) {
      ?>
    
    		<div class="list-box"><!-----ここのdivです----->
    			<a href="<?php the_permalink() ?>">
    			<img src="<?php echo get_post_meta($post->ID,'faceimage',TRUE); ?>" alt="<?php the_title(); ?>" width="141" height="141" />
    			</a>
    			<p class="name"><?php the_title(); ?></p>
    			<p class="size"><?php echo get_post_meta($post->ID,'textfield',TRUE); ?></p>
    
      <?php
      foreach( get_the_category() as $cat )
        switch( $cat->term_id ) {
          case 4:
            ?>
            <div class="ico-on"><img src="hogehoge.jpg" alt="売り切れ" /></div>
            <?php
    	break;
          case 6:
            ?>
            <div class="ico-new"><img src="hogehoge2.jpg" alt="新着アイテム" /></div>
            <?php
    	break;
        }
    }
    ?>
    </div><!-----ここのdivです----->

    他にも↓↓↓↓↓↓↓↓↓↓↓↓↓
    <img src=”hogehoge2.jpg” alt=”新着アイテム” /></div></div>
    ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
    等と試してみましたがうまくいきません。

    もしよければ教えて頂けないでしょうか?

    kz

    (@kz)

    OK だったら[解決済み]にしていただくとホッとしますのでヨロシク◎

    <?php
    global $wpdb, $post;
    $posts = (array) $wpdb->get_results("
      SELECT $wpdb->posts.*
      FROM $wpdb->posts
        INNER JOIN $wpdb->term_relationships ON ($wpdb->posts.ID = $wpdb->term_relationships.object_id)
        INNER JOIN $wpdb->term_taxonomy ON ($wpdb->term_relationships.term_taxonomy_id = $wpdb->term_taxonomy.term_taxonomy_id)
      WHERE $wpdb->term_taxonomy.taxonomy = 'category'
        AND $wpdb->term_taxonomy.term_id IN ( 3, 4, 6 )
      GROUP BY $wpdb->posts.ID
      ORDER BY COUNT($wpdb->posts.ID) DESC
    ");
    foreach ( $posts as $post ) {
      ?>
      <div class="list-box">
      <p class="name"><?php the_title(); ?></p>
      <p class="size"><?php echo get_post_meta( $post->ID, 'textfield', true); ?></p>
      <?php
      foreach( get_the_category() as $cat )
        switch( $cat->term_id ) {
          case 4:
            ?>
            <div class="ico-on">
              <img src="hogehoge.jpg" alt="売り切れ" />
            </div>
            <?php
    	break;
          case 6:
            ?>
            <div class="ico-new">
              <img src="hogehoge2.jpg" alt="新着アイテム" />
            </div>
            <?php
    	break;
        }
      ?></div><?php
    }
    ?>

    lemonneko

    (@lemonneko)

    kz様
    上記のソースで完全に望んでいたものができあがりました。
    本当に感謝しております。

    もっと勉強しなくてはならないと思いました。
    助けて頂き、本当に本当にありがとうございました!

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「サブカテゴリーに属している場合、特定の画像を表示させた上、並び順を」には新たに返信することはできません。