Уберите нумерацию страниц, если поиск не дает результатов.

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

Я внес исправление, что когда строка поиска пуста, она возвращает ‘Нет результатов’, вместо всех постов, но пагинация все еще отображается. Кто-нибудь знает, как это исправить?

Мой код search.php:

<div class="wrapper" id="search-wrapper">
<div class="<?php echo esc_attr( $container ); ?>" id="content" tabindex="-1">
    <div class="row">
        <main class="container" id="main">
            <?php if (have_posts() && strlen( trim(get_search_query()) ) != 0 ) : while (have_posts()) : the_post(); ?>
            <header class="page-header">
                <div class="container">
                    <div class="row">
                        <div class="col-sm-12 text-center">
                            <div class="">
                                <h1>Результаты поиска для: 
                                    <?php   
                                    printf(
                                        /* translators: %s: query term */
                                        esc_html__( ' %s', 'understrap' ),
                                        '<span>' . get_search_query() . '</span>'
                                    );
                                    ?>
                                </h1>
                            </div>
                        </div>
                    </div>
            </header>
            <div>
                <h4>
                    <?php /* Начинаем цикл */ ?>
                    <?php get_template_part( 'loop-templates/content', 'search' ); ?>
                </h4>
            </div>
            <?php endwhile; else:?>
                <div class="container whitespace">
                    <div class="row">
                        <div class="col-lg-12 text-center">
                            <p class="display-4">Нет Результатов..</p>
                        </div>
                    </div>
                </div>
            <?php endif; ?>
        </main>

        <!-- Компонент пагинации -->
        <div class="container">
            <div class="row mt-3">
                <?php understrap_pagination(); ?>
            </div>
        </div>
    </div>
</div>

Мой код в functions.php:

    function SearchFilter($query) {
    // Если переменная запроса 's' задана, но пуста
    if (isset($_GET['s']) && empty($_GET['s']) && $query->is_main_query()){
        $query->is_search = true;
        $query->is_home = false;
    }
    return $query;}
add_filter('pre_get_posts','SearchFilter');

добавьте этот код в ваш search.php

<?php 
$show_pagination = true;
if($wp_query->post_count < 0) {
    $show_pagination = false;
}
?>

<?php if($show_pagination){ ?>
    <!-- Компонент пагинации -->
            <div class="container">
                <div class="row mt-3">
                    <?php understrap_pagination(); ?>
                </div>
            </div>
<?php } ?>

Так что ваш search.php будет выглядеть так :

<div class="wrapper" id="search-wrapper">
<div class="<?php echo esc_attr( $container ); ?>" id="content" tabindex="-1">
    <div class="row">
        <main class="container" id="main">
            <?php if (have_posts() && strlen( trim(get_search_query()) ) != 0 ) : while (have_posts()) : the_post(); ?>
            <header class="page-header">
                <div class="container">
                    <div class="row">
                        <div class="col-sm-12 text-center">
                            <div class="">
                                <h1>Результаты поиска для: 
                                    <?php   
                                    printf(
                                        /* translators: %s: query term */
                                        esc_html__( ' %s', 'understrap' ),
                                        '<span>' . get_search_query() . '</span>'
                                    );
                                    ?>
                                </h1>
                            </div>
                        </div>
                    </div>
            </header>
            <div>
                <h4>
                    <?php /* Начинаем цикл */ ?>
                    <?php get_template_part( 'loop-templates/content', 'search' ); ?>
                </h4>
            </div>
            <?php endwhile; else:?>
                <div class="container whitespace">
                    <div class="row">
                        <div class="col-lg-12 text-center">
                            <p class="display-4">Нет Результатов..</p>
                        </div>
                    </div>
                </div>
            <?php endif; ?>
        </main>

        <?php 
       $show_pagination = true;
       if($wp_query->post_count < 0) {
            $show_pagination = false;
       }
      ?>
     <?php if($show_pagination){ ?>
       <!-- Компонент пагинации -->
        <div class="container">
            <div class="row mt-3">
                <?php understrap_pagination(); ?>
            </div>
        </div>
      <?php } ?>
    </div>
</div>

Сообщите мне, если это вам поможет!

Ответ или решение

Для решения проблемы отображения постраничной навигации при отсутствии результатов поиска, необходимо внести некоторые изменения в код вашего файла search.php. В частности, вы уже исправили условие, чтобы при пустом запросе выводилось сообщение «Нет результатов», но теперь параграф с пагинацией продолжает отображаться. Рассмотрим, как правильно убрать пагинацию в случае пустого результата поиска.

Шаги по изменению кода:

  1. Определение условия для отображения пагинации:
    Нам нужно добавить проверку, которая определяет, есть ли результаты в текущем поисковом запросе. Если результатов нет (то есть какой-либо контент не был найден), тогда блок пагинации не нужно показывать.

  2. Изменение существующего кода:
    Пожалуйста, обновите ваш код в search.php, следуя приведённому ниже примеру:

<div class="wrapper" id="search-wrapper">
    <div class="<?php echo esc_attr( $container ); ?>" id="content" tabindex="-1">
        <div class="row">
            <main class="container" id="main">
                <?php if (have_posts() && strlen( trim(get_search_query()) ) != 0) : ?>
                    <header class="page-header">
                        <div class="container">
                            <div class="row">
                                <div class="col-sm-12 text-center">
                                    <div class="">
                                        <h1>
                                            Записи по запросу: 
                                            <?php printf( esc_html__( ' %s', 'understrap' ), '<span>' . get_search_query() . '</span>' ); ?>
                                        </h1>
                                    </div>
                                </div>
                            </div>
                        </div>
                    </header>
                    <div>
                        <h4>
                            <?php get_template_part( 'loop-templates/content', 'search' ); ?>
                        </h4>
                    </div>
                <?php else: ?>
                    <div class="container whitespace">
                        <div class="row">
                            <div class="col-lg-12 text-center">
                                <p class="display-4">Нет результатов...</p>
                            </div>
                        </div>
                    </div>
                <?php endif; ?>
            </main>

            <?php 
            // Условие для отображения пагинации
            if ( have_posts() && $wp_query->max_num_pages > 1 ) : ?>
                <div class="container">
                    <div class="row mt-3">
                        <?php understrap_pagination(); ?>
                    </div>
                </div>
            <?php endif; ?>
        </div>
    </div>
</div>

Объяснение изменений:

  • Проверка на наличие постов и страниц: Мы добавили условие if ( have_posts() && $wp_query->max_num_pages > 1 ), которое проверяет, есть ли посты и есть ли несколько страниц. Это гарантирует, что пагинация будет отображаться только при наличии хотя бы одной страницы результатов.
  • Удаление лишнего блока: Параметры post_count < 0 не имеют смысла здесь. Вместо этого мы используем встроенную проверку WordPress для более глубокого анализа результатов запроса.

Заключение

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

Если у вас есть дополнительные вопросы или требуется помощь по другим аспектам, не стесняйтесь спрашивать!

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

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