web関連

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

2020/10/15

カスタムフィールドの値が入ってる記事の出力周り調べてたら、値が入ってない記事を取得する方法が出てきたのでせっかくだから備忘録

カスタムフィールドの値が入ってない記事の出力方法

'compare' => 'NOT EXISTS'を使えばカスタムフィールドで値が入ってない記事を見つけることができるというので使ってみた
※カスタム投稿「study」のカスタムフィールドキー「article_link」の例

$posts = get_posts(
    array(
        'post_type' => 'study',
        'posts_per_page' => -1,
        'meta_query' => array(
            array(
                'key' => 'article_link',
                'compare' => 'NOT EXISTS',
            )
        )
    )
);

foreach( $posts as $post ) {
    the_title();
    echo "<br>";
}

結果なんだけど、'compare' => 'NOT EXISTS'は値が入ってない記事じゃなくてカスタムフィールド自体がDBに登録されてない記事を出力するみたい

どいういことかというと、途中でカスタムフィールドを追加した場合にそれ以前の記事って値どころか追加したカスタムフィールド自体がDB上で記事に紐づいてなくて、そういう記事を表示するためのものみたい

そういえば記事を更新しないと追加したカスタムフィールドを認識してくれなくて悩んだ経験あるわ

だから、シンプルにカスタムフィールドの値が空の記事を出力をしたかったら
'value' => ''に変えればok

$posts = get_posts(
    array(
        'post_type' => 'study',
        'posts_per_page' => -1,
        'meta_query' => array(
            array(
                'key' => 'article_link',
                'value' => '',
            )
        )
    )
);

カスタムフィールドの値が入ってる記事を出力する方法

さっきのコードに一行足すだけど、僕的にこっちをメインで調べてたので貼っとく

$posts = get_posts(
    array(
        'post_type' => 'study',
        'posts_per_page' => -1,
        'meta_query' => array(
            array(
                'key' => 'article_link',
                'value' => '',
                'compare' => '!='
            )
        )
    )
);

foreach( $posts as $post ) {
    the_title();
    // カスタムフィールドの値を取得
    echo get_post_meta($post->ID, 'article_link', true);
    echo "<br>";
}

'compare' => '!='を足して空じゃない時って条件をつけるだけ
簡単だね

$wpdbを使って直接データベースから取得することも考えたんだけどなんかややこしかった、後でやるかな

おまけ:meta_queryを使わない書き方

meta_query使わないでキーを直接指定もできるんすね
meta_queryは複数のカスタムフィールドを扱ったりするときに使ったりするみたい

$posts = get_posts(
    array(
        'post_type' => 'study',
        'posts_per_page' => -1,
        'meta_key' => 'article_link',
        'meta_value' => '',
        'meta_compare' => '!='
    )
);

って使ってみたんだけど、値を消して空にしたカスタムフィールドの記事も引っかかるわ、これ
‘空の値’が入ってるとか思われてんかな?

meta_query使ったほうがいいね

原因は謎、疲れた

今週は仕事の周りの勉強が捗る捗る
人間嫌なことがあると楽な方に逃げるね