Почему первая цифра пагинации не работает на wordpress?

Ссылка скопирована
1 ответ
<?php         $page = (get_query_var('paged')) ? get_query_var('paged') : 1;         $query = new WP_Query(           array(             'post_type' => 'page',             'post_parent' => 65,             'posts_per_page' => 4,             'orderby' => 'meta_value_num',             'meta_key' => 'post_rating',             'paged' => $page           )         );         ?>         <div class="row justify-content-center mt-3" id="response">           <?php           while ($query->have_posts()):             $query->the_post(); ?>  // Здесь карточка               <?php           endwhile;            $big = 999999999; // число для замены                       $links = paginate_links(             array(               'base' => str_replace($big, '%#%', esc_url(get_pagenum_link($big))),               'format' => '?paged=%#%',               'current' => $page,               'type' => 'array',               'prev_text' => 'Назад',               'next_text' => 'Вперед',               'total' => $query->max_num_pages,             )           );            if (is_array($links)) { // если пагинация есть             echo '<ul class="pagination">';             foreach ($links as $link) {               if (strpos($link, 'current') !== false)                 echo "<li class='active'>$link</li>"; // если это активная страница               else                 echo "<li>$link</li>";             }             echo '</ul>';           }            ?>         </div>         <?php wp_reset_query(); ?>

<?php $page = (get_query_var('paged')) ? get_query_var('paged') : 1; $query = new WP_Query( array( 'post_type' => 'page', 'post_parent' => 65, 'posts_per_page' => 4, 'orderby' => 'meta_value_num', 'meta_key' => 'post_rating', 'paged' => $page ) ); ?> <div class="row justify-content-center mt-3" id="response"> <?php while ($query->have_posts()): $query->the_post(); ?> // Здесь карточка <?php endwhile; $big = 999999999; // число для замены $links = paginate_links( array( 'base' => str_replace($big, '%#%', esc_url(get_pagenum_link($big))), 'format' => '?paged=%#%', 'current' => $page, 'type' => 'array', 'prev_text' => 'Назад', 'next_text' => 'Вперед', 'total' => $query->max_num_pages, ) ); if (is_array($links)) { // если пагинация есть echo '<ul class="pagination">'; foreach ($links as $link) { if (strpos($link, 'current') !== false) echo "<li class='active'>$link</li>"; // если это активная страница else echo "<li>$link</li>"; } echo '</ul>'; } ?> </div> <?php wp_reset_query(); ?>

Почему первая цифра пагинации не работает на wordpress?

Дополнительно:

Потому что это страница на которой вы находитесь

  • Артем Золин, Нет!!!!
    Вверху написано же, что сейчас я на втором странице пагинации!!!
  • Rec1cle, не на второй, а на первой. Вторая - гиперссылка синяя. Первая - неактивная. Значит вы на ней находитесь.
  • Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Игорь Волков Ответ

    У вас смешаны два варианта пагинации: get_pagenum_link() для обычных архивов и кастомный WP_Query внутри страницы. Для страницы с шорткодом чаще надёжнее явно формировать paged и base под текущий URL. Ещё важно: если это страница WordPress, иногда вместо paged нужно читать page.

    Попробуйте так:

    $paged = max(1, get_query_var('paged'), get_query_var('page'));
     
    $query = new WP_Query([
        'post_type'      => 'page',
        'post_parent'    => 65,
        'posts_per_page' => 4,
        'orderby'        => 'meta_value_num',
        'meta_key'       => 'post_rating',
        'paged'          => $paged,
    ]);

    $paged = max(1, get_query_var('paged'), get_query_var('page')); $query = new WP_Query([ 'post_type' => 'page', 'post_parent' => 65, 'posts_per_page' => 4, 'orderby' => 'meta_value_num', 'meta_key' => 'post_rating', 'paged' => $paged, ]);

    А ссылки пагинации:

    echo paginate_links([
        'base'      => trailingslashit(get_permalink()) . '%_%',
        'format'    => 'page/%#%/',
        'current'   => $paged,
        'total'     => $query->max_num_pages,
        'prev_text' => 'Назад',
        'next_text' => 'Вперёд',
    ]);

    echo paginate_links([ 'base' => trailingslashit(get_permalink()) . '%_%', 'format' => 'page/%#%/', 'current' => $paged, 'total' => $query->max_num_pages, 'prev_text' => 'Назад', 'next_text' => 'Вперёд', ]);

    Если первая цифра ведёт не туда или не работает, проверьте, не конфликтует ли slug страницы с rewrite-правилами, и пересохраните постоянные ссылки в админке. Также после своего цикла обязательно вызывайте wp_reset_postdata(). Для AJAX-подгрузки карточек пагинация делается иначе: ссылки должны не перезагружать страницу, а передавать номер страницы в JS и запрашивать данные через admin-ajax.php или REST API.

    Ещё один важный момент: если вы выводите пагинацию внутри страницы, не называйте параметр запроса так же, как уже использует WordPress для основной страницы. При нестандартной структуре иногда проще сделать ссылки с параметром ?my_page=2 и передавать его в свой WP_Query. Тогда вы не конфликтуете с rewrite-правилами, а первая страница остаётся обычным URL без лишних параметров.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно