特定のカスタムフィールドがある場合のみWordPress投稿を表示する方法

カスタムフィールドに基づいて特定のWordPress投稿を表示する必要があるときがありますよね?私たちは経験済みです。

WordPressを始めたばかりの頃、特に特定の情報を持つ投稿を表示したいだけなのに、コードスニペットを見るとどれも威圧的に感じられました。

しかし、良いニュースがあります。何千人ものWordPress初心者の方々を支援してきた経験から、カスタムフィールドのフィルタリングのように技術的に聞こえるものでも、恐れる必要はないことがわかりました。

実際、簡単なコード方法をステップバイステップでご紹介します。

このソリューションは、特定の基準に基づいて通常のブログ投稿またはカスタム投稿タイプを公開する場合でも、完全に機能します。

特定のカスタムフィールドがある場合のみWordPress投稿を表示する方法

📌 簡単な注意点: このチュートリアルは、特定のカスタムフィールドに値が入力されている場合にWordPress投稿を表示するためのものです。

WordPress投稿のフロントエンドにカスタムフィールドを表示したい場合は、WordPressテーマでカスタムフィールドを表示する方法に関するガイドをお読みください。

特定のカスタムフィールドを持つWordPress投稿を表示する理由

あなたのWordPressウェブサイトに投稿を作成する際、カスタムフィールドを使用して投稿に追加のメタデータを追加できます。

メタデータは、投稿に追加できる追加情報です。たとえば、書評を書いている場合、「著者名」や「星評価」などのカスタムフィールドを追加できます。

カスタムフィールドはWordPressの高度な概念であり、WordPressにカスタムフィールドを追加する方法はたくさんあります。カスタムフィールドの使用方法と表示方法に関する役立つヒントは、私たちの投稿「WordPressカスタムフィールド101:ヒント、トリック、ハック」でたくさん見つけることができます。

カスタムフィールドを使用して投稿にメタデータを追加できます

当社のユーザーの1人が、特定のカスタムフィールドが存在する場合にのみWordPress投稿を表示する方法を尋ねてきました。これは、特定のカスタムフィールドや値を含むすべての投稿を一覧表示するカスタムページを作成したい場合に役立ちます。

回答を返信した後、より多くのWordPress.orgコミュニティが恩恵を受けられるように、皆と共有するのが最善だと考えました。

WordPressテーマファイルの編集:留意すべきこと

このチュートリアルを適切にフォローするために、以下の点に注意してください。

  1. このチュートリアルでは、WordPressのテーマファイルをコードで編集するため、完全な初心者には最適ではありません。もしあなたがこれに慣れていない場合は、WordPressにウェブ上のスニペットをコピー&ペーストする方法に関するガイドを読む必要があります。
  2. エラーが発生した場合にライブサイトに影響が出ないように、ウェブサイトのバックアップを取るか、ステージング環境を使用することをお勧めします。これは、テーマファイルにコードを追加するため、リスクが伴う可能性があります。
  3. 後でコードをどこに追加すればよいかわかるように、WordPressテンプレート階層の仕組みを理解することをお勧めします。
  4. また、WordPressクエリでこれらのパラメータを呼び出すため、WordPressループがどのように機能するかにも慣れる必要があります。

また、ブロックテーマはテーマファイルが異なるため、このチュートリアルはクラシックなWordPressテーマでのみ機能することに注意してください。

ということで、特定のカスタムフィールドを持つWordPress投稿のみを表示する方法を見てみましょう。

特定のカスタムフィールドに基づいて投稿をフィルタリングする方法

使用する必要があるコードを示す前に、どのテーマファイルに追加する必要があるかを知る必要があります。最も可能性が高いのは、index.php、archive.php、またはpage.phpのようなページテンプレートです。

例えば、Twenty Twenty-Oneテーマのindex.phpファイルに追加したいとします。現在、そのファイルのWordPressループ部分は次のようになっています。

<?php
if ( have_posts() ) {

// Load posts loop.
	while ( have_posts() ) {
		the_post();

		get_template_part( 'template-parts/content/content', get_theme_mod( 'display_excerpt_or_full_post', 'excerpt' ) );
	}

	// Previous/next page navigation.
	twenty_twenty_one_the_posts_navigation();

} else {

	// If no content, include the "No posts found" template.
	get_template_part( 'template-parts/content/content-none' );

}

get_footer();

このコードは、デフォルトのWordPressループ(have_posts() および the_post())を使用して投稿を表示します。この方法は、ほとんどの標準的なWordPressテーマに適しており、カスタムフィルタリングや並べ替えなしで投稿を表示するために使用されます。

さて、上記の例のようにカスタムフィールド「color」を使用するとします。そのコード全体を以下のスニペットに置き換える必要があります。

<?php
// The Query to show a specific Custom Field
$the_query = new WP_Query('meta_key=color');

// Load posts loop.
if ( $the_query->have_posts() ) {
    while ( $the_query->have_posts() ) {
        $the_query->the_post();

        get_template_part( 'template-parts/content/content', get_theme_mod( 'display_excerpt_or_full_post', 'excerpt' ) );
    }

    // Previous/next page navigation.
    twenty_twenty_one_the_posts_navigation();

} else {

    // If no content, include the "No posts found" template.
    get_template_part( 'template-parts/content/content-none' );

}

// Reset Post Data
wp_reset_postdata();

get_footer();

この新しいコードでは、特定のカスタムフィールド(この場合はカスタムフィールド「color」を持つ任意の投稿)を持つ投稿を取得するためのカスタムクエリを導入しました。

次に、カスタムクエリによって取得された投稿を反復処理するためにカスタムループ(if ($the_query->have_posts()))を使用し、最初のスニペットと同じ方法で各投稿のコンテンツを表示します。

