記事一覧の例

loopで記事一覧の出力

トップページや固定ページに「〇〇カテゴリーの記事を何件か自動で表示したい」時があるかと思います。

そんな時、「WordPressループ」を使うことで容易に表示させることができます。

ループについては以下の関数を設定することで、容易に出力が可能です。

LOOPを出力するイラスト 出力の基本:ループ

以下はこのループをカスタマイズした記事一覧の出力例です。

指定したカテゴリーの記事一覧を表示

投稿一覧の取得に使っている関数に 「get_posts」を使い、 category_name で指定した wordpress を指定しています。

表示する投稿の件数は posts_per_page で5件に指定し、orderby、orderで日付の降順で投稿を取得して出力しています。

PHP

<?php
  $arg = array(
             'posts_per_page' => 5, // 表示する件数
             'orderby' => 'date', // 日付でソート
             'order' => 'DESC', // DESCで新しい、ASCで古い順に表示
             'category_name' => 'wordpress' // 表示したいカテゴリーのスラッグを指定
         );
  $posts = get_posts( $arg );
  if( $posts ): ?>
    <ul>
  <?php
      foreach ( $posts as $post ) :
        setup_postdata( $post ); ?>
      <li><?php the_time( 'Y.m.d' ); ?><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php endforeach; ?>
    </ul>
<?php
  endif;
  wp_reset_postdata();
?>

指定したタグの記事一覧を表示

タグの記事一覧の取得も、「get_posts」の関数を使い記事一覧を表示しています。

tag で指定した php を5件出力しています。

PHP

<?php
$arg   = array(
    'posts_per_page' => 5, // 表示する件数
    'orderby'        => 'date', // 日付でソート
    'order'          => 'DESC', // DESCで新しい、ASCで古い順に表示
    'tag'            => 'php' // 表示したいタグのスラッグを指定
);
$posts = get_posts( $arg );
if ( $posts ): ?>
    <ul>
        <?php
        foreach ( $posts as $post ) :
            setup_postdata( $post ); ?>
            <li><?php the_time( 'Y.m.d' ); ?><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
        <?php endforeach; ?>
    </ul>
<?php
endif;
wp_reset_postdata();
?>

記事と同じタグをもつ記事一覧を表示

その記事と同じタグをもつ記事一覧を出力する場合は「WP_Query」を使用して出力します。

PHP

<?php 
    $tags=wp_get_post_tags($post->ID, array('orderby'=>'rand'));
        if($tags):
?>
  
<?php
    $tag_id=$tags[0]->term_id;
    $args=array(
        'tag__in'=>array($tag_id), // 同タグの記事を取得するよ
        'post__not_in'=>array($post->ID),// 現在表示中の記事は除く
        'showposts'=>5,// 記事数 -1にすると全記事表示
        'caller_get_posts'=>1,// 取得した記事の何番目から表示するか
        );
     
    //wp_query
    $my_query=new WP_Query($args);
     
    if($my_query->have_posts()):
?>
  
 <!-- ここからループの出力 -->
<ul>
<?php while($my_query->have_posts()): $my_query->the_post(); ?> 
    <li>
        <a href="<?php the_permalink(); ?>"><?php the_post_thumbnail("side_thumbnails"); ?>
        <?php the_title(); ?>
        </a>
    </li>
<?php endwhile; ?>
</ul>
  
<?php endif; wp_reset_query(); endif;?>

カスタム投稿も含めた全部の記事一覧を表示

固定ページやトップページに、サブクエリの「WP_Query」を使用して、カスタム投稿も含めた記事一覧を出力します。

PHP

<?php
     $post_types = get_post_types(array('public'  => true, '_builtin' => false));
     array_push($post_types, 'post');
     $args = array(
        'post_type' => $post_types,
        'post_status' => 'publish',
        'posts_per_page' => -1, // 記事数 -1にすると全記事表示
        'orderby' => 'date', // 日付でソート
        'order' => 'DESC', // DESCで新しい、ASCで古い順に表示
    );
    $the_query = new WP_Query($args);
?>
<?php if ($the_query->have_posts()) : ?>
   <?php while ($the_query->have_posts()) : $the_query->the_post(); ?>
        <?php
            $post_type = get_post_type();
            $label = get_post_type_object($post_type)->label;
   ?>
      <!-- ここにループの出力を書きます -->
   <?php endwhile; ?>
<?php endif; ?>

通常投稿を表示させない場合は、2行目の「’_builtin’ => false」をtrueにすればカスタム投稿タイプだけの表示になります。

複数指定した記事の一覧を表示

固定ページや、複数のカスタム投稿をまとめて最新の10件を表示する場合 post_type を複数指定して表示します。

PHP

<?php
$arg = array(
    'post_type' => array('投稿タイプA','投稿タイプB','投稿タイプC'),
				'orderby' => 'post_date',
    'showposts' => 10
    );
?>
<?php $posts = get_posts($arg); ?>

<?php foreach($posts as $post):
setup_postdata($post); ?>

<!-- ここにループを書きます -->

<?php endforeach;
wp_reset_postdata();?>

キーワードを指定して関連記事を表示する方法

タイトルや本文に指定するキーワードが含まれている記事を10件表示する場合、以下のように記述します。

PHP

<?php
  $args = array(
    'post_type' => 'post', // 投稿タイプの指定
    'post_status' => 'publish', // 公開済の投稿を指定
    'posts_per_page' => 10, // 投稿件数の指定
    'post__not_in' => array($post->ID), // 現在表示している投稿を除外
    'orderby' =>  'rand', // ランダム
    's' => 'キーワード' // キーワードを指定
  );
  $the_query = new WP_Query($args); if($the_query->have_posts()):
?>
<ul>
<?php while ($the_query->have_posts()): $the_query->the_post(); ?>
<li><a href="<?php the_permalink(); ?>"><?php echo get_the_title(); ?></a></li>
<?php endwhile; ?>
</ul>
<?php wp_reset_postdata(); ?>
<?php else: ?>
<!-- 投稿が無い場合の処理 -->
<?php endif; ?>

キーワードを複数指定する場合は、カンマ(,)やスペースで対象にするキーワードを指定します。