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 の PHP をちょっと見てみよう Ⅱ

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

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

記事を読む

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

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

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

記事を読む

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

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

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

記事を読む

WordPress Twenty Seventeen function.php

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

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

記事を読む

WordPress プラグイン「 Search Everything 」

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

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

記事を読む

WordPress Warning エラー

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

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

記事を読む

ロリポップでWordPressのPHPバージョンを5から7にする

ロリポップでWordPressのPHPバージョン7.1に変更後「サイトに技術的な問題が発生しています。」

WordPress.org の推奨環境 PHP7以上 MySQL5.6以上またはMaria

記事を読む

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

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

記事を読む

Wordpress 自作フォーム 2(注意点とエラー:This is somewhat embarrassing, isn’t it? など)

WordPress 自作フォーム その2(注意点とエラー:This is somewhat embarrassing, isn’t it? など)

前回(WordPress 自作フォーム 1)のつづきです。 今回は細かいところや注意点とエラーなど

記事を読む

wordpress タイトルの変更

WordPress タイトルの変更

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

記事を読む

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 リビジョン機能 リビジョンは過去の記事を保存して

→もっと見る

    • 202110
      Mon Tue Wed Thu Fri Sat Sun
      123
      45678910
      11121314151617
      18192021222324
      25262728293031
    にほんブログ村 IT技術ブログへ にほんブログ村 IT技術ブログ PHPへ にほんブログ村 IT技術ブログ WordPressへ
    にほんブログ村 FC2 Blog Ranking
    PAGE TOP ↑