8 (8452) 32-00-84

Как улучшить the_post_navigation

the_post_navigation(); — выводит навигацию по типу следующий, предыдущий пост.

Я пользуюсь генератором шаблонов underscores.me который выводит title ссылками на предыдущую и следующую запись.

Задача стоит преобразовать ссылки в кнопки используя Bootstrap.

Чтобы ссылка стала кнопкой нужно написать так:

<a class="btn btn-default" href="#" role="button">Текст ссылки</a>

Ищем где это можно исправить и находим файл /wp-includes/link-template.php

А в нем функцию:

<?php 
 
function get_adjacent_post_link( $format, $link, $in_same_term = false, $excluded_terms = '', $previous = true, $taxonomy = 'category' ) {
	if ( $previous && is_attachment() )
		$post = get_post( get_post()->post_parent );
	else
		$post = get_adjacent_post( $in_same_term, $excluded_terms, $previous, $taxonomy );
 
	if ( ! $post ) {
		$output = '';
	} else {
		$title = $post->post_title;
 
		if ( empty( $post->post_title ) )
			$title = $previous ? __( 'Previous Post' ) : __( 'Next Post' );
 
		/** This filter is documented in wp-includes/post-template.php */
		$title = apply_filters( 'the_title', $title, $post->ID );
 
		$date = mysql2date( get_option( 'date_format' ), $post->post_date );
		$rel = $previous ? 'prev' : 'next';
 
		$string = '<a href="' . get_permalink( $post ) . '" rel="'.$rel.'">';
		$inlink = str_replace( '%title', $title, $link );
		$inlink = str_replace( '%date', $date, $inlink );
		$inlink = $string . $inlink . '</a>';
 
		$output = str_replace( '%link', $inlink, $format );
	}
 
	$adjacent = $previous ? 'previous' : 'next';
 
	/**
	 * Filters the adjacent post link.
	 *
	 * The dynamic portion of the hook name, `$adjacent`, refers to the type
	 * of adjacency, 'next' or 'previous'.
	 *
	 * @since 2.6.0
	 * @since 4.2.0 Added the `$adjacent` parameter.
	 *
	 * @param string  $output   The adjacent post link.
	 * @param string  $format   Link anchor format.
	 * @param string  $link     Link permalink format.
	 * @param WP_Post $post     The adjacent post.
	 * @param string  $adjacent Whether the post is previous or next.
	 */
	return apply_filters( "{$adjacent}_post_link", $output, $format, $link, $post, $adjacent );
 
}
 
?>

Ее работу надо изменить при помощи фильтров, которые мы пропишем в functions.php нашей темы:

// Меняем ссылки на кнопки
 
// next
 
function my_next_get_adjacent_post_link( $output, $format, $link, $post, $adjacent ) {
	if ( ! $post ) {
		$output = '';
	} else {
		$title = get_the_title($post->ID);
		$output = '<div class="nav-next"><a class="btn btn-default" href="' . get_permalink( $post ) . '" role="button">' . $title . '</a></div>';
	}
	return $output;
}
 
add_filter("next_post_link", 'my_next_get_adjacent_post_link', 10, 5);
 
//previous
 
function my_previous_get_adjacent_post_link( $output, $format, $link, $post, $adjacent ) {
	if ( ! $post ) {
		$output = '';
	} else {
		$title = get_the_title($post->ID);
		$output = '<div class="nav-previous"><a class="btn btn-default" href="' . get_permalink( $post ) . '" role="button">' . $title . '</a></div>';
	}
	return $output;
}

Ссылки стали кнопками. Ура!!!