Вопрос: WP_Query не работает с фиксированными post_id и term_taxonomy

Я не знаю почему, но WP_Query не работает с фиксированными post_id и term_taxonomy. У меня есть WP_Query, который работает без фиксированного идентификатора записи ( 'p' = & gt; 251 )

Но он не "читает" tax_query, когда установлен post_id .

Запрос:

$args = array(        'tax_query' => array(            array(                'taxonomy' => 'category',                'terms'    => '11',                'field'    => 'term_id'            ),        ),        'p' => 231,        'post_type' => 'events',        'post_status' => 'publish',        'posts_per_page' => -1,        'orderby' => 'id',        'order'   => 'DESC',        'meta_query' => array(            array(                'key' => 'date',                'value' => $date_from,                'compare' => '>='            ),            array(                'key' => 'date',                'value' => $date_till,                'compare' => '<='            )        )    );

Код SQL без post_id:

SELECT wp_posts.* FROM wp_posts LEFT JOIN wp_term_relationships ON (wp_posts.ID = wp_term_relationships.object_id) INNER JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) INNER JOIN wp_postmeta AS mt1 ON ( wp_posts.ID = mt1.post_id ) WHERE 1=1 AND ( wp_term_relationships.term_taxonomy_id IN (12) ) AND ( ( wp_postmeta.meta_key = 'date' AND wp_postmeta.meta_value >= '0' ) AND ( mt1.meta_key = 'date' AND mt1.meta_value <= 'null' ) ) AND wp_posts.post_type = 'events' AND ((wp_posts.post_status = 'publish')) GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC 

И код SQL с post_id:

SELECT wp_posts.* FROM wp_posts INNER JOIN wp_postmeta ON ( wp_posts.ID = wp_postmeta.post_id ) INNER JOIN wp_postmeta AS mt1 ON ( wp_posts.ID = mt1.post_id ) WHERE 1=1 AND wp_posts.ID = 231 AND ( ( wp_postmeta.meta_key = 'date' AND wp_postmeta.meta_value >= '0' ) AND ( mt1.meta_key = 'date' AND mt1.meta_value <= 'null' ) ) AND wp_posts.post_type = 'events' AND ((wp_posts.post_status = 'publish')) GROUP BY wp_posts.ID ORDER BY wp_posts.post_date DESC

Я трачу часов, чтобы решить эту проблему, но я пока не могу найти решение ...

РЕДАКТИРОВАТЬ : Боже мой, я нашел решение!

$args = array(        'tax_query' => array(            array(                'taxonomy' => 'category',                'terms'    => '11',                'field'    => 'term_id'            ),        ),        'post__in' => array(231), //instead of 'p'        'post_type' => 'events',        'post_status' => 'publish',        'posts_per_page' => -1,        'orderby' => 'id',        'order'   => 'DESC',        'meta_query' => array(            array(                'key' => 'date',                'value' => $date_from,                'compare' => '>='            ),            array(                'key' => 'date',                'value' => $date_till,                'compare' => '<='            )        )    );

Ответы и комментарии:

Пожалуйста, опубликуйте свое решение в качестве ответа и примите его как правильное, а не вставляйте его в свой вопрос, так как это сохраняет формат сайта аккуратным. Благодарю.
Создан 14-10-2016 10:32 Andy Macaulay-Brook

Зачем использовать сложный WP_Query, если вы уже знаете post_id? Почему бы не получить get_post ($ post_id) для получения объекта post?
Создан 14-10-2016 10:20 birgire

Это всего лишь пример. :) Post_id идет через ajax-запрос на живом сайте.
Создан 14-10-2016 01:48 Joci93

Поведение, которое вы описали, заключается в том, как WordPress работает по проекту: если вы предоставляете параметр 'p', тогда 'tax_query' игнорируется, смотрите внутри этого правила в wp-includes / query.php: L1643, здесь 'tax_query' обрабатываются и добавляются в оператор SQL, и это происходит только в том случае, если это пропущено (строка 1634).
Создан 14-10-2016 09:55 Nabil Kadimi1,90911425