uginroot
Ответы в темах
-
В итоге сделал дополнительную проверку на то что запрос выполняется через AJAX:
($query->is_home() && $query->is_main_query()) || (defined('DOING_AJAX') && DOING_AJAX)
печально…
К сожалению не вышло,
$wp_query->query_vars
это пустой массивВот так сработало на локальном сервере:
global $wp_the_query; // это типо $wp_the_query = $loop = new WP_Query($args); wp($loop);
Вот кусочки кода из wordpress что-бы понять что я делаю:
//./wp-includes/query.php:4765 public function is_main_query() { global $wp_the_query; return $wp_the_query === $this; }
//./wp-includes/functions.php:961 function wp( $query_vars = '' ) { global $wp, $wp_query, $wp_the_query; $wp->main( $query_vars ); if ( !isset($wp_the_query) ) $wp_the_query = $wp_query; }
Но на продакшене этот же код генерирует ошибку:
PHP Catchable fatal error: Object of class WP_Query could not be converted to string in /public_html/wp-includes/class-wp.php on line 166
Это один из фильтров, там их несколько и их тогда придётся собирать по всем плагинам которые установлены в этой теме. + исключаемые категории устанавливаются через настройки темы и их в любой момент могут поменять.
Тут прибавляются новые условия к уже существующим:
$query->tax_query->queries[] = $tax_query; $query->query_vars['tax_query'] = $query->tax_query->queries;
Неужели нельзя сделать что-то типо
$wp_query->is_home(true); $loop->is_main_query(true)
Сам wordpress ведь как-то устанавливает эти параметры. Осталось только выяснить как он это делает.