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

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

記事を読む

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

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

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

記事を読む

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

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

記事を読む

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

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

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

記事を読む

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

「レスポンシブ テンプレート の メニューやブログの設置」の記事では、メニューやブログの設置例をやっ

記事を読む

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

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

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

記事を読む

wordpress カスタム投稿で 2ページ目以降が404

wordpress カスタム投稿で 2ページ目以降が404になってしまう

wordpress のカスタム投稿で、ニュースのページを作っていました。 ニュース一覧で、ペー

記事を読む

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

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

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

記事を読む

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

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

記事を読む

Wordpress 自作フォーム

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

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

記事を読む

WordPress wordpress テンプレート

Message

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

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

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

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

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

Javascript let const アロー関数 クラス
Javascript ES5,6 の新機能(letとconst,アロー関数,クラスなど)

ESとはECMASCriptの略で、ECMA という国際的な標準化機関

Strict モード JavaScript
Javascript Strictモード “use strict”;

Strict モード(厳格モード) Strict モードとは、ECM

CodeIgniter インストール
Codeigniter インストールとバージョンアップ2→3 PHP 5→7 メモ

Codeigniter インストール Codeigniter をサイ

→もっと見る

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