2021/04/28
Wordpress /
WordPress メインループとサブループ

ループとは、ページ内に投稿データを表示する繰り返し処理のことです。
WordPressにはメインループ とサブループがある。
要求されたURLに基づき自動的に取得された投稿データを出力するのがメインループであり、任意で指定した条件に基づき投稿データを取得・出力するのがサブループです。
例えば、ニュース一覧ページでは、記事をメインループ で呼び出せるのに対し、
トップページでは記事をメインループ で呼び出せない。なので、サブループを使用して記事を呼び出す必要がある。
このようにテンプレートファイルによって、メインループ で呼び出せるデータが変わる。
メインループ
メインループの基本的な書き方
<?php if(have_posts()): while(have_posts()): the_post(); ?>
//ループ内処理
<?php the_permalink();?> //URL表示
<?php the_title();?> //タイトル表示
<?php echo get_the_excerpt() ?> //抜粋を表示
<?php the_content();?> //内容を表示
<?php the_post_thumbnail();?> //アイキャッチを表示
<?php the_time();?> //投稿時間を表示
<?php the_category();?> //カテゴリーを表示
<?php the_tags();?> //タグを表示
<?php endwhile; endif; ?>
<?php else: ?>
//投稿データが取得できない場合の処理
<?php endif; ?>
get_the_excerpt()
the_excerpt()の場合、抜粋がpタグで囲まれて出力される。基本的にpタグは不要なので、
echo get_the_excerpt()を使用すると良い。
また、下記のコードで抜粋する文字数の指定と末尾の記号の変更ができる。functions.phpで一括設定する方法もある。
<?php echo mb_strimwidth(get_the_excerpt(), 0, {文字数}, "…", "UTF-8"); ?>
the_content()
この中は基本的にWYSIWYG対応となる。そのままだとpタグで囲まれるので、不要な場合、下記を記述する。
<?php remove_filter ('the_content', 'wpautop'); the_content(); ?>
the_time()
the_date()の場合、ループ内で前の記事と日付が同じ時、日付が表示されない仕様になっている。the_time()を使用することで解決できる。
また、下記のようにフォーマットの指定が可能。
<?php the_time('Y/m/d'); ?>//2021/04/28
サブループ
サブループの基本的な書き方
トップページなどで投稿一覧を取得する場合を想定してます
<?php
$args = array(
'post_type' => 'post',//投稿タイプを指定 postは通常投稿
'posts_per_page' => 8//表示件数
);
$the_query = get_posts( $args );
if ( $the_query ) :
foreach ( $the_query as $post ) : setup_postdata( $post );
?>
//ループ内処理
<?php
endforeach;
wp_reset_postdata();
endif;
?>
ループ内処理の基本的なタグの書き方はメインループと同じです。