Trusted WordPress tutorials, when you need them most.
Beginner’s Guide to WordPress
WPBカップ
25 Million+
Websites using our plugins
16+
Years of WordPress experience
3000+
WordPress tutorials
by experts

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

WordPressの投稿にカスタムフィールドを追加し、そのフィールドを持つ投稿のみを表示したい場合。あるいは、特定のカスタムフィールド値を持つ投稿を一覧表示する特別なページを作ろうとしているかもしれません。あなただけではありません!

ある読者からその方法を尋ねられたので、その答えを皆と共有することは有益だと考えた。

カスタムフィールドを使えば、投稿やページに追加情報を加えることができます。コンテンツを整理したりフィルターをかけたりするのに最適だ。この投稿では、WordPressの投稿が特定のカスタムフィールドを持っている場合のみ表示する方法を紹介します。

How to Display a WordPress Post Only if It Has a Specific Custom Field

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

なぜ特定のカスタムフィールドでWordPress投稿を表示するのか?

WordPressサイトで投稿を作成する際、カスタムフィールドを使って投稿にメタデータを追加することができます。メタデータとは、タイトル、投稿者、公開日などの投稿に関する情報です。

カスタムフィールドはWordPressの高度なコンセプトであり、WordPressでカスタムフィールドを追加する方法はたくさんあります。カスタムフィールドの使い方や表示方法については、投稿日「WordPress Custom Fields 101: Tips, Tricks, and Hacks」に役立つヒントがたくさんあります。

You Can Add Metadata to a Post Using Custom Fields

あるユーザーから、特定のカスタムフィールドが存在する場合のみWordPressの投稿を表示する方法を尋ねられました。これは、特定のカスタムフィールドや値を含む投稿をすべて一覧表示するカスタムページを作成したい場合に便利です。

返信先: WordPress.orgコミュニティが恩恵を受けられるように、他のみんなと共有するのがベストだと思った。

WordPressテーマファイルの編集:留意点

このチュートリアルを正しく進めるために、覚えておいてほしいことがある:

  1. このチュートリアルでは、WordPressテーマファイルをコードで編集することになるので、全くの初心者には不向きです。初めての方は、WordPressでコードをコピー&ペーストする方法のガイドをお読みください。
  2. エラー発生時に本番サイトが影響を受けないように、サイトのバックアップステージング環境の使用をお勧めします。これは、テーマファイルにコードを追加することになり、リスクがあるからです。
  3. WordPressのテンプレート階層がどのように機能しているかを理解し、後でコードを追加する場所を知っておくことをお勧めします。
  4. WordPressのクエリーでこれらのパラメータを呼び出すので、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」を持つ投稿)に基づいて投稿を取得するカスタムクエリー($the_query = new WP_Query('meta_key=color');)を導入しました。

そして、カスタムループ(if ($the_query->have_posts()))を使用して、このカスタマイ・クエリーによって取得された投稿を繰り返し、最初のスニペットと同じ方法で各投稿のコンテンツを表示します。

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

特定の値を持つカスタムフィールドを持つ特定の投稿を表示したい場合は、3行目のクエリーを次のように変更すればよい:

$the_query = new WP_Query( 'meta_value=blue' );

これは、カスタムフィールドに’blue’の値を持つすべての投稿を表示します。

color’フィールドの値が’blue’であることを本当に〜してもよいですか?

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

クエリーで使用できるその他のパラメータについては、WordPressのWP_Queryコードリファレンスページを参照してください。

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

さらに詳しくWordPressサイトをカスタマイズする方法

WordPressのページをカスタマイズする方法は他にもあります:

このチュートリアルで、WordPressの投稿に特定のカスタムフィールドがある場合のみ表示する方法を学んでいただけたと思います。WordPress サイトの編集方法についての完全ガイドや、WordPress 用の最高の Figma プラグインを専門家が選んだ記事もご覧ください。

If you liked this article, then please subscribe to our YouTube Channel for WordPress video tutorials. You can also find us on Twitter and Facebook.

情報開示 私たちのコンテンツは読者支援型です。これは、あなたが私たちのリンクの一部をクリックした場合、私たちはコミッションを得ることができることを意味します。 WPBeginnerの資金源 をご覧ください。3$編集プロセスをご覧ください。

アバター

Editorial Staff at WPBeginner is a team of WordPress experts led by Syed Balkhi with over 16 years of experience in WordPress, Web Hosting, eCommerce, SEO, and Marketing. Started in 2009, WPBeginner is now the largest free WordPress resource site in the industry and is often referred to as the Wikipedia for WordPress.

究極のWordPressツールキット

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

Reader Interactions

12件のコメント返信を残す

  1. Syed Balkhi

    Hey WPBeginner readers,
    Did you know you can win exciting prizes by commenting on WPBeginner?
    Every month, our top blog commenters will win HUGE rewards, including premium WordPress plugin licenses and cash prizes.
    You can get more details about the contest from here.
    Start sharing your thoughts below to stand a chance to win!

  2. ahmed

    i have a question sir if i want to display single post and custom fields then what i should do.
    i dont want to display the post with specific custom fields. i want to display all custom fields of post

  3. Dave101

    Hi, thank for the useful tutorial. I have a question, in a wordpress website i set a meta value named “meta_country” and then i set every post with the country of the article, like “us”, “uk”, “fr”… Now I’m trying to add somewhere in the home of the blog a link that show list of all post with a specific country and a specific tag. For example all “UK” post tagged “APPLE”.
    I don’t understand how to do that, someone could help me?

  4. Максим Каминский

    great thanks, it help wery well!

  5. Eduard Unruh

    omg finally THANKS!

  6. Mario M

    I wasnt able to generate any results unless I included “post_type” parameter into the query.

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

  7. sacha

    Wonderful, just so simple and clean.
    Thank you.

  8. scottlee.me

    @ad Great question! I’m curious too.

  9. ad

    Hi,

    How could I show posts that DON’T have a specific Custom Field? Any idea?

    Thanks!!!

    • tara tin

      as I know from php it must be meta_key!=’your key’

      ;just you need to know that “!” means “not”

  10. brunobruno2

    Beatiful! Many thanks for sharing it. Works like a charm.

返信を残す

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