Intereting Posts
Получить следующую и предыдущую страницу с разбивкой по страницам Текстовый виджет для отображения полей базы данных на основе сообщений Как загружать style.css в тему? Как отключить JS? информационные окна от WP-FirePHP если post id соответствует этим id, тогда сделайте это Повышение производительности реляционной базы данных Контактная форма 7 Данные как приложение Добавить галерею изображений в пользовательский тип сообщения? Как установить пользовательский репозиторий обновлений WordPress? Как хранить или кэшировать пользовательские данные корзины покупок для сеанса каждого пользователя Редактирование темы и перемещаемых серверов Отключить разбиение на страницы в столбце извлекать мета-ключ при использовании флажка Как сделать поиск по умолчанию WordPress для поиска в woocommerce wp_list_pages – Использование Walker для настройки порядка вывода

is_search был вызван неправильно

Я создал форму поиска, которая ищет по категориям фильтр и ввод ключевых слов. Код формы поиска находится здесь:

<form action="<?php bloginfo('url'); ?>" method="get" role="search" class="dropdown-form"> <div class="input-group"> <span class="input-group-addon"> <?php wp_dropdown_categories(array( 'show_option_all' => 'all categories', 'class' => 'search_cats' )); ?> </span> <input type="search" class="form-control" placeholder="<?php esc_html_e('Search anything...', 'onepro'); ?>" name="s"> <span class="input-group-addon"> <button type="submit"><i class="ion-android-arrow-forward"></i></button> </span> </div> </form> 

Затем я добавил крюк pre_get_posts к нижней части pre_get_posts functions.php

 add_action('pre_get_posts', function() { global $wp_query; if (is_search()) { $cat = intval($_GET['cat']); $cat = ($cat > 0) ? $cat : ''; $wp_query->query_vars['cat'] = $cat; } }); 

Форма поиска также работает. Но появляется следующее сообщение о том, где я использовал WP_Query() для отображения категорий сообщений –

Обратите внимание: is_search был вызван неправильно. Условные теги запроса не работают до запуска запроса. До этого они всегда возвращают false. Дополнительную информацию см. В разделе «Отладка в WordPress». (Это сообщение было добавлено в версии 3.1.0.) В C: \ xampp \ htdocs \ onepro \ wp-includes \ functions.php в строке 3996

Вот код запроса –

  global $wp_query; global $paged; $temp = $wp_query; $wp_query = null; $wp_query = new WP_Query(array( 'post_type' => 'post', 'posts_per_page' => $atts['show_posts'], 'paged' => $paged, )); if ( $wp_query->have_posts() ) : $all_cat_slug = array(); while ( $wp_query->have_posts() ) : $wp_query->the_post(); $category = get_the_category(); foreach( $category as $cat ){ array_push($all_cat_slug, $cat->slug); } endwhile; $all_cat_slug = array_unique( $all_cat_slug ); endif; <!--Portfolio Filter--> <div class="row filters_row text-left"> <ul class="nav navbar-nav" id="blogs_filters"> <li data-filter="*" class="active"><?php echo esc_html__('all', 'onepro-essential'); ?></li> <?php foreach( $all_cat_slug as $cs ){ $catname = get_category_by_slug( $cs ); echo '<li data-filter=".category-'. $cs .'">'. $catname->name .'</li>'; } ?> </ul> </div> 

Уведомление об ошибке происходит до показанных категорий. Скриншот error- введите описание изображения здесь Как я могу исправить эту проблему?

Solutions Collecting From Web of "is_search был вызван неправильно"

Часть Почему

В основной функции is_search() есть проверка, если установлен глобальный $wp_query :

 global $wp_query; if ( ! isset( $wp_query ) ) { _doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' ); return false; } 

Обратите внимание, что вы отключите его:

 $wp_query = null; 

перед созданием нового подзапроса WP_Query , который вызывает is_search() когда срабатывает pre_get_posts .

Вот когда _doing_it_wrong() .

Временное решение

Всегда старайтесь использовать основной запрос вместо дополнительных WP_Query если это возможно, чтобы избежать запуска дополнительных запросов к базе данных.

Чтобы настроить основной запрос на поиск в интерфейсе, мы можем использовать:

 add_action('pre_get_posts', function( \WP_Query $q ) { if ( ! is_admin() // Only target the front-end && $q->is_main_query() // Target the main query && $q->is_search() // Target a search query ) { // do stuff } });