Вопрос или проблема
ИЗМЕНЕНИЕ: Я провел некоторую диагностику, и, похоже, моя тема не отображает результаты поиска WooCommerce. Тема 2017 года делает это, поэтому я пытаюсь выяснить, чего не хватает в моей теме. Я подозреваю, что что-то в файле functions.php
. Это что-то, что я упускаю, а не то, что я включил и что мешает, потому что я удалил весь мой код из файла функций построчно, и ничего не изменилось.
У меня есть немного пользовательского кода, который я использовал в других местах без проблем. Я попытался просто скопировать его в свою новую тему, и по какой-то причине это не сработало. Результаты поиска показывают 1-10 из 54, но на первой странице отображается только четыре результата. Остальные страницы ничего не показывают. Я не могу понять, что я мог сделать не так.
В functions.php
:
function wpse_106121_posts_count( $wp_query = null ) {
if ( ! $wp_query )
global $wp_query;
$posts = min( ( int ) $wp_query->get( 'posts_per_page' ), $wp_query->found_posts );
$paged = max( ( int ) $wp_query->get( 'paged' ), 1 );
$count = ( $paged - 1 ) * $posts;
printf(
'%d - %d из %d',
$count + 1,
$count + $wp_query->post_count,
$wp_query->found_posts
);
}
В search.php
:
<?php if ( have_posts() ) : ?>
<p><?php wpse_106121_posts_count() ?></p>
<?php while ( have_posts() ) : the_post();
if ( '' !== get_post()->post_content ) : ?>
<h3><a href="https://wordpress.stackexchange.com/questions/256783/<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
<?php the_excerpt(); ?>
<p><a href="https://wordpress.stackexchange.com/questions/256783/<?php the_permalink(); ?>">Читать далее</a></p>
<hr class="divider">
<?php endif; endwhile; else : ?>
<p>Записей не найдено.</p>
<?php endif; ?>
<div class="navigation"><?php
global $wp_query;
$big = 99999;
$translated = __( '', 'themename' );
echo paginate_links( array(
'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
'format' => '?paged=%#%',
'current' => max( 1, get_query_var('paged') ),
'total' => $wp_query->max_num_pages,
'next_text' => __('ДАЛЕЕ >'),
'prev_text' => __('< НАЗАД'),
) );
?></div>
Оказалось, что у меня было лишнее условие if в файле search.php
, которое фильтровало контент, не содержащий подходящей выдержки.
Ответ или решение
Проблема, с которой вы столкнулись, связана с тем, что ваш текущий Wаrdpress-тема не отображает результаты поиска WooCommerce так, как это делает стандартная тема, например, 2017. Судя по вашему описанию, вы уже провели некоторые проверки и отметили, что проблема, вероятно, кроется в вашем файле functions.php
или search.php
. Давайте рассмотрим возможные причины и решения данной проблемы более подробно.
Потенциальные причины проблемы
-
Ошибка в условии цикла:
В вашем коде вsearch.php
присутствует условие, которое проверяет, чтоpost_content
не пустой:if ( '' !== get_post()->post_content ) :
Это условие может фильтровать результаты поиска, которые не имеют содержимого (например, если у товара нет описания). Из-за этого вы можете увидеть меньше результатов, чем ожидаете.
-
Отсутствие экрана для отображения результатов:
Убедитесь, что ваш сайт корректно настроен для отображения всех типов постов, связанных с WooCommerce, и чтоquery
правильно возвращает нужные элементы. Это может потребовать добавления или корректировки параметров WP_Query. -
Ошибки в пагинации:
Ваш код для пагинации выглядит корректным; однако, необходимо убедиться, что значениеmax_num_pages
установлено правильно. Если в результате фильтрации остается меньше страниц, чем необходимо, это может привести к неправильному выводу.
Рекомендации по решению проблемы
-
Корректировка условия отображения постов:
Замените текущее условие для проверки содержимого на следующее:if ( have_posts() ) :
Это позволит вам отобразить все результаты поиска, независимо от наличия содержимого в них.
-
Проверка параметров WP_Query:
Обратите внимание на параметры вашего запроса. Возможно, стоит создать собственный запрос, чтобы убедиться, что товары WooCommerce включены в результаты. Например:function custom_search_query( $query ) { if ( $query->is_search && !is_admin() ) { $query->set('post_type', array('post', 'product')); } return $query; } add_filter('pre_get_posts', 'custom_search_query');
Этот код установит правильные типы постов для запроса поиска. Убедитесь также, что WooCommerce активен и правильно настроен.
-
Тестирование на другом шаблоне:
Как вы уже отметили, при использовании темы 2017 результаты поиска выводятся правильно. Это хороший индикатор того, что проблема, скорее всего, в вашей пользовательской теме. Если после исправления проблема не исчезнет, рассмотрите возможность тестирования с другим пользовательским шаблоном или временно используйте стандартную тему для дальнейшего отладки.
Итог
Судя по вашему описанию, добавление проверки на наличие пустых значений в post_content
в search.php
является основной причиной вашего текущего затруднения. Убедитесь, что результат запроса правильно формирует данные и отображает все подходящие посты. После внесения этих изменений, протестируйте функциональность поиска повторно и, вероятно, вы увидите, что проблема решена.
Если у вас возникнут дополнительные вопросы или сложности, не стесняйтесь обращаться за помощью. Удачи в решении вашей проблемы!