質問

条件付きロジックを使用して、クエリのカスタムフィールドを比較しようとしていますが、少し立ち往生しています。リリースされたProjectとPermanderArtistのすべての投稿を「True」に設定するにはどうすればよいですか?

これが私がこれまでに持っているものです、私はそれが「比較」と関係があると思います:

ありがとう

OSU

編集: :私がやりたいことを明確にするために - 私は「False」に設定されている2つのカスタムフィールド値(この場合はPranderantistと永続主義者)を持つページを除外しようとしています。これらは、プラグインカスタムフィールドテンプレートを使用して生成されたチェックボックスを介して設定されます。

コードを更新して、これらの2つのカスタムフィールドをfalseに設定してすべてのページをフィルタリングする必要があることを説明しました。

global $post;
$artist_args = array(
    'post_type' => 'page',
    'post_parent' => $post->ID,
    'posts_per_page' => -1,
    'orderby' => 'name',
    'order' => 'ASC',
    'meta_query' => array(
        array(
            'key' => 'ReleasedProject',
            'value' => 'false'
        ),
        array(
            'key' => 'PermanentArtist',
            'value' => 'false'
        )
    )
);
$my_query = new WP_Query($artist_args);
役に立ちましたか?

解決

すべての投稿が必要な場合 ReleasedProjectPermanentArtist どちらもtrueに設定されているので、変更する必要があります value それらの両方のためのキー 'true'. 。それらの両方が設定されているすべての投稿を除外したい場合 'false', 、追加する必要があります 'compare' => '!=' 両方のメタクエリアレイに。

編集

メタクエリの背後にあるロジックは、すべての条件を満たす必要があるようなものです(それは AND 関係)。だからあなたが言うなら

'meta_query' => array(
    array(
        'key' => 'ReleasedProject',
        'value' => 'false'
    ),
    array(
        'key' => 'PermanentArtist',
        'value' => 'false'
    )
)

つまり、「両方ともリリースされたすべての投稿を同一にリリースしたすべての投稿を見つける 'false' と同一の永続的なアーティスト 'false'。 "追加する場合 'compare' => '!=' 前述したように、「両方ともリリースされたプロジェクトが同一ではないすべての投稿を見つける」と言っているでしょう。 'false' と同一ではない常設のアーティスト 'false'。 "プロジェクトセットをリリースした投稿がある場合 'false' に設定された常設のアーティスト 'true', 、これらのクエリのどちらにも表示されません。

さらに、メタ値が欠落している場合、結果にも表示されません。したがって、リリースされたプロジェクトがTrueに設定された投稿があり、永続的なアーティストがまったく設定されていない場合、このメタクエリはその投稿を見つけられません。

'meta_query' => array(
    array(
        'key' => 'ReleasedProject',
        'value' => 'false',
        'compare' => '!='
    ),
    array(
        'key' => 'PermanentArtist',
        'value' => 'false'
        'compare' => '!='
    )
)

基本的に、メタクエリは、複数のメタクエリがある場合、「/または「チェック」を実行しません/'の両方と'チェックも行います。

ライセンス: CC-BY-SA帰属
所属していません wordpress.stackexchange
scroll top