Отсутствуют ссылки на пагинацию для первой ссылки (1) и кнопки “Назад”? Как заставить ссылки на пагинацию работать?

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

Я пытаюсь добавить постраничную навигацию к своему запросу WordPress, используя pagination_links(), однако ссылки для моей первой страницы и предыдущей ссылки не возвращаются? Другие ссылки добавляют строку запроса paged к URL, что затем перенаправляет вас на /page/3/, например. Не уверен, нужно ли мне обновить запрос ниже, чтобы добавить эти URL вместо строки запроса?

Кто-нибудь может увидеть, что не так с нижеуказанным, и как я могу сделать ссылки постраничной навигации правильными?

Любые советы и помощь будут оценены.

Запрос и постраничная навигация:

$posts_per_page = get_option('posts_per_page');
$paged = ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1;

$args = array(
    'posts_per_page' => $posts_per_page,
    'post_type' => 'post',
    'paged' => $paged,
);

$articles = new WP_Query( $args ); 

$args = array(
    'base'               => '%_%',
    'format'             => '?paged=%#%',
    'current'            => max( 1, get_query_var('paged') ),
    'total'              => $wp_query->max_num_pages,
    'show_all'           => false,
    'end_size'           => 1,
    'mid_size'           => 1,
    'prev_next'          => true,
    'prev_text'          => '<span class="icon icon-arrow-left" aria-hidden="true"></span><span class="sr-only">Предыдущая</span>',
    'next_text'          => '<span class="icon icon-arrow-right" aria-hidden="true"></span><span class="sr-only">Следующая</span>',
    'type'               => 'plain',
    'add_args'           => false,
    'add_fragment'       => '',
    'before_page_number' => '',
    'after_page_number'  => ''
);

echo paginate_links( $args );

Возвращенный HTML:

<div class="pagination">
    <a class="prev page-numbers" href=""><span class="icon icon-arrow-left" aria-hidden="true"></span><span class="sr-only">Предыдущая</span></a>
    <a class="page-numbers" href="">1</a>
    <span aria-current="page" class="page-numbers current">2</span>
    <a class="page-numbers" href="?paged=3">3</a>
    <a class="next page-numbers" href="?paged=3"><span class="icon icon-arrow-right" aria-hidden="true"></span><span class="sr-only">Следующая</span></a>            
</div>

Я обновил базу в моем $args, что решило проблему.

'base' => preg_replace('/\?.*/', "https://wordpress.stackexchange.com/", get_pagenum_link()) . '%_%',

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

Отсутствие ссылок на первую страницу и кнопку «Предыдущая» в вашем коде пагинации WordPress может быть вызвано неправильной конфигурацией аргументов, передаваемых в функцию paginate_links(). Давайте подробно разберем вашу проблему и предложим решение.

Анализ проблемы

  1. Отсутствие ссылок на первую страницу и кнопку «Предыдущая»: Вы упомянули, что на первой странице не отображаются ссылки, а кнопка "Предыдущая" содержит пустой href. Это говорит о том, что функция не получает правильный URL для первой страницы.

  2. Правильное определение переменной $paged: Вы корректно задаете переменную $paged, используя get_query_var('paged'), но необходимо удостовериться, что ваш запрос (WP_Query) также учитывает текущее состояние пагинации.

  3. Формат ссылки на пагинацию: Ваш текущий формат ссылок указывает на ?paged=%#%, что не всегда правильно обрабатывается для первой страницы, поскольку ссылка должна формироваться с использованием базового URL, который учитывает текущий контекст.

Рекомендации по исправлению

Чтобы решить проблему с отсутствующими ссылками и корректным формированием URL, вам стоит обновить аргументы для функции paginate_links(). Вот как это можно сделать:

  1. Обновление аргумента base: Вы уже указали, что исправили базу для пагинации, но давайте еще раз разберем правильный подход. Используйте get_pagenum_link() для создания более стабильного URL.
$args = array(
    'base'               => '%_%',
    'format'             => 'page/%#%/', // Измените это для более удобного формирования ссылок
    'current'            => max( 1, get_query_var('paged') ),
    'total'              => $articles->max_num_pages, // Убедитесь, что вы используете $articles, а не $wp_query
    'show_all'           => false,
    'end_size'           => 1,
    'mid_size'           => 1,
    'prev_next'          => true,
    'prev_text'          => '&lt;span class="icon icon-arrow-left" aria-hidden="true"&gt;&lt;/span&gt;&lt;span class="sr-only"&gt;Предыдущая&lt;/span&gt;',
    'next_text'          => '&lt;span class="icon icon-arrow-right" aria-hidden="true"&gt;&lt;/span&gt;&lt;span class="sr-only"&gt;Следующая&lt;/span&gt;',
    'type'               => 'plain',
    'add_args'           => false,
    'add_fragment'       => '',
    'before_page_number' => '',
    'after_page_number'  => ''
);
  1. Использование get_pagenum_link(): Эта функция автоматически создаёт правильные ссылки, которые могут использоваться как для первой страницы, так и для остальных.

Итоговый код

Таким образом, ваш полный код может выглядеть так:

$posts_per_page = get_option('posts_per_page');
$paged = ( get_query_var( 'paged' ) ) ? absint( get_query_var( 'paged' ) ) : 1;

$args = array(
    'posts_per_page' => $posts_per_page,
    'post_type' => 'post',
    'paged' => $paged,
);

$articles = new WP_Query( $args );

$args = array(
    'base'               => get_pagenum_link(1) . '%_%',
    'format'             => 'page/%#%/', // или '?paged=%#%', в зависимости от ваших нужд
    'current'            => max( 1, get_query_var('paged') ),
    'total'              => $articles->max_num_pages,
    'show_all'           => false,
    'end_size'           => 1,
    'mid_size'           => 1,
    'prev_next'          => true,
    'prev_text'          => '&lt;span class="icon icon-arrow-left" aria-hidden="true"&gt;&lt;/span&gt;&lt;span class="sr-only"&gt;Предыдущая&lt;/span&gt;',
    'next_text'          => '&lt;span class="icon icon-arrow-right" aria-hidden="true"&gt;&lt;/span&gt;&lt;span class="sr-only"&gt;Следующая&lt;/span&gt;',
    'type'               => 'plain',
    'add_args'           => false,
    'add_fragment'       => '',
    'before_page_number' => '',
    'after_page_number'  => ''
);

echo paginate_links( $args );

Заключение

Если вы внесёте эти изменения, это должно исправить проблему с отсутствием ссылок на первую страницу и кнопку «Предыдущая». Всегда полезно проверять значения переменных и проследить за тем, что передается в функции пагинации. Это позволит обеспечить корректное отображение навигационных элементов на вашей странице. Надеюсь, это поможет! Если у вас остались вопросы, не стесняйтесь задавать их.

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

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