最も必要とされている時に、信頼できるWordPressチュートリアルを。
WordPress入門ガイド
WPBカップ
2500万人以上
当社のプラグインを使用しているウェブサイト
16+
WordPress経験年数
3000+
専門家によるWordPressチュートリアル

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

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

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

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

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

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

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

💡 要約: テーマファイル(index.phpなど)でカスタムWP_Queryを使用すると、特定のカスタムフィールドを持つWordPress投稿のみを表示できます。

📌 簡単なメモ: このチュートリアルは、特定のカスタムフィールドに値が入力されている場合にWordPress投稿を表示するためのものです。WordPress投稿のフロントエンドにカスタムフィールドを表示したい場合は、WordPressテーマでカスタムフィールドを表示する方法に関するガイドをお読みください。

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

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

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

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

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

ユーザーの1人から、特定のカスタムフィールドが存在する場合にのみWordPress投稿を表示する方法について質問がありました。これは、特定のカスタムフィールドや値を含むすべての投稿を一覧表示するカスタムページを作成したい場合に役立つ可能性があります。

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

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

開始する前に、テーマファイルで作業する際に留意すべき重要な点がいくつかあります。

テーマファイルに直接コードを追加すると、次回テーマを更新したときに変更が失われます。

そのため、WPCodeのようなプラグインを使用して、テーマを編集せずに安全にカスタムPHPコードを追加することをお勧めします。テーマファイルを編集したい場合は、変更が保持されるように子テーマを使用していることを確認してください。

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

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

📍重要事項: このチュートリアルは、クラシックなWordPressテーマでのみ機能します。ブロックテーマはサイトエディターと異なるアプローチでコンテンツを表示するため、テンプレートファイルを編集するこの方法は適用されません。

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

ステップ1:コードスニペットプラグインをインストールする

一部のチュートリアルでは、テーマのindex.phpファイルを開き、WP_Queryと呼ばれるものを使用してWordPressループを完全に書き直すように指示されます。私たちはこれをお勧めしません。

メインのテンプレートファイルを変更すると、サイトのレイアウトが壊れたり、サイトを遅くする重複したデータベースクエリが発生したり、ページネーション(「次のページ」ボタン)が完全に壊れたりする可能性があります。

代わりに、これを実行する最も安全で効率的な方法は、pre_get_postsアクションフックを使用することです。これにより、WordPressはページテンプレートをロードする前に投稿をフィルタリングします。

このカスタムコードを追加するには、WPCodeのようなプラグインの使用をお勧めします。これにより、テーマファイルを直接編集せずにPHPコードを安全に追加できます。つまり、間違いを犯してもサイトが壊れることはなく、テーマが更新されても変更は失われません。

ステップ2:カスタムクエリコードを追加する

WPCodeをインストールして有効化したら、WordPressダッシュボードのコードスニペット » スニペットを追加に移動し、「カスタムコードを追加(新規スニペット)」を選択します。

WPCodeでカスタムスニペットを追加する

「コードタイプ」がPHPスニペットに設定されていることを確認してください。

次に、次のコードを貼り付けます:

<?php
add_action( 'pre_get_posts', 'wpb_filter_posts_by_custom_field' );

function wpb_filter_posts_by_custom_field( $query ) {

    // Only modify the main query on the front-end homepage
    if ( ! is_admin() && $query->is_main_query() && $query->is_home() ) {

        // Tell WordPress to only get posts with the custom field key 'color'
        $query->set( 'meta_key', 'color' );

    }
}

まず、コードはフロントエンド(具体的にはブログのホームページ)のメインクエリのみを変更し、WordPressの管理画面は完全にそのままにしておくことを確認します。

次に、$query->setを使用して、カスタムフィールド「color」が付与されている投稿のみを取得するようにWordPressに指示します。

このコードはページが読み込まれる前にクエリを変更するため、テーマのデフォルトのページネーションは追加コードなしで完全に機能します!WPCodeスイッチをアクティブに切り替え、[スニペットを保存]ボタンをクリックするだけで公開できます。

ステップ3:特定のメタ値でフィルタリングする(オプション)

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

更新されたスニペットは次のようになります。

<?php
add_action( 'pre_get_posts', 'wpb_filter_posts_by_custom_field_value' );

