Поиск не показывает все результаты

Вопрос или проблема

ИЗМЕНЕНИЕ: Я провел некоторую диагностику, и, похоже, моя тема не отображает результаты поиска 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. Давайте рассмотрим возможные причины и решения данной проблемы более подробно.

Потенциальные причины проблемы

  1. Ошибка в условии цикла:
    В вашем коде в search.php присутствует условие, которое проверяет, что post_content не пустой:

    if ( '' !== get_post()->post_content ) :

    Это условие может фильтровать результаты поиска, которые не имеют содержимого (например, если у товара нет описания). Из-за этого вы можете увидеть меньше результатов, чем ожидаете.

  2. Отсутствие экрана для отображения результатов:
    Убедитесь, что ваш сайт корректно настроен для отображения всех типов постов, связанных с WooCommerce, и что query правильно возвращает нужные элементы. Это может потребовать добавления или корректировки параметров WP_Query.

  3. Ошибки в пагинации:
    Ваш код для пагинации выглядит корректным; однако, необходимо убедиться, что значение max_num_pages установлено правильно. Если в результате фильтрации остается меньше страниц, чем необходимо, это может привести к неправильному выводу.

Рекомендации по решению проблемы

  1. Корректировка условия отображения постов:
    Замените текущее условие для проверки содержимого на следующее:

    if ( have_posts() ) :

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

  2. Проверка параметров 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 активен и правильно настроен.

  3. Тестирование на другом шаблоне:
    Как вы уже отметили, при использовании темы 2017 результаты поиска выводятся правильно. Это хороший индикатор того, что проблема, скорее всего, в вашей пользовательской теме. Если после исправления проблема не исчезнет, рассмотрите возможность тестирования с другим пользовательским шаблоном или временно используйте стандартную тему для дальнейшего отладки.

Итог

Судя по вашему описанию, добавление проверки на наличие пустых значений в post_content в search.php является основной причиной вашего текущего затруднения. Убедитесь, что результат запроса правильно формирует данные и отображает все подходящие посты. После внесения этих изменений, протестируйте функциональность поиска повторно и, вероятно, вы увидите, что проблема решена.

Если у вас возникнут дополнительные вопросы или сложности, не стесняйтесь обращаться за помощью. Удачи в решении вашей проблемы!

Оцените материал
Добавить комментарий

Капча загружается...