WordPress WordPressループまとめ
WordPressループ
メインループとサブループがある。
WordPressでは、メインループが必ず1回回ります。
自分で表示したい、カテゴリ一覧とかnewsとかは、サブループで回します。
コードで理解するほうが早いので見てみましょう。
//これがWordPressループ if (have_posts( )):でnilチェック <?php if (have_posts( )): ?> //postの数だけ繰り返す <?php while (have_posts( )): the_post() ?> <div class="col-md-4"> //post IDは idの設定くらいしか使わない。 <article id="post-<?php the_ID(); ?>" <?php post_class('news'); ?>> <div class="news_pic"> //記事へのリンクは the_permalink( ) <a href="<?php the_permalink( ); ?>"> //記事の画像(サムネイル)を表示 <?php if (has_post_thumbnail()): ?> <?php the_post_thumbnail( 'medium'); ?> <?php else: ?> //画像がなかったとき noimageの画像を表示する <img src="<?php echo get_template_directory_uri() ; ?>/assets/img/common/noimage_600x400.png" alt="" > <?php endif; ?> </a> </div> <div class="news_meta"> //記事のカテゴリー名を表示 カテゴリー別に表示したい場合 new WP_Query下記を参照のこと <?php the_category(); ?> <time class="news_time" datetime="<?php the_time('Y-m-d'); ?>"><?php the_time('Y年m月d日'); ?></time> </div> //記事へのリンクは the_permalink( ) <h2 class="news_title"><a href="<?php the_permalink( ); ?>"><?php the_title(); ?></a></h2> <div class="news_desc"> //抜粋を表示 下記参照 <p><?php the_excerpt(); ?></p> <p><a href="<?php the_permalink(); ?>">[続きを読む]</a></p> </div> </article> </div> <?php endwhile; ?> <?php endif; ?>
抜粋とは? excerpt()
管理画面から入力する、記事のまとめのこと
記事が長い場合、概略をまとめておく。
サブループ WP_Queryを使う
ポイント
1)WP_Queryの戻値を変数へ詰め込む
2) WP_Queryを実行
3) loopの最後に、wp_reset_postdataを実行する
メインループと間違えるためエラーがでる。
SQLを発行していると考えると良い
<div class="row courses_row"> <?php //サブループを回す $course_query = new WP_Query( array( //投稿タイプ 'post_type' => 'post', //カテゴリーはcourse 'category_name' => 'course', //1ページあたり6記事 'posts_per_page' => 6, ) ); ?> //メインループだと have_posts() //サブクエリを使うので $course_query->have_posts()となる <?php if ( $course_query->have_posts() ) : ?> //サブクエリのpostを回す <?php while ( $course_query->have_posts() ) : $course_query->the_post(); ?> <div class="col-lg-4 course_col"> //loopの中は、the_post() で大丈夫 //別のテンプレートファイルに切り出しています <?php get_template_part( 'course-loop'); ?> </div> //絶対に必要! <?php wp_reset_postdata(); ?> <?php endwhile; ?> <?php endif; ?> </div>