WordPressがカスタムクエリの後にすべての投稿を正しく表示するようにwp_reset_postdata() 関数を追加しました。これにより、サイトがスムーズに機能し、ユーザーに適切なコンテンツが表示されます。

では、「color」カスタムフィールドに「blue」のような特定の値を持つ投稿を見つけたい場合はどうすればよいでしょうか?そのためには、クエリに「meta_value」パラメータを追加するだけです。

更新されたクエリコードは次のようになります。

$the_query = new WP_Query( array( 'meta_key' => 'color', 'meta_value' => 'blue' ) );

💡プロのヒント: meta_compareパラメータを使用すると、さらに高度なフィルタリングが可能です。これにより、値と一致しない投稿を見つけることができます。

例えば、色が「青」ではないすべての投稿を表示するには、クエリは次のようになります。

$the_query = new WP_Query( array( 'meta_key' => 'color', 'meta_value' => 'blue', 'meta_compare' => '!=' ) );

!=は、WordPressに「color」フィールドが存在するが、「blue」と等しくないすべての投稿を見つけるように指示します。

公式のWordPress開発者ドキュメントには、使用できる他の多くの比較演算子があります。

ページテンプレートのPHPファイルにコードを保存したら、フロントエンドでWordPressサイトを確認して、コードが機能しているか確認できます。

特定のカスタムフィールドを持つ投稿を表示することに関するよくある質問

特定のカスタムフィールドのみを持つ投稿を表示することについて、読者からよく寄せられる質問をいくつかご紹介します。

テーマファイルを編集せずにこれを行う方法はありますか?

はい、そしてそれがほとんどのユーザーにおすすめする方法です。WPCodeのようなプラグインを使用すると、テーマファイルを直接編集することなく、このようなカスタムPHPスニペットを安全に追加できます。

これにより、サイトがエラーから保護され、テーマを更新してもカスタマイズが失われないことが保証されます。

複数のカスタムフィールドで投稿をフィルタリングできますか?

できます。WP_Query関数は非常に強力で、より複雑な引数を受け入れることができます。「meta_query」パラメータを使用すると、複数のカスタムフィールドを一度に一致させる条件の配列を構築できます。

この方法はブロックテーマでも機能しますか?

この特定のチュートリアルでは、index.phparchive.phpのようなファイルを編集するクラシックテーマに焦点を当てています。ブロックテーマはサイトエディターを使用し、これらのファイルには依存しません。

ブロックテーマで同様の結果を達成するには、Query Loopブロックとその組み込みフィルタリングオプションを使用します。これらはカスタムコードを必要としません。

「meta_key」と「meta_value」の違いは何ですか?

「meta_key」は、「色」や「ステータス」のようなラベルの名前と考えてください。「meta_value」は、「青」や「公開済み」のような、そのフィールドに入力された実際のデータです。

キーを使用するとカスタムフィールドを持つ投稿をすべて見つけることができ、値を使用するとその特定の情報を持つ投稿をすべて見つけることができます。

WordPressサイトをカスタマイズするその他の方法を学ぶ

WordPressページをカスタマイズするためのその他の方法を以下に示します。

このチュートリアルが、特定のカスタムフィールドを持つ場合にのみWordPressの投稿を表示する方法を学ぶのに役立ったことを願っています。また、WordPressウェブサイトの編集方法に関する完全ガイドや、WordPress向けの最高のFigmaプラグインの専門家による選び方もご覧ください。

この記事が気に入ったら、WordPressのビデオチュートリアルについては、YouTubeチャンネルを購読してください。 TwitterFacebookでもフォローできます。

開示:当社のコンテンツは読者によってサポートされています。これは、当社のリンクの一部をクリックすると、当社が手数料を得る可能性があることを意味します。WPBeginnerがどのように資金提供されているか、それがなぜ重要か、そしてどのように私たちをサポートできるかについては、こちらをご覧ください。当社の編集プロセスはこちらです。

究極のWordPressツールキット

無料のツールキットにアクセスしましょう - すべてのプロフェッショナルが持つべきWordPress関連の製品とリソースのコレクションです!

読者とのインタラクション

11 CommentsLeave a Reply

  1. 質問があります、もし単一の投稿とカスタムフィールドを表示したい場合、どうすればよいですか?
    特定のカスタムフィールドを持つ投稿を表示したくありません。投稿のすべてのカスタムフィールドを表示したいです。

  2. こんにちは、役立つチュートリアルをありがとうございます。質問があります。WordPressのウェブサイトで「meta_country」という名前のメタ値と、記事の国(例:「us」、「uk」、「fr」など)を設定しました。ブログのホーム画面のどこかに、特定の国と特定のタグを持つすべての投稿のリストを表示するリンクを追加しようとしています。例えば、「UK」の投稿で「APPLE」というタグが付いたものすべてです。
    どうすればいいのか分かりません。誰か助けてもらえませんか?

  3. "post_type" パラメータをクエリに含めないと、結果を生成できませんでした。

    例: $the_query = new WP_Query(‘post_type=page&meta_key=color’);

  4. こんにちは、

    特定のカスタムフィールドを「持たない」投稿を表示するにはどうすればよいですか?何かアイデアはありますか?

    ありがとうございます!!!

    • PHPから知っているように、それは meta_key!=’your key’ である必要があります

      「!」は「ではない」を意味することを知っておくだけです

コメントを残す

コメントを残していただきありがとうございます。すべてのコメントは、当社のコメントポリシーに従ってモデレーションされますので、ご了承ください。メールアドレスは公開されません。名前フィールドにキーワードを使用しないでください。個人的で有意義な会話をしましょう。