WordPressカスタム投稿タイプのフィールドに値が入っていない記事は取得しない方法

wordpressでカスタム投稿タイプのあるフィールドに値が入っていない(入力していない)ものは

出力の対象外にしたい!!

と思いましたがなかなかやり方がわからず。

やり方を二つ見つけたので、記事にしました。

フィールドの値が数値だった場合

 <?php
  $args = array(
      'posts_per_page' => 3,
      'meta_key' => 'test_flg',
      'meta_value'=> 0,
        'meta_compare'=>'>',
        'orderby' => 'meta_value_num',
      'order' => 'ASC',
        'post_type' => 'test',
        'post_status' => 'publish'
    );
    $posts_array = get_posts( $args );
?>

赤字のところが大切ですね。

フィールドの値が0以上の場合出力する。という処理にしました。

これにより値が入っていない箇所は出力対象外になるるようです。

ただ、test_flgに0や、-1などを入れ込むパターンがある場合はそれも取得対象外になってしまいます。

フィールドの値が文字列(数値でも可能)だった場合

どうやら、ワードプレスのフィールドに何も入力しない場合

半角スペースが入り込むらしく

(Nullが入っていると思っていましたが、半角スペースでした)

半角スペース意外のものを取得すれば、

フィールドに値が入っていないもの以外のものが取得できます。

 <?php
  $args = array(
      'posts_per_page' => 3,
      'meta_key' => 'test_flg',
      'meta_value'=> ' ',
      'meta_compare'=>'!=',
        'post_type' => 'test',
        'post_status' => 'publish'
    );
    $posts_array = get_posts( $args );
?>

‘meta_value’=> ‘ ‘,

の値は半角スペースを入れないとうまく行かないため

‘(半角スペース)’,というように半角スペースをしっかり入れましょう。

これにより、フィールドの値が数値でないものでも

フィールドに値が入っていないものを除いて

取得できます。

ということで、こんな感じで作成して

必要な記事だけ取得できました。

タイトルとURLをコピーしました