Получение навигации для постов с помощью get_the_posts_pagination()

# get_the_posts_pagination() │ WP 4.1.0

Функция get_the_posts_pagination() позволяет получить навигацию для перехода на следующую или предыдущую страницу постов, если это применимо. Это полезно, если у вас много записей, и вы хотите их распределить по страницам.

### Использует
- paginate_links()
- _navigation_markup()

### Используется в
- the_posts_pagination()

## Хуки функции

- the_posts_pagination_args

## Возвращает

Строку с разметкой для ссылок навигации.

## Использование

```php
get_the_posts_pagination( $args );

Параметры $args (массив)

Этот параметр является необязательным.

По умолчанию: параметры для постраничной навигации, см. paginate_links()

  • screen_reader_text (строка): Текст для экранных считывателей на элементе навигации. По умолчанию: 'Пагинация постов'.
  • aria_label (строка): Текст ARIA для элемента навигации. По умолчанию: 'Пагинация постов'.
  • class (строка): Пользовательский класс для элемента навигации. По умолчанию: 'pagination'.

Примеры

Пример 1: Использование

$pagination = get_the_posts_pagination( [
    'mid_size' => 2,
    'prev_text' => __( 'Новые', 'textdomain' ),
    'next_text' => __( 'Старые', 'textdomain' ),
] );

Параметр $args, переданный в paginate_links(), также может быть дополнительно настроен. Вот значения по умолчанию:

$args = array(
    'base'               => '%_%',
    'format'             => '?paged=%#%',
    'total'              => 1,
    'current'            => 0,
    'show_all'           => false,
    'end_size'           => 1,
    'mid_size'           => 2,
    'prev_next'          => true,
    'prev_text'          => __('« Назад'),
    'next_text'          => __('Вперед »'),
    'type'               => 'plain',
    'add_args'           => false,
    'add_fragment'       => '',
    'before_page_number' => '',
    'after_page_number'  => ''
);
$pagination = get_the_posts_pagination( $args );

Пример 2: Вывод

Предположим, нам нужно отобразить ссылки постраничной навигации на странице архивов, используйте следующий код:

Это отобразит следующий HTML-код:

Примечания

  • Глобальная: WP_Query. Объект WordPress Query.

Изменения

  • С 4.1.0: Введена функция.
  • С 5.3.0: Добавлен параметр aria_label.
  • С 5.5.0: Добавлен параметр class.

Код функции get_the_posts_pagination

function get_the_posts_pagination( $args = array() ) {
    global $wp_query;

    $navigation = '';

    // Не выводить пустую разметку, если только одна страница.
    if ( $wp_query->max_num_pages > 1 ) {
        // Убедимся, что элемент навигации имеет атрибут aria-label: используем текст для экранных считывателей.
        if ( ! empty( $args['screen_reader_text'] ) && empty( $args['aria_label'] ) ) {
            $args['aria_label'] = $args['screen_reader_text'];
        }

        $args = wp_parse_args(
            $args,
            array(
                'mid_size'           => 1,
                'prev_text'          => _x( 'Назад', 'предыдущий набор постов' ),
                'next_text'          => _x( 'Вперед', 'следующий набор постов' ),
                'screen_reader_text' => __( 'Пагинация постов' ),
                'aria_label'         => __( 'Пагинация постов' ),
                'class'              => 'pagination',
            )
        );

        /**
         * Фильтрует параметры для ссылок постраничной навигации.
         *
         * @since 6.1.0
         *
         * @param array $args {
         *     Необязательные параметры для пагинации, см. paginate_links().
         *
         *     @type string $screen_reader_text Текст для экранных считывателей.
         *                                      По умолчанию 'Навигация постов'.
         *     @type string $aria_label         ARIA метка для элемента навигации.
         *                                      По умолчанию 'Пагинация постов'.
         *     @type string $class              Пользовательский класс для элемента навигации.
         *                                      По умолчанию 'pagination'.
         * }
         */
        $args = apply_filters( 'the_posts_pagination_args', $args );

        // Убедимся, что получаем строку в ответе. Plain – это лучший вариант.
        if ( isset( $args['type'] ) && 'array' === $args['type'] ) {
            $args['type'] = 'plain';
        }

        // Устанавливаем постраничные ссылки.
        $links = paginate_links( $args );

        if ( $links ) {
            $navigation = _navigation_markup( $links, $args['class'], $args['screen_reader_text'], $args['aria_label'] );
        }
    }

    return $navigation;
}

Связанные функции

  • _navigation_markup()
  • get_next_posts_page_link()
  • get_posts_nav_link()
  • get_previous_posts_page_link()
  • get_the_comments_navigation()
  • get_the_comments_pagination()
  • get_the_post_navigation()
  • get_the_posts_navigation()
  • posts_nav_link()
  • the_comments_navigation()
  • the_comments_pagination()
  • the_post_navigation()
  • the_posts_navigation()
  • the_posts_pagination()

Leave a Reply

Ваш адрес email не будет опубликован. Обязательные поля помечены *