WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru Рекомендуемые продукты со скидкой от Template Monster

_navigation_markup() WP 4.1.0

Оборачивает переданные ссылки навигации/пагинации в html шаблон.

Используется для стандартного вывода ссылок навигации/пагинации в функциях: the_posts_pagination() и the_posts_navigation().

В этой функции есть полезный хук navigation_markup_template, используя который можно изменить шаблон вывода блока (см. пример).

Хуки из функции
Возвращает

Строку. HTML шаблон блока навигации.

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

_navigation_markup( $links, $class, $screen_reader_text );
$links(строка) (обязательный)
Ссылки навигации.
$class(строка)
Дополнительные классы к главному блоку <nav>. Классы добавятся к имеющемуся классу navigation.
По умолчанию: 'posts-navigation'
$screen_reader_text(строка)
Название блока навигации при чтения с экрана (для роботов читающих код).
По умолчанию: __( 'Posts navigation' )

Примеры

#1 Получим блок навигации

Допустим мы получили ссылки навигации с помощью paginate_links() и теперь нам нужно вывести эти ссылки в стандартном формате пагинации:

// получаем ссылки пагинации
$links = paginate_links( $args );

if ( $links ) {
	echo _navigation_markup( $links, 'pagination', 'Моя крутая навигация' );
}

#2 Изменение шаблона блока навигации/пагинации

Допустим нам нужно изменить вывод HTML в функциях: the_posts_pagination(), the_posts_navigation(), нужно удалить заголовок H2. Для этого используем хук: 'navigation_markup_template':

add_filter('navigation_markup_template', 'my_navigation_template', 10, 2 );
function my_navigation_template( $template, $class ){
	/*
	Вид базового шаблона:
	<nav class="navigation %1$s" role="navigation">
		<h2 class="screen-reader-text">%2$s</h2>
		<div class="nav-links">%3$s</div>
	</nav>
	*/

	return '
	<nav class="navigation %1$s" role="navigation">
		<div class="nav-links">%3$s</div>
	</nav>    
	';
}

Список изменений

С версии 4.1.0 Введена.

Код navigation markup: wp-includes/link-template.php WP 5.2.3

<?php
function _navigation_markup( $links, $class = 'posts-navigation', $screen_reader_text = '' ) {
	if ( empty( $screen_reader_text ) ) {
		$screen_reader_text = __( 'Posts navigation' );
	}

	$template = '
	<nav class="navigation %1$s" role="navigation">
		<h2 class="screen-reader-text">%2$s</h2>
		<div class="nav-links">%3$s</div>
	</nav>';

	/**
	 * Filters the navigation markup template.
	 *
	 * Note: The filtered template HTML must contain specifiers for the navigation
	 * class (%1$s), the screen-reader-text value (%2$s), and placement of the
	 * navigation links (%3$s):
	 *
	 *     <nav class="navigation %1$s" role="navigation">
	 *         <h2 class="screen-reader-text">%2$s</h2>
	 *         <div class="nav-links">%3$s</div>
	 *     </nav>
	 *
	 * @since 4.4.0
	 *
	 * @param string $template The default template.
	 * @param string $class    The class passed by the calling function.
	 * @return string Navigation template.
	 */
	$template = apply_filters( 'navigation_markup_template', $template, $class );

	return sprintf( $template, sanitize_html_class( $class ), esc_html( $screen_reader_text ), $links );
}

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

Из метки: navigation pagination (навигация пагинация)

6 комментов
  • Элчин

    Как написать свой шаблон? Мне нужно что бы внутри nav был ul список, внутри которого были лишки, внутри собственно которых были сами ссылки .. Причем каждый из этих элементов должны иметь мои классы.
    Как научится писать такие шаблоны? Возможно у вас есть статья которая поможет мне? Спасибо! smile

    Ответить1.4 года назад #
    • lincaseidhe81 lincaseidhe.ru

      Это вместо пагинации надо засунуть что ли? Как вариант - функция get_posts() со своими параметрами, а дальше уж как хочется так шаблон и пиши...

      Ответить1.4 года назад #
      • Элчин

        Не совсем ..
        Вот вместо этого:

        <nav class="navigation %1$s" role="navigation">
        	<div class="nav-links">%3$s</div>
        </nav> 

        Хочу свою структуру вывода пагинации написать ..
        Например вот так:

        <nav class="navigation %1$s" role="navigation">
        	<ul class="nav-links">
        		<li>%3$s</li>
        	</ul>
        </nav> 

        Но, тогда у меня все ссылки вставляются в одну лишку, а нужно что бы под каждую своя создавалась ..

        Ответить1.4 года назад #
        • lincaseidhe81 lincaseidhe.ru

          Ну так просто не получится. %3$s - формируется другой функцией, конкретно https://wp-kama.ru/function/get_the_posts_navigation . там хуков нет, так что вывод изменить не удастся. Единственный вариант - самому сформировать нужный вывод, не задействуя функцию the_posts_navigation(). Например:

          function my_the_post_navigation( $args = array() ) {
          $navigation = '';
          
          	// Don't print empty markup if there's only one page.
          	if ( $GLOBALS['wp_query']->max_num_pages > 1 ) {
          		$args = wp_parse_args( $args, array(
          			'prev_text'          => __( 'Older posts' ),
          			'next_text'          => __( 'Newer posts' ),
          			'screen_reader_text' => __( 'Posts navigation' ),
          		) );
          
          		//тут в ссылки можно добавить собственные параметры, смотреть функции get_previous_posts_link и get_next_posts_link
          		$next_link = get_previous_posts_link( $args['next_text'] );
          		$prev_link = get_next_posts_link( $args['prev_text'] );
          
          		if ( $prev_link ) {
          			//тут уже делаем нужный вывод
          			$navigation .= '<li class="my-previous">' . $prev_link . '</li>';
          		}
          
          		if ( $next_link ) {
          			$navigation .= '<li class="my-next">' . $next_link . '</li>';
          		}
          
          		$navigation = _navigation_markup( $navigation, 'posts-navigation', $args['screen_reader_text'] );
          	}
          
          	echo $navigation;
          }

          При этом в шаблонах темы нужно будет заменить the_post_navigation() на my_the_post_navigation(). И если нужно добавить параметры.

          2
          Ответить1.4 года назад #
          • Элчин

            Спасибо большое, то что нужно! smile

            1
            Ответить1.4 года назад #
          • @ mxm2

            lincaseidhe, если в файле single.php заменить the_post_navigation() на my_the_post_navigation() - то, данная функция не будет работать.

            lincaseidhe, если есть возможность объяснить почему не работает, то заранее спасибо тебе большое!

            P.S.:

            • вроде понял, есть get_previous_posts_link, а есть get_previous_post_link
            • для single.php - нужен post, соответственно, другая аналогичная функция...
            1
            Ответить7 мес назад #
Здравствуйте, !     Войти . Зарегистрироваться