Вопрос или проблема
Я хочу отобразить разметку пагинации в постах WordPress с помощью моего собственного HTML. В моей теме разметка пагинации имеет формат ul > li
. Но стандартная разметка пагинации WordPress отличается от моей разметки.
Как я могу применить свою разметку HTML вместо стандартной разметки пагинации?
Вы имеете в виду пагинацию архивов постов? Функция paginate_links()
принимает параметр type
, так что если вам нужен только формат ul > li
, вы можете попробовать что-то вроде:
// пагинация архивов
global $wp_query;
$big = 999999999; // нужен маловероятный целый
echo paginate_links( [
'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,
'type' => 'list',
] );
Если вам нужна полностью индивидуальная разметка, вы можете попробовать установить параметр type
на 'array'
и затем создать что угодно с помощью цикла foreach
.
документация: https://developer.wordpress.org/reference/functions/paginate_links/
Чтобы настроить разметку пагинации в WordPress так, чтобы она соответствовала желаемой структуре вашей темы (например, с использованием <ul><li></li></ul>
), вы можете переопределить стандартную функцию пагинации, предоставленную WordPress. Вот как это можно сделать:
-
Используйте функцию paginate_links с пользовательским обратным вызовом
Функция paginate_links() в WordPress позволяет вам настраивать HTML-структуру пагинации. Вы можете указать формат и обернуть ссылки пагинации в вашу желаемую разметку. -
Создайте пользовательскую функцию пагинации
Вы можете создать пользовательскую функцию пагинации в файле functions.php вашей темы, которая выводит пагинацию с вашей разметкой:
function custom_pagination() {
global $wp_query;
$big = 999999999; // нужен маловероятный целый
$pagination = 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,
'type' => 'array', // возвращает массив вместо строки
'prev_text' => __('« Предыдущая'),
'next_text' => __('Следующая »'),
) );
if ( is_array( $pagination ) ) {
echo '<ul class="custom-pagination">';
foreach ( $pagination as $page ) {
echo '<li>' . $page . '</li>';
}
echo '</ul>';
}
}
- Реализуйте пользовательскую пагинацию в вашей теме
Как только функция определена, вам нужно вызвать её в шаблонных файлах вашей темы, где необходима пагинация. Обычно это index.php, archive.php, category.php или search.php.
Пример:
if ( have_posts() ) :
while ( have_posts() ) : the_post();
// Ваш код цикла здесь
endwhile;
// Вызовите функцию пользовательской пагинации
custom_pagination();
else :
// Посты не найдены
endif;
Ответ или решение
Чтобы переопределить разметку пагинации по умолчанию в WordPress и заменить её на свою собственную HTML-разметку, вы можете воспользоваться функцией paginate_links()
, которая предлагает гибкие настройки для отображения навигации по страницам постов. В этом ответе я подробно объясню, как это сделать, чтобы вы могли адаптировать свою пагинацию под требования темы.
Шаг 1: Используйте функцию paginate_links
с параметром type
Функция paginate_links()
позволяет вернуть ссылки на страницы в различных форматах. Для вашего случая вы можете установить параметр type
в значение 'array'
, что вернет массив ссылок, который вы сможете обработать с помощью цикла foreach
. Это особенно полезно, если вам нужна полностью кастомизированная разметка.
Шаг 2: Создайте пользовательскую функцию пагинации
В файле functions.php
вашей темы создайте функцию для вывода пагинации с кастомной разметкой. Пример реализации может выглядеть так:
function custom_pagination() {
global $wp_query;
$big = 999999999; // некий маловероятный целочисленный идентификатор
$pagination = 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,
'type' => 'array', // возвращаем массив вместо строки
'prev_text' => __('« Предыдущая'),
'next_text' => __('Следующая »'),
) );
if ( is_array( $pagination ) ) {
echo '<ul class="custom-pagination">';
foreach ( $pagination as $page ) {
echo '<li>' . $page . '</li>';
}
echo '</ul>';
}
}
Шаг 3: Внедрите пользовательскую пагинацию в шаблон вашей темы
Теперь, когда функция определена, необходимо вызвать её в тех местах вашего шаблона, где требуется вывод пагинации. Обычно это делается в файлах index.php
, archive.php
, category.php
или search.php
.
Пример использования функции пагинации:
if ( have_posts() ) :
while ( have_posts() ) : the_post();
// Ваш код цикла отображения постов
endwhile;
// Вызов функции для пользовательской пагинации
custom_pagination();
else :
// Сообщение, если посты не найдены
endif;
Заключение
С помощью вышеописанных шагов вы сможете адаптировать разметку пагинации WordPress под свои нужды. Надеюсь, это поможет вам создать более согласованное отображение в вашей теме. Для получения дополнительной информации о функции paginate_links()
вы можете обратиться к документации WordPress.
Кроме того, проведя кастомизацию, вы также улучшите SEO вашей страницы, так как правильно оформленная пагинация помогает поисковым системам лучше индексировать контент, что, в конечном счете, может привести к улучшению видимости вашего сайта.