web-dev-qa-db-ja.com

get_posts引数のmeta_queryを比較します。

カスタムフィールドのある投稿を除外したいのですが。 my_custom_field_ignoreが設定されていて1がこの投稿を無視するならば。設定されていない場合はそれを含めてください。

これは私が持っているものです

    $args = array(
        'post_type' => $post_type,
        'offset' => $offset,
        'meta_query' => array(
            array(
                'key' => 'my_custom_field_ignore',
                'value' => '1',
                'compare' => '!=',
            )
        )
    );

これはmy_custom_field_ignore1以外に設定されている投稿に対してのみ機能します。

すべての投稿を含めるにはどうすればよいですか(もちろんmy_custom_field_ignore = 1の投稿を除く)。

編集:

これがWP 3.5以降での機能です。

    'meta_query' => array(
        array(
            'key' => 'my_custom_field_ignore',
            'compare' => 'NOT EXISTS',
        )
    )

この単純なmy_custom_field_ignoreの外観を検索するので、値は無視されます。これは最初の場所ではうまくいく可能性がありますが、10に変更して含めることを期待すると、ユーザーは混乱するかもしれません。

しかし3.3と3.4は何らかの条件付きチェックが必要です。

編集2

チェックされた答えが(少なくとも3.5+のために)トリックをしているようです。何らかの奇妙な理由で、それは最初の投稿 "Hello World"を無視します。 my_custom_field_ignoreを追加し、その後それを削除した後それは働いています

7
Xaver

条件を定義すると、

A: my_custom_field_ignore EXISTS
B: my_custom_field_ignore = 1

NOT ( A && B )は以下と同等です。

NOT ( A ) || NOT ( B )

私達の場合の意味

( my_custom_field_ignore NOT EXISTS ) ||  ( my_custom_field_ignore != 1 ) 

そのため、WP 3.5+(未テスト)について次のことを試すことができます。

 $args = array(
    'post_type'  => $post_type,
    'offset'     => $offset,
    'meta_query' => array(
        'relation' => 'OR',
        array(
            'key'     => 'my_custom_field_ignore',
            'value'   => '1',
            'compare' => '!=',
        ),
        array(
            'key'     => 'my_custom_field_ignore',
            'compare' => 'NOT EXISTS',
            'value'   => '1',     #<-- just some value as a pre 3.9 bugfix (Codex)
        ),
    )
);
9
birgire

整数を使用している場合は、関数serializeを使用する必要があります。

$args = array(
    'meta_query' => array(
        array(
            'key' => 'my_meta_key',
            'value' => serialize(strval($my_vale)),
            'compare' => 'LIKE'
        )
    )
);
$posts = get_posts( $args );

そしてあなたは準備ができています、

print_r($posts); 

結果を見る