function wpb_filter_posts_by_custom_field_value( $query ) {

    if ( ! is_admin() && $query->is_main_query() && $query->is_home() ) {

        $query->set( 'meta_key', 'color' );
        $query->set( 'meta_value', 'blue' );

    }
}

ステップ4:メタ比較でフィルタリングする(オプション)

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

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

<?php
add_action( 'pre_get_posts', 'wpb_filter_posts_by_meta_compare' );

function wpb_filter_posts_by_meta_compare( $query ) {

    if ( ! is_admin() && $query->is_main_query() && $query->is_home() ) {

        $query->set( 'meta_key', 'color' );
        $query->set( 'meta_value', 'blue' );
        $query->set( 'meta_compare', '!=' );

    }
}

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

公式のWordPress開発者ドキュメントで見つけることができる、他にも多くの比較演算子があります。

ステップ5:複数のカスタムフィールドで投稿をフィルタリングする(meta_query)

複数のカスタムフィールドに基づいて投稿をフィルタリングしたり、条件を組み合わせたり(AND/ORなど)する必要がある、より複雑なシナリオでは、meta_query配列を使用します。

これにより、それぞれ異なるカスタムフィールドまたは値を対象とする条件の配列を定義できます。

たとえば、色が「blue」であり、サイズが「large」である投稿を表示するには、コードは次のようになります。

<?php
add_action( 'pre_get_posts', 'wpb_filter_posts_by_multiple_fields' );

function wpb_filter_posts_by_multiple_fields( $query ) {

    if ( ! is_admin() && $query->is_main_query() && $query->is_home() ) {

        $meta_query = array(
            'relation' => 'AND', // or 'OR'
            array(
                'key'     => 'color',
                'value'   => 'blue',
                'compare' => '=',
            ),
            array(
                'key'     => 'size',
                'value'   => 'large',
                'compare' => '=',
            ),
        );

        $query->set( 'meta_query', $meta_query );

    }
}

このクエリは、カスタムフィールド「color」が「blue」に設定されており、かつカスタムフィールド「size」が「large」に設定されている投稿を取得します。

条件のいずれかに一致する投稿を見つけるには、'relation'パラメータを「OR」に調整できます。

実例:5つ星レビューのみを表示する

WordPressの書籍レビューサイトを運営しており、レビューのスコアを保存するためにstar_ratingというカスタムフィールドを使用しているとします。

このクエリを使用して、ブログのホームページに5つ星評価の投稿のみを表示できます。

<?php
add_action( 'pre_get_posts', 'wpb_show_only_five_star_reviews' );

function wpb_show_only_five_star_reviews( $query ) {

    if ( ! is_admin() && $query->is_main_query() && $query->is_home() ) {

        $query->set( 'meta_key', 'star_rating' );
        $query->set( 'meta_value', '5' );

    }
}

これは、メインフィードに最高の評価のコンテンツのみが表示されるようにしたい場合に非常に役立ちます。

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

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

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

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

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

はい!実際、このチュートリアルで概説しているpre_get_postsメソッドは、テーマファイルを編集する必要がないように特別に設計されています。WPCodeのようなスニペットプラグインを使用すると、テーマのコアコードを一行も変更せずに、このフィルターをサイトに安全に適用できます。

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

できます。pre_get_postsフックは複雑な引数を受け入れます。「meta_query」配列を使用します。これにより、複数のカスタムフィールドを一度に一致させる条件のリストを作成できます。

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

pre_get_postsフックはブロックテーマと技術的に連携できますが、ネイティブのWordPressクエリーループブロックには、標準ではカスタムフィールドフィルタリング用の組み込みインターフェイスがありません。フルサイト編集ブロックテーマを使用している場合は、カスタムPHPを作成するよりも、クエリーループブロックにカスタムフィールドフィルタリングを追加するプラグインを使用するのが最も簡単なアプローチです。

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

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

キーを使用すると、そのカスタムフィールドが添付されている任意の投稿が見つかります。値を使用すると、その特定の情報を持つ投稿のみが見つかるように絞り込まれます。

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

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

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

この記事が気に入った場合は、WordPressのビデオチュートリアルのために、YouTubeチャンネルを購読してください。また、TwitterFacebookでも私たちを見つけることができます。

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

究極のWordPressツールキット

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

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

11 件のコメント返信する

  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’ である必要があります

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

返信する

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