Переопределите стандартную разметку пагинации WordPress

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

Я хочу отобразить разметку пагинации в постах 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. Вот как это можно сделать:

  1. Используйте функцию paginate_links с пользовательским обратным вызовом
    Функция paginate_links() в WordPress позволяет вам настраивать HTML-структуру пагинации. Вы можете указать формат и обернуть ссылки пагинации в вашу желаемую разметку.

  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>';
    }
}
  1. Реализуйте пользовательскую пагинацию в вашей теме
    Как только функция определена, вам нужно вызвать её в шаблонных файлах вашей темы, где необходима пагинация. Обычно это 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(), которая предлагает гибкие настройки для отображения навигации по страницам постов. В этом ответе я подробно объясню, как это сделать, чтобы вы могли адаптировать свою пагинацию под требования темы.

Функция 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 вашей страницы, так как правильно оформленная пагинация помогает поисковым системам лучше индексировать контент, что, в конечном счете, может привести к улучшению видимости вашего сайта.

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

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