【WordPress】カスタムフィールドに値が入っていない記事を取得する方法

WordPressサイトを運営している際、時には特定のカスタムフィールドに値が入っていない記事を見つけたいことがあります。例えば、特定の情報が未入力の記事を特定して修正するために役立ちます。今回は、そのようなニーズに応えるために、WordPressのWP_Queryを使用してカスタムフィールドが空である記事を取得する方法を紹介します。

スポンサーリンク

WP_Query を使用して記事を取得する

まず最初に、WP_Queryを使用して記事を取得する基本的なステップを行います。以下のサンプルコードでは、投稿タイプが「post」で、すべての投稿を取得しています。

$args = array(
    'post_type'      => 'post',
    'posts_per_page' => -1,
);

$query = new WP_Query( $args );

meta_query を使用してカスタムフィールドが空である記事を取得する

次に、meta_queryパラメータを使用してカスタムフィールドが特定の値を持っていない記事を絞り込みます。以下のサンプルコードでは、custom_field_nameを実際のカスタムフィールドの名前に変更し、compareパラメータを「NOT EXISTS」に設定しています。

$args['meta_query'] = array(
    array(
        'key'     => 'custom_field_name',
        'compare' => 'NOT EXISTS',
    ),
);

$query = new WP_Query( $args );

結果を処理する

最後に、取得した記事を処理するためのコードを追加します。取得した記事があれば、その記事に対して必要な処理を行います。

if ( $query->have_posts() ) {
    while ( $query->have_posts() ) {
        $query->the_post();
        // ここで記事に対する処理を行う
        // the_title(), the_content(), などを使用
    }
    wp_reset_postdata();
} else {
    // 該当する記事がない場合の処理
}

最終的なコード

<?php
// WP_Queryを使用して記事を取得
$args = array(
    'post_type'      => 'post',
    'posts_per_page' => -1,
    'meta_query'     => array(
        array(
            'key'     => 'custom_field_name',
            'compare' => 'NOT EXISTS',
        ),
    ),
);

$query = new WP_Query( $args );

// 取得した記事を処理
if ( $query->have_posts() ) {
    while ( $query->have_posts() ) {
        $query->the_post();
        // ここで記事に対する処理を行う
        // the_title(), the_content(), などを使用
    }
    wp_reset_postdata();
} else {
    // 該当する記事がない場合の処理
    echo '該当する記事はありません。';
}
?>

このコードでは、custom_field_name の部分を実際のカスタムフィールドの名前に変更してください。また、取得した記事に対する処理部分には、具体的な操作や表示内容を追加してください。

よくある質問(FAQ)

Q. カスタムフィールドが空の記事をWP_Queryで取得するには?
A. meta_queryのcompareパラメーターに’NOT EXISTS’または’=’を指定し、valueに空文字を渡します。NOT EXISTSはキー自体がない場合、’=’はキーはあるが値が空の場合に対応します。
Q. カスタムフィールドの値が空かチェックするPHPコードは?
A. get_post_meta($post_id, ‘フィールドキー’, true)で値を取得し、empty()関数で空チェックします。空文字・0・null・falseなどもempty()でtrueになるため注意が必要です。
Q. カスタムフィールドに値がある記事とない記事で表示を分けたいです
A. ループ内でget_post_meta()で値を取得し、empty()で分岐します。またはWP_Queryのmeta_queryでcompare=’EXISTS’とcompare=’NOT EXISTS’のrelation=’OR’クエリで一度に取得することも可能です。

まとめ

これで、カスタムフィールドに値が入っていない記事を取得するための基本的なスクリプトが完成しました。必要に応じて、これをテーマのテンプレートファイルやプラグインに組み込み、サイト管理をスムーズに行いましょう。