SEOノウハウ・副業ブログ・ワードプレス

【WordPress】投稿記事の取得パラメータを変えて一覧表示させたい場合(サブクエリ)

自分で取得する記事をいじったりする上級者向けです。

疑問

WordPressで投稿記事を取得する時のパラメータを変えて、独自の一覧を表示させたい!

特定記事を取得して表示したい場合などに使えます。

投稿記事の取得パラメータを変えてる一覧を取得する方法

できるだけ修正を減らす場合は「WP_Query()」を使ってサブクエリにします。

WP_Query()に渡すパラメータ「$args」で検索条件を変えることができます。

パラメータ情報は本家サイトを見た方が早いし分かりやすいです。

サブクエリの処理フロー

サブクエリの処理フローは、下記のようになっています。

  • $argsを設定
  • WP_Query($args)を実行
  • 記事を成形

$argsを設定

独自の記事一覧を取得するためのパラメータ設定をします。

WP_Query($args)を実行

指定したパラメータをWP_Queryに渡して実行すると、データを取得できます。

記事を成形

have_posts()を使って、記事があれば記事を成形して一覧を作成します。

指定した投稿IDを取得するショートコード

サブクエリを使って、指定した投稿ID(カンマ区切りにすれば複数可能)を取得するショートコードを紹介します。

サブクエリの処理フローは前述の紹介の通りです。

記事一覧の成形をgetarticle_layout関数で行っています。


// 投稿IDをカンマで指定。
// [getarticle postid="123,123,123,123"]

function getarticle_func($atts, $content = null) {

  extract(shortcode_atts(array(
    'postid'  => null,
  ), $atts));

  /* postid取得 */
  $array_postid = explode( ',', $postid );
  $post_count = count($array_postid);

  /* id設定 */
  if(!empty($postid)) {
    $args = array(
      'post_type' => array('post'),
      'post_status' => array('publish'),
      'posts_per_page' => $post_count,
      'order' => 'DESC',
      'orderby' => 'date',
      'post__in' => $array_postid,
    );
  } else {
    //投稿IDの指定がない場合は最新4件取得
    $args = array(
      'post_type' => array('post'),
      'post_status' => array('publish'),
      'posts_per_page' => 4,
    );
  }
	  
  //投稿取得
  $query = new WP_Query( $args );
	
  <div id="blog-entries">

  <?php

    // Loop through posts.
    while ( $query->have_posts() ) {
      getarticle_layout($query);
    }

    ?>
	
  </div><!-- #blog-entries -->
	
  <?php

  }

  wp_reset_query();

}
add_shortcode('getarticle', 'getarticle_func');

/*
** 
** レイアウト生成
** 
*/
function getarticle_layout($query) {

  $query->the_post();

  // Get post entry content.

  $post_id = $query->posts[0]->ID;
  $post_date = date("Y年h月j日",strtotime($query->posts[0]->post_date));

  $post_title = $query->posts[0]->post_title;
  $img_args = array(
    'alt' => $post_title,
  );

?>
  <article id="post-<?php echo $post_id; ?>">
  <a href="<?php echo the_permalink(); ?>">

    <div class="archive-thumbnail">
      <?php echo the_post_thumbnail( 'full', $img_args ); ?>
    </div>

    <div class="archive-entry-content">
       <div class="archive-entry-time">
        <?php echo $post_date; ?>
      </div>
      <h5 class="archive-entry-title">
        <?php echo the_title(); ?>
      </h5>
    </div>

  </a>
  </article>
<?php
}

※あくまで、サブクエリの取得イメージなので、CSSはありません。

  • B!