Всегда показывать кнопки “Следующая” и “Предыдущая” в wp_link_pages?

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

Как заставить 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( __('&laquo; Предыдущая страница') );
        $next = get_next_posts_link( __('Следующая страница &raquo;') );

        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', __('&laquo; Предыдущая страница')) . '</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', __('Следующая страница &raquo;')) . '</span>';
        } else {
            $output .= '<span class="pagination__arrow pagination__arrow--next pagination__arrow--disabled">Следующая страница</span>';
        }

        $output .= '</div>';
        echo $output;
    }
}

// Использование в вашем шаблоне
custom_wp_link_pages();

Объяснение кода

  1. Проверка на многопоточность: Мы сначала проверяем, есть ли у поста несколько страниц, используя $multipage. Если их нет, код не выполняется.

  2. Оформление кнопок «Предыдущая» и «Следующая»: В зависимости от текущей страницы код условно формирует вывод кнопок. Если вы на первой странице, кнопка «Предыдущая» будет отключена (в виде текста), аналогично для последней страницы с кнопкой «Следующая».

  3. Стандартная пагинация: Используется стандартная функция wp_link_pages() для генерации ссылок на страницы, которая будет учитывать порядок страниц.

Заключение

Изменив стандартное поведение wp_link_pages(), вы сможете отображать кнопки «Следующая» и «Предыдущая» на всех страницах многостраничного поста. Это не только улучшит навигацию по вашему контенту, но и создаст более профессиональный вид вашего сайта. Убедитесь, что используете правильные классы CSS для стилизации кнопок и пагинации.

Если вам нужны дополнительные рекомендации по настройке внешнего вида или функционала, вы всегда можете обратиться к официальной документации WordPress, которая является отличным ресурсом для разработчиков.

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

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