Вопрос или проблема
Как заставить wp_link_pages() показывать кнопки “Следующая” и “Предыдущая”, когда это начало многопостовой записи, а также в конце многопостовой записи? В данный момент он показывает “Следующая” только на первой странице и “Предыдущая” в конце страницы.
Я столкнулся с такой же проблемой, и вот мое решение. Я использую глобальные переменные, чтобы получить текущую страницу и общее количество страниц:
/* сначала я проверяю глобальную переменную $multipage, чтобы убедиться,
что у поста действительно есть страницы */
global $multipage;
if ( $multipage === 1 ) {
global $page; // это номер текущей страницы
global $numpages; // это общее количество страниц
// отображение отключенной левой стрелки на странице 1
if ( 1 === $page ) :
?>
<span class="pagination__arrow pagination__arrow--prev pagination__arrow--disabled">< Предыдущая</span>
<span class="pagination__separator"> | </span>
<?php
endif;
// стандартная пагинация wp
wp_link_pages( [
'next_or_number' => 'next',
'before' => '',
'previouspagelink' => '<span class="pagination__arrow pagination__arrow--prev">< Предыдущая</span>',
'nextpagelink' => '<span class="pagination__arrow pagination__arrow--next">Следующая ></span>',
'separator' => '<span class="pagination__separator">|</span>',
] );
// отображение отключенной правой стрелки на последней странице
if ( $page === $numpages ) :
?>
<span class="pagination__separator"> | </span>
<span class="pagination__arrow pagination__arrow--next pagination__arrow--disabled">Следующая ></span>
<?php
endif;
}
напишите пользовательскую функцию, которая генерирует ссылки пагинации с кнопками “Следующая” и “Предыдущая”.
function custom_wp_link_pages() {
global $page, $numpages, $multipage;
if ( $multipage ) {
$output="<div class="pagination">";
$prev = get_previous_posts_link( __('« Предыдущая страница') );
$next = get_next_posts_link( __('Следующая страница »') );
if ( $prev || $next ) {
if ( $prev ) {
$output .= '<div class="prev-page">' . $prev . '</div>';
}
if ( $next ) {
$output .= '<div class="next-page">' . $next . '</div>';
}
}
$output .= '</div>';
echo $output;
}
}
// Использование в вашем шаблоне
custom_wp_link_pages();
Вы можете посмотреть на эту
Функцию wp_link_pages
.
Ответ или решение
Для того чтобы всегда отображать кнопки «Следующая» и «Предыдущая» при использовании функции wp_link_pages()
в WordPress, вам необходимо внести изменения в стандартную логику пагинации. По умолчанию, эта функция поддерживает отображение кнопки «Следующая» только на первой странице, а кнопку «Предыдущая» — только на последней. Поэтому, для достижения желаемого результата, можно воспользоваться глобальными переменными и создать пользовательскую функцию, которая будет учитывать все страницы.
Решение проблемы с использованием глобальных переменных
Первым шагом будет проверка глобальной переменной $multipage
, которая указывает, есть ли у поста несколько страниц. Ведь если $multipage
равно 1, то пост не содержит разделов. Далее мы определим текущую страницу и общее количество страниц с помощью глобальных переменных $page
и $numpages
. Мы создадим функцию для отображения пагинации, которая будет обеспечивать отображение кнопок на каждой странице.
function custom_wp_link_pages() {
global $page, $numpages, $multipage;
if ($multipage) {
$output = '<div class="pagination">';
// Отображаем кнопку «Предыдущая» на первой странице
if ($page > 1) {
$output .= '<span class="pagination__arrow pagination__arrow--prev">' . get_previous_post_link('%link', __('« Предыдущая страница')) . '</span>';
} else {
$output .= '<span class="pagination__arrow pagination__arrow--prev pagination__arrow--disabled">Предыдущая страница</span>';
}
// Основная пагинация
wp_link_pages([
'next_or_number' => 'number',
'before' => '<span class="pagination__separator">|</span>',
'separator' => '<span class="pagination__separator">|</span>',
]);
// Отображаем кнопку «Следующая» на последней странице
if ($page < $numpages) {
$output .= '<span class="pagination__arrow pagination__arrow--next">' . get_next_post_link('%link', __('Следующая страница »')) . '</span>';
} else {
$output .= '<span class="pagination__arrow pagination__arrow--next pagination__arrow--disabled">Следующая страница</span>';
}
$output .= '</div>';
echo $output;
}
}
// Использование в вашем шаблоне
custom_wp_link_pages();
Объяснение кода
-
Проверка на многопоточность: Мы сначала проверяем, есть ли у поста несколько страниц, используя
$multipage
. Если их нет, код не выполняется. -
Оформление кнопок «Предыдущая» и «Следующая»: В зависимости от текущей страницы код условно формирует вывод кнопок. Если вы на первой странице, кнопка «Предыдущая» будет отключена (в виде текста), аналогично для последней страницы с кнопкой «Следующая».
-
Стандартная пагинация: Используется стандартная функция
wp_link_pages()
для генерации ссылок на страницы, которая будет учитывать порядок страниц.
Заключение
Изменив стандартное поведение wp_link_pages()
, вы сможете отображать кнопки «Следующая» и «Предыдущая» на всех страницах многостраничного поста. Это не только улучшит навигацию по вашему контенту, но и создаст более профессиональный вид вашего сайта. Убедитесь, что используете правильные классы CSS для стилизации кнопок и пагинации.
Если вам нужны дополнительные рекомендации по настройке внешнего вида или функционала, вы всегда можете обратиться к официальной документации WordPress, которая является отличным ресурсом для разработчиков.