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()

管理画面から入力する、記事のまとめのこと

記事が長い場合、概略をまとめておく。 f:id:happy_teeth_ago:20200721142026j:plain:w300

サブループ 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>