質問: query_posts( array( 'post_type' => 'event_id', 'meta_query' => array( 'relation' => 'and', array( 'relation' => 'or', array( 'key' => 'primary_user_id', 'value' => $user_id ), array( 'key' => 'secondary_user_id', 'value' => $user_id ) ), array( 'key' => 'date', 'value' => array( $start_date, $end_date ), 'type' => 'datetime', 'compare' => 'between' ) ) ) ); 参考文献: wp_queryカスタムフィールドパラメータ - 複数のカスタムフィールド処理 複数の分類法を照会して投稿数を表示 ショートコード内のカスタムループでナビゲーションはどのように機能しますか。
回答: それは不可能のようです。私が間違っているなら誰かが私を直してください。meta_queryパラメータは実際にはwp_meta_queryオブジェクトに変換されます、そしてrelation検証は wp-includes/meta.php の中でさらに深くなることはなく、トップレベルで一度だけ起こります:if ( isset( $meta_query['relation'] ) && strtoupper( $meta_query['relation'] ) == 'or' ) { $this->relation = 'or'; } else { $this->relation = 'and'; } これに対する可能な解決策は、このクエリに対してあなた自身のjoinを構築することです。$query = new wp_query( array( ... 'my_meta_query' => true, 'suppress_filters' => false ) ); add_filter( 'posts_join', 'my_meta_query_posts_join', 10, 2 ); function my_meta_query_posts_join( $join, $query ) { if ( empty( $query->query_vars['my_meta_query'] ) ) return $join; global $wpdb; $new_join = " inner join {$wpdb->postmeta} pm1 on 1=1 and pm1.post_id = {$wpdb->posts}.id and pm1.meta_key = '_some_meta_key' and pm1.meta_value = 'some_value' "; return $join . ' ' . $new_join; } さらに検証と規則が必要な場合は、posts_whereフィルタも使用できます。