WPサイトの特定カテゴリ内の特定タグの記事を表示 + 一覧表示

静岡県のホームページ制作・WEB制作

ちょっとWPでのサイト制作で悩んでしまったため、それの解決方法を自分へのメモ書きと言うことで残しておきたいと思います。

1.やりたかったこと

カテゴリーページに、そのカテゴリーのおススメ商品を3つほど一番上に表示させようと考えました。

その3つは、誰でもいつでも変更できるようにします。

そして、3つのおススメ商品の下に、そのカテゴリー内の商品一覧を陳列します。

ということが今回私がしたかったことです。

問題点となるのは、「それぞれのカテゴリーでそれぞれのおススメ商品をピックアップすること」「3つの商品を自由にピックアップすること」、さらに「カテゴリー内の商品のレイアウトを3つのおススメ商品と同じレイアウトを使用する」ということでした。

2.「PHP Code」を使用した

色々方法はあるかと思うのですが、今回は「PHP Code」というプラグインを使用しました。「PHP Code」はショートコードを作成することができます。まず「PHP Code」で以下のようなコードを記述しました。

  1. <dl>
  2. <?php $temp = $wp_query;
  3. $wp_query = null;
  4. $wp_query = new WP_Query();
  5. $wp_query->query(‘post_type=post’ . ‘&posts_per_page=表示させる記事の数’ . ‘&cat=カテゴリー番号’ . ‘&tag=タグを入力’ . ‘&paged=’ . $paged); ?>
  6. <?php while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?>
  7. <!– ループさせたい内容 –>
  8. <div class=”waku”>
  9. <dt><?php the_time(‘Y.m.d’); ?></dt>
  10. <span><?php the_post_thumbnail( ‘medium’ ); ?></span>
  11. <dd><a href=”<?php the_permalink(); ?>”><?php the_title(); ?></a></dd>
  12. </div>
  13. <!– ループさせたい内容 end –>
  14. <?php endwhile; ?>
  15. <?php $wp_query = null; $wp_query = $temp; ?>
  16. </dl>

そして使用したCSSは以下のものです。

  1. .waku{
  2. -webkit-box-sizing: border-box;
  3. box-sizing: border-box;
  4. margin-bottom: 20px;
  5. padding: 5px 5px 5px 5px;
  6. border: 1px solid #ccc;
  7. list-style: none; display: inline-block;
  8. width: 31%;
  9. text-align: left;
  10.  }

 

これで商品が3つ、横並びで並ぶと思います。

「posts_per_page」という所に表示させたい記事の数を入力します。
「cat」に該当するのカテゴリーの番号を入力します。
「tag」が重要で、ここに設定したタグを入力した商品が、ピックアップ商品となります。そのため、記事ページでタグを入力するところがありますが、ここに指定したタグを入力することでピックアップ商品として表示されるようになります。

次に、作成したショートコードをカテゴリーのテンプレートである「archive.php」の中に入れます。

その際「条件分岐」を使用して、任意のカテゴリーに任意の表示をさせるようにします。

  1. <!–▼条件分岐–>
  2.  <?php $url = $_SERVER[‘REQUEST_URI’]; ?>
  3. <?php if(strstr($url,’カテゴリー1のスラッグ’)): ?>
  4. <?php echo do_shortcode(‘[php snippet=1]’); ?>
  5. <?php elseif(strstr($url,’カテゴリー2のスラッグ’)): ?>
  6. <?php echo do_shortcode(‘[php snippet=2]’); ?>
  7. <?php elseif(strstr($url,’カテゴリー3のスラッグ’)): ?>
  8. <?php echo do_shortcode(‘[php snippet=3]’); ?>
  9. <?php else: ?>
  10. カテゴリーに条件なし
  11. <?php endif; ?>
  12. <!–▲条件分岐–>

 

3.スラッグに反応させてショートコードの中身を条件分岐させる

分かりやすく説明します。

  1. ?php if(strstr($url,’カテゴリー1のスラッグ’)): ?>

 

これを記述することで、「カテゴリー1に表示させるよ」という命令となります。では何を表示させるのかというと、その下に書いてある

  1. <?php echo do_shortcode(‘[php snippet=1]’); ?>

 

このショートコードを表示させるという命令になります。

ですから今回の場合は、

カテゴリー1に「PHP cpde」で作成した[php snippet=1]というショートコードの中身を表示
カテゴリー2に「PHP cpde」で作成した[php snippet=2]というショートコードの中身を表示
カテゴリー3に「PHP cpde」で作成した[php snippet=3]というショートコードの中身を表示

ということになります。

恐らくサイトを作っていて、カテゴリーは増えてくると思います。そんな時に、おススメ商品がなく、特に何も表示させない場合には、

  1. <?php else: ?> ここを空白にする(カテゴリーに条件なしと書いてある所) <?php endif; ?>


 

空白にすることで、カテゴリー1,2,3以外の時は、何も表示されなくなります。

次に、例えばカテゴリー1でおススメ商品3つを表示させた後に、そのカテゴリーの商品を一覧にして下に表示させたいと考えた場合の話です。

  1. <h2>このカテゴリー内の商品一覧</h2>
  2. <dl>
  3. <?php
  4. $temp = $wp_query;
  5. $wp_query = null;
  6. $wp_query = new WP_Query();
  7. $wp_query->query('post_type=post' . '&posts_per_page=表示させたい記事の数' . '&cat=指定するカテゴリー番号' . '&tag=' . '&paged=' . $paged); ?> <?php while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?> <!-- ループさせたい内容 -->
  8. <div class="waku">
  9. <dt class="date"><?php the_time('Y.m.d'); ?></dt>
  10. <span><?php the_post_thumbnail( 'medium' ); ?></span>
  11. <dd>
  12. <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
  13. </dd>
  14. </div>
  15. <!-- ループさせたい内容 end -->
  16. <?php endwhile; ?>
  17. <?php $wp_query = null; $wp_query = $temp; ?>
  18. </dl>


CSSは同じものを使用しているため、デザインも同じ感じになります。

「posts_per_page」という所に表示させたい記事の数を入力します。
「cat」に該当するのカテゴリーの番号を入力します。
「tag」先ほどはお勧め商品のためのタグを入力しましたが、今回は何も記述していません。これにより全ての商品が表示対象となります。

簡単に紹介させてもらいましたが、以上のような方法で、今回の私の悩みは解決できました。

恐らくプログラマーからすると「え?そんなの簡単じゃん?じゃんじゃん?」なんて言われてしまいそうですが、プログラム素人にしては結構頑張りました。

タイトルとURLをコピーしました