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 Twenty Seventeen function.php

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

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

記事を読む

Wordpress VR Test

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

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

記事を読む

WordPress PHP

WordPress の PHP をちょっと見てみよう Ⅰ

WordPress には、たくさんのファイルが入っています。 ここではテーマ内ではなく、トップ

記事を読む

Wordpress 自作フォーム

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

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

記事を読む

WordPress の PHP をちょっと見てみよう Ⅲ

WordPress の PHP をちょっと見てみよう Ⅲ

前記事の続きで、wp-settings.php の91行目あたりから見ていきます。 次は、wp

記事を読む

WordPress の PHP をちょっと見てみよう Ⅱ

WordPress の PHP をちょっと見てみよう Ⅱ

前記事の続きで、wp-settings.php の68行目あたりから見ていきます。 <今回のピ

記事を読む

WordPress エラー:Failed to load plugin: table from url https://cdn.tinymce.com/4/plugins/table/plugin.min.js

WordPress エラー:Failed to load plugin: table from url https://cdn.tinymce.com/4/plugins/table/plugin.min.js

WordPress エラーの状態 WordPress 管理画面のテキスト入力欄で(ビジュアルタブの

記事を読む

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

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

WordPressでカレンダーの表示部分をいじってみようかと思います。 どうやら、カレンダー関

記事を読む

WordPress レスポンシブ テンプレート 元にサイトを作ってみる その2

DEMO を見る カスタム投稿タイプ functions.php 今回は3つのリストメニュ

記事を読む

WordPress Warning エラー

WordPress フォルダー・ファイル系の関数 is_dir や opendir や exif_imagetype で Warning エラー

Wordpress の管理画面でフォルダーの中身を読み込む関数 opendir でエラー Word

記事を読む

WordPress wordpress テンプレート

Message

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

WordPress エラー:Failed to load plugin: table from url https://cdn.tinymce.com/4/plugins/table/plugin.min.js
WordPress エラー:Failed to load plugin: table from url https://cdn.tinymce.com/4/plugins/table/plugin.min.js

WordPress エラーの状態 WordPress 管理画面のテキ

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

→もっと見る

    • 202404
      Mon Tue Wed Thu Fri Sat Sun
      1234567
      891011121314
      15161718192021
      22232425262728
      2930
    にほんブログ村 IT技術ブログへ にほんブログ村 IT技術ブログ PHPへ にほんブログ村 IT技術ブログ WordPressへ
    にほんブログ村 FC2 Blog Ranking
    PAGE TOP ↑