WordPressのループを使って記事一覧を作成する(追記あり)

Last modified date

WordPressのサブループを使って記事一覧を作成する方法

今回はWordpressで最も使用頻度が高いであろう、記事一覧を表示するサブループを紹介するぞ。

各サブループの書き方

今回のサブループは何度も使うので、先に完成形を置いておくことにした。記事一覧を表示させるコードだけ欲しい場合はここをコピペすればOKだ。

get_posts()の書き方

<?php
$args = array(
    'post_type'=>'post', 
    'post__not_in'  => array(1,2,3),
    'tag' => 'maougun',	
    'cat'  => 5,
    'posts_per_page'  => 10
    'post_status' => array('publish'),
    'meta_query' => array(
        'relation' => 'AND',
        array(
            'key'     => 'color',
            'value'   => 'blue',
            'compare' => '='
        ),
        array(
            'key'     => 'price',
            'value'   => array( 1,200 ),
        )
    ),
);
$my_posts = get_posts( $args );
if ( $my_posts ) {
        global $post;
    foreach( $my_posts as $post ) {
        setup_postdata( $post );
        the_title();
    }
    wp_reset_postdata();
}
?>

new WP_Queryの書き方

<?php
$args = array(
   'no_found_rows' => true,
   'post_type'=>'post', 
    'post__not_in'  => array(1,2,3),
    'tag' => 'maougun',	
    'cat'  => 5,
    'posts_per_page'  => 10
    'post_status' => array('publish'),
    'meta_query' => array(
        'relation' => 'AND',
        array(
            'key'     => 'color',
            'value'   => 'blue',
            'compare' => '='
        ),
        array(
            'key'     => 'price',
            'value'   => array( 1,200 ),
        )
    ),
);
$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ) {
    while( $the_query->have_posts() ) {
        $the_query->the_post();        
                the_title();
    }
    wp_reset_postdata();
}
?>

WordPressのループとは

さて、今回紹介したサブループを詳しく説明していくぞ。

WordPressで記事一覧を表示させる機能をループには「メインループ」と「サブループ」があり、今回紹介したのはサブループのほうだ。

メインループの説明も簡単にしておくぞ。
メインループは、文字通りメインの機能になる。ではメインとは何か?

メインループはWordPressにもともと備わっている、記事一覧ページを出力するループである。

例えば、記事のアーカイブ、検索結果、カテゴリーページなんかはWordPressをインストールして、最初から使えるであろう? そういうデフォルトからある記事一覧を出力しているループのことだ。

検索結果から常に特定の記事を除外したい場合なんかにこのメインループの設定をする。

サブループを使うタイミングや場所は?

サブループは普段、記事一覧が表示されていない場所に追加する際に使用する。1番よく使うのは記事の下に関連記事を表示する場合であろうな。

またメインループは1ページで1回しか使えないのに対し、サブループは同じページで複数回使用することができるぞ。

例えば、メディアサイトを作って、固定ページに各カテゴリの新着記事を6つずつ表示させる場合にはサブループを6つ使うなどの使い方もある。

サブループのnew WP_Queryとget_posts()の違いは?

サブループの作り方には、new WP_Queryを使う方法とget_posts()を使う方法があるのだが、この2つの違いは少なく、ほとんど同じ動きをする。

が、パフォーマンスを考えるとnew WP_Queryを使うと良いぞ。

ただし、ページネーションを使わない場合に限る。そして、以下のコードを抽出する条件に追加する必要があるがな。

(※追記 実際に検証したところ、get_posts()のほうが良かった。すまぬ。検証内容はWordPressのサブループにはnew WP_Query()ではなくget_posts()を使うべきにあるから見てみるが良い。)

'no_found_rows' => true,

取得する記事一覧をカスタマイズには

取得する記事の条件を指定するには、以下のように条件を追加してくのだ。

条件は詳細に指定できるぞ

取得するポストタイプ、取得数、記事の公開日、記事が公開されているかどうか、どのカテゴリーに属している記事か。などである。

$args = array(
   'no_found_rows' => true,
   'post_type'=>'post', 
    'post__not_in'  => array(1,2,3),
    'tag' => 'maougun',	
    'cat'  => 5,
    'posts_per_page'  => 10
    'post_status' => array('publish'),
    'meta_query' => array(
        'relation' => 'AND',
        array(
            'key'     => 'color',
            'value'   => 'blue',
            'compare' => '='
        ),
        array(
            'key'     => 'price',
            'value'   => array( 1,200 ),
        )
    ),
);

Wordpressのループのまとめ

・関連記事などを表示させる場合はメインループではなくサブループを使用する。
・new WP_Queryとget_posts()で迷ったらget_posts()を使うといい。
・new WP_Queryでページネーションが必要ない場合は'no_found_rows' => true,を指定する。
・配列で条件を細かく指定できる

今回はよく使うWordPressのループを紹介したぞ!

魔王様

コメントを残す

メールアドレスが公開されることはありません。

Post comment