wordpress カスタム投稿を一覧(ループ)で表示する

公開日: : WordPress, wordpress テンプレート

wordpress カスタム投稿を一覧(ループ)で表示する

カスタム投稿を一覧で表示する方法がいろいろあります。
query_posts 関数が非推奨になってしまっているので、メモしておこうと思います。

1. query_posts 関数
2. get_posts 関数
3. WP_Query クラス
4.(おまけ) pre_get_posts アクションフック

1. query_posts 関数(非推奨)

テンプレートタグでメインクエリを上書きしてしまう為、現在非推奨。
使う場合は、最後に wp_reset_query でクエリをリセットすること。

$args = array(
    'post_type' => 'カスタム投稿のスラッグ',
    'posts_per_page' => 5 //表示件数(-1で全ての記事を表示)
);
query_posts( $args );

if ( have_posts() ) : 
    while ( have_posts() ) : the_post();
        the_title();
    endwhile; 
else:
    echo 'データがありません。';
endif;
// クエリをリセット
wp_reset_query();

テンプレートタグ/query posts – WordPress Codex 日本語版

2. get_posts 関数

メインループに影響与えない。

$args = array(
    'post_type' => 'カスタム投稿のスラッグ',
    'posts_per_page' => 5 //表示件数(-1で全ての記事を表示)
);
$the_query = get_posts( $args );
if ( $the_query ) :
foreach ( $the_query as $post ) : setup_postdata( $post );
	the_title();
endforeach;
wp_reset_postdata();
else:
    echo 'データがありません。';
endif;

テンプレートタグ/get posts – WordPress Codex 日本語版

3. WP_Query クラス

メインループに影響与えない。
get_posts より、条件分岐タグを使うような複雑な処理が可能。

$args = array(
    'post_type' => 'カスタム投稿のスラッグ',
    'posts_per_page' => 5 //表示件数(-1で全ての記事を表示)
);
$the_query = new WP_Query( $args );
if ( $the_query->have_posts() ) :
while ( $the_query->have_posts() ) : $the_query->the_post();
	the_title();
endwhile;
wp_reset_postdata();
else :
echo 'データがありません。';
endif;

関数リファレンス/WP Query – WordPress Codex 日本語版

4.(おまけ)pre_get_posts アクションフック

メインクエリに影響するので、DB への問い合わせを軽減。

カテゴリーページやアーカイブページの表示件数を変更したりなど、条件によってはカスタム投稿にも使用可能。

例1:カテゴリーページの表示件数変更する

function.php

add_action( 'pre_get_posts', 'my_custom_query_vars' );
function my_custom_query_vars( $query ) {
	// カテゴリーページの表示件数変更する
	if (! is_admin() && $query->is_main_query() && $query->is_category()){
		$query -> set( 'posts_per_page', '5' );
	}
	return $query;
}

例2:検索結果にカスタム投稿タイプを含める

function.php

function search_filter($query) {
  if ( !is_admin() && $query->is_main_query() ) {
    // 検索結果にカスタム投稿タイプを含める
    if ($query->is_search) {
      $query->set( 'post_type', array( 'post', 'カスタム投稿のスラッグ' ) );
    }
  }
}
add_action( 'pre_get_posts','search_filter' );

pre_get_posts は、固定ページのテンプレートでは使えない

注意が必要なのは、固定ページのテンプレートで使うとエラーになります。

以下は、「カスタム投稿一覧にも使えるのでは・・・?」と思ってやってみたダメな例です。
function.php

// 404エラーになるダメな例
add_action( 'pre_get_posts', 'my_custom_query_vars' );
function my_custom_query_vars( $query ) {
	if ( !is_admin() && $query->is_main_query() && is_page('固定ページスラッグ')) {
		$query->set( 'post_type' , 'カスタム投稿のスラッグ' );
		$query->set( 'posts_per_page' , 5 );//表示件数(-1で全ての記事を表示)
	}
	return $query;
}

なぜダメかというと、WordPress Codex に書いてありました。

WordPress Codex 日本語版 pre get posts より引用:
pre_get_posts は単一の固定ページのリクエスト(ページテンプレート)に対するクエリを変更するのに用いるべきではありません。なぜなら ‘is_page’、’is_singular’、’pagename’ および他のプロパティ(pretty パーマリンクを使っているかどうかによる)が parse_query() メソッドによってセットされた後だからです。・・・・

固定ページのテンプレートで一覧を表示したい場合は、WP_Query クラスを使ってくださいとのことです。

関連記事

WordPress プラグイン「 Search Everything 」

WordPressでカテゴリー名も検索にひっかけるプラグイン「Search Everything」

WordPressでカテゴリーも検索にひっかけるプラグイン「Search Everything 8.

記事を読む

レンタルサーバでWordPressを設置してみよう!

WordPress.com 内に、ブラウザだけで無料でサイトを作成出来きるサービスもありますが、Wo

記事を読む

Wordpress 独自テーブル 商品名と料金

WordPress 独自テーブル

Wordpress で独自テーブルを作ってみようと思います。 独自テーブルのデータ 今回のデ

記事を読む

WordPress Twenty Seventeen function.php

WordPress twentyseventeen の function.php を見る – その1

WordPress の最低限の機能だけのシンプルなテンプレートが欲しかったので、作っておくことにしま

記事を読む

Wordpress 自作フォーム

WordPress 自作フォーム その1(サンプルと設置)

Wordpress でプラグインを使わずにフォームをやってみます。 簡単に名前、メールアドレス、メ

記事を読む

Wordpress 自作フォーム (チェックボックスなど)

WordPress 自作フォーム その3(チェックボックスなど)

以前、WordPress 自作フォーム その1の記事で Wordpress で自作フォームを作ってみ

記事を読む

WordPress カレンダー カスタマイズ

WordPress カレンダー カスタマイズ(add_filter版)

前回、「WordPress の PHP をちょっと見てみよう Ⅲ」でフックをやったので、カレンダーで

記事を読む

WordPress Twenty Seventeen function.php

WordPress twentyseventeen の function.php を見る – その2

前回の続きです。 次のスターターコンテンツは、今回のシンプルテンプレートには不要ですが、よくわ

記事を読む

WordPress レスポンシブ テンプレート

WordPress レスポンシブ テンプレートコーポレート用(シンプル・カスタマイズ用)ダウンロード

WordPress レスポンシブ テンプレートコーポレート用(シンプル・カスタマイズ用)ダウンロード

記事を読む

Wordpress VR Test

WordPress で VR させて、360°のパノラマ画像を表示する

WordPress.com内ショートコードで VR させる WordPress.com内で、VR(

記事を読む

WordPress wordpress テンプレート

Message

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

wordpress タイトルの変更
WordPress タイトルの変更

テンプレートタグ the_title(); get_the_title

All-in-One WP Migration で サーバ移動
「All-in-One WP Migration」プラグインで 簡単に WordPress のサーバー移行する手順メモ

1.移行元サイトでのデータエクスポート 「All-in-One WP

DNSサーバーとは
ドメインとは?DNSサーバーとは?

ドメインとは? ドメインとは? ドメインとは、インターネット上のネ

javascriptで複数同じ名前のformの値を取得する
javascriptで複数同じ名前のformの値を取得するとエラー Cannot read property ‘value’ of undefined

Javascript で value の値を取得する このようなHT

リビジョンを削除し、テーブルを最適化してDBの容量を削減
WordPress リビジョンを削除し、テーブルを最適化してDBの容量を削減

WordPress リビジョン機能 リビジョンは過去の記事を保存して

→もっと見る

    • 202107
      Mon Tue Wed Thu Fri Sat Sun
      1234
      567891011
      12131415161718
      19202122232425
      262728293031
    にほんブログ村 IT技術ブログへ にほんブログ村 IT技術ブログ PHPへ にほんブログ村 IT技術ブログ WordPressへ
    にほんブログ村 FC2 Blog Ranking
    PAGE TOP ↑