web-dev-qa-db-ja.com

AND&ORを使用したメタクエリー

私はWP_Queryでいくつかの投稿のためにいくつかのフィルタリングをやろうとしています、しかし私は正しい状態を得るように思えません。基本的に私がやりたいのは、カスタムフィールドevent_data(このフィールドでソート)を持つ投稿を取得し、これらの投稿の中からevent_doc1event_doc2event_doc3main_docで埋められた投稿のみを選択することです。

コードは以下の通りです。

$metaCondition = array(
            'relation' => 'OR',
            array(
                'key' => 'main_doc',
                'value' => 0,
                'compare' => '!=',
                'type' => 'NUMBER'
            ),
            array(
                'key' => 'event_doc1',
                'value' => 0,
                'compare' => '!=',
                'type' => 'NUMBER'
            ),
            array(
                'key' => 'event_doc2',
                'value' => 0,
                'compare' => '!=',
                'type' => 'NUMBER'
            ),
            array(
                'key' => 'event_doc3',
                'value' => 0,
                'compare' => '!=',
                'type' => 'NUMBER'
            )
        );

        $query = array(
            'numberposts' => 4, 
            'orderby' => 'meta_value',
            'meta_key' => 'event_data', 
            'order' => 'ASC', 
            'meta_query' => $metaCondition
        );

Everoneに感謝します。

5
Olsi

申し訳ありませんが、そのようには動作しません。 「単純な」メタパラメータは全体としてmeta_queryの一部に変換されます。したがって、それは別のことではなく、あなたのOR関係も同様に当てはまります。

したがって、通常のクエリシステムでは、クエリを実行することはできません。AndとORを混在させる必要があるからです(event_dataと他の多数のORとの間にORを含む項目が必要です)。

カスタムSQLに頼るか、デザインを再考する必要があります。

7
Otto