今日からコピペで使えるWordPressで人気記事や最新記事を取得する方法のまとめ

  1. 公開日:2015/06/13
  2. 更新日:
  3. WordPress
  4. 0

WordPressでは様々な方法で投稿を取得することができます。今回は、その中でもよく使われる手法についてまとめました。なお、簡略化のため、説明は WP_Query に渡すパラメータのみとし、特段の注意点がなければ前後の処理は省いています。大まかな処理の流れは以下の通りになりますので参考にしてください。

$r = new WP_Query();
if ( $r->have_posts() ) {
	while ( $r->have_posts() ) : the_post();
	// do stuff
	endwhile;
}

WP_Queryで使用するパラメータについて

解説の前に WP_Query で使用する頻度の高いパラメータについてまとめておきます。

パラメータ説明
post_type投稿のタイプを指定(post, page, custom…)
post_status投稿の状態。通常は公開(publish)を指定
post_per_page投稿の取得件数
ignore_stick_postsトップページに常に固定表示されている投稿を除く場合はtrue(1)を指定
orderbyソートする項目を指定。ソート順は「order」で指定。ランダムにソートする場合は、「rand」を指定
orderソート順。ASCend(昇順)DESCend(降順)を指定

WP_Queryで様々な投稿を取得する

上記を念頭に入れて、弊サイトでも実績のある方法をいくつかご紹介します。

最新記事を取得

まずは、最新記事を取得。取得件数は別途調整してください。全ての基本形です。

$r = new WP_Query( array(
	'post_type' => 'post',
	'posts_per_page' => 6,
	'post_status' => 'publish',
	'ignore_sticky_posts' => 1,
 ));
//do stuff

人気記事を取得

人気記事の取得方法については、Google Analyticsと連携してページビューの多い人気記事を表示するを参考にしてください。

_custom_pageviews というカスタムフィールドにページビューが格納されているとした場合に、ページビューで並び替えるためのクエリは以下の通りになります。ポイントは、meta_keyにカスタムフィールド名を指定することです。

$r = new WP_Query( array(
	'post_type' => 'post',
	'posts_per_page' => 6,
	'post_status' => 'publish',
	'ignore_sticky_posts' => true,
	'orderby' => 'meta_value_num',
	'meta_key' => '_custom_pageviews',
	'order' => 'DESC',
));
//do stuff

また、指定したカスタムフィールドを数値として並べ替えたい場合は、「orderby」に「meta_value_num」を指定してください。文字列で並び替えられてしまった場合、「2」と「11」の順番が逆転する可能性があります。カスタムフィールドを数値として並び替えたい場合の決まり文句のため覚えておくと良いと思います。

関連記事(タグ)の取得

続いて、関連記事の取得方法です。まずは、同一のタグが設定されている記事を探し出します。タグが複数設定されている場合も対応可能です。 tag__in には、タグのID(スラッグではありません)を配列形式で指定します。また、 post__not_in に、現在表示中の記事のIDを指定することで、関連記事に自分自身が表示されなくなります。

なお、 orderby を「rand」に指定することで、記事の順番がランダムになります。

global $post;
$tags = wp_get_post_tags($post->ID);
$tag_ids = array();
if ($tags) {
	foreach ($tags as $individual_tag) {
		$tag_ids[] = $individual_tag->term_id;
	}
	$args = array (
		'tag__in' => $tag_ids,
		'post__not_in' => array($post->ID),
		'posts_per_page' => 6,
		'ignore_sticky_posts' => 1,
		'orderby' => 'rand', );
	$r = new WP_Query( $args );
	// do stuff
}

関連記事(カテゴリー)の取得

続いて、関連記事のカテゴリー版です。 category__in に、カテゴリーのID(スラッグではありません)を配列形式で指定します。なお、タグとカテゴリーを組み合わせて、カテゴリーに所属、かつタグが振られている記事のみを取得といったことも可能です。

global $post;
$categories = get_the_category($post->ID);
$category_ids = array();
if ($categories) {
	foreach ($categories as $category) {
		$category_id = $category->term_id;
		$category_child = get_term_children($category_id, 'category');
		if ($category_child != true) {
			$category_ids[] = $category->term_id;
		}
	}
	$r = new WP_Query( array(
		'category__in' =>
		$category_ids, 'post__not_in' => array($post->ID),
		'posts_per_page' => 6,
		'ignore_sticky_posts' => 1,
		'orderby' => 'rand' ));
	// do stuff
}

特定のカスタム投稿タイプの取得

例えば、「News」というカスタム投稿タイプを作成した場合に、「News」だけを取得するためには、 post_type にカスタム投稿タイプを指定します。

$r = new WP_Query( array(
	'post_type' => 'news',
	'posts_per_page' => 6,
	'post_status' => 'publish',
	'ignore_sticky_posts' => true,
));
// do stuff

上記の post_type に指定する値は、 register_post_type() 関数の第一引数で指定した値になります。

register_post_type(
	'news',
	array(
		'labels' => array(
		'name' => __('News'),
		'singular_name' => __('News') ) ,
		'public' => true,
		'has_archive' => true,
		'rewrite' => array( 'slug' => 'news' )
	));

表示する記事の順番によって処理を振り分ける

続いて、表示する記事の順番によって処理を振り分ける方法です。例えば、最新の記事だけ大きく表示させて目立たせておいて、古い記事は小さく表示させる、といったこともできますよ。

3の倍数かどうかで処理を振り分ける

横3列に記事を並べて表示したい場合に便利なクエリです。 current_post プロパティで現在の投稿が何番目かがわかります。最初の投稿は current_post が0であることに注意してください

$r = new WP_Query( array(
	'post_type' => 'post',
	'posts_per_page' => 6,
	'post_status' => 'publish',
	'ignore_sticky_posts' => true,
));
if ( $r->have_posts() ) : while ($r->have_posts()) : $r->the_post();
if ( $r->current_post % 3 == 0) : ?>
// do stuff ...

最初の記事かどうかで処理を振り分ける

最初の記事かどうかで振り分けるためには、 current_post が0かどうかで判定できます。

$r = new WP_Query( array(
	'post_type' =>
	'post', 'posts_per_page' => 6,
	'post_status' => 'publish',
	'ignore_sticky_posts' => true,
));
if ( $r->have_posts() ) : while ($r->have_posts()) : $r->the_post();
if ( $r->current_post == 0) : ?>
// do stuff ...

最後の記事かどうかで処理を振り分ける

逆に最後の記事かどうかで振り分けるためには、 post_count プロパティを使用します。これは取得した投稿の数です。 current_post が0から始まることに注意して判定するようにしてください。

$r = new WP_Query( array(
	'post_type' => 'post',
	'posts_per_page' => 6,
	'post_status' => 'publish',
	'ignore_sticky_posts' => true,
));
if ( $r->have_posts() ) : while ($r->have_posts()) : $r->the_post(); if ( $r->current_post == $r->post_count - 1 ) : ?> // do stuff ...

まとめ

WordPressで使えそうな様々な形態の投稿取得方法をご紹介しました。

この記事が気に入ったらいいねしよう!
関連記事
ご意見ボード
匿名で管理人に送信されます。※送信専用です。返信はできません。
ご指摘・ご意見
Top