Получение ссылок на предыдущую/следующую страницу (только URL, без <a> и заголовка)
В настоящее время я использую следующий метод для получения ссылки на предыдущую/следующую страницу блога:
<?php previous_post_link( '%link', '%title' ); ?>
Однако это включает внешний элемент, название и т.д., а мне нужна только ссылка, например http://domain.com/blog/page/2
Есть ли функция, которую я не заметил, соответствующая моим требованиям?
Уточнение
- Это для следующей страницы блога (не поста блога)
- Мне нужна только ссылка, без элемента якоря
Заранее спасибо

Краткий ответ: вам нужна функция get_previous_posts_page_link
:
<?php if($url = get_previous_posts_page_link()): ?>
делаем что-то с $url
<?php endif; ?>
Развернутый ответ: следуем по коду.
previous_posts_link
вызывает get_previous_posts_link
.
<?php
/**
* Отображает ссылку на предыдущую страницу записей.
*
* @since 0.71
* @uses get_previous_posts_link()
*
* @param string $label Опционально. Текст ссылки на предыдущую страницу.
*/
function previous_posts_link( $label = null ) {
echo get_previous_posts_link( $label );
}
get_previous_posts_link
вызывает previous_posts
для получения самого URI ссылки.
<?php
/**
* Возвращает ссылку на предыдущую страницу записей.
*
* @since 2.7.0
*
* @param string $label Опционально. Текст ссылки на предыдущую страницу.
* @return string|null
*/
function get_previous_posts_link( $label = null ) {
global $paged;
if ( null === $label )
$label = __( '« Предыдущая Страница' );
if ( !is_single() && $paged > 1 ) {
$attr = apply_filters( 'previous_posts_link_attributes', '' );
return '<a href="' . previous_posts( false ) . "\" $attr>". preg_replace( '/&([^#])(?![a-z]{1,8};)/i', '&$1', $label ) .'</a>';
}
}
previous_posts
– это просто небольшая обертка вокруг искомой функции: get_previous_posts_page_link
<?php
/**
* Отображает или возвращает ссылку на предыдущую страницу записей.
*
* @since 0.71
*
* @param boolean $echo Опционально. Выводить или возвращать;
*/
function previous_posts( $echo = true ) {
$output = esc_url( get_previous_posts_page_link() );
if ( $echo )
echo $output;
else
return $output;
}
Искомая функция:
<?php
/**
* Получает ссылку на предыдущую страницу записей.
*
* Возвращает строку только если это не одиночная страница или запись.
*
* Перенесена в 2.0.10 из 2.1.3.
*
* @since 2.0.10
*
* @return string|null
*/
function get_previous_posts_page_link() {
global $paged;
if ( !is_single() ) {
$nextpage = intval($paged) - 1;
if ( $nextpage < 1 )
$nextpage = 1;
return get_pagenum_link($nextpage);
}
}
Я привел весь этот код, чтобы показать, как можно находить ответы, изучая ядро WordPress. Инструменты вроде ack могут помочь вам начать:
shell$ cd /path/to/your/wordpress/install
shell$ ack "function previous_posts_link"
В целом, WordPress довольно хорошо структурирован, и каждая функция выполняет только одну задачу. Прослеживание от более общих функций (например, previous_posts_link
и других тегов шаблонов) к более базовым функциям обычно помогает узнать что-то новое и найти ответ.

Если вам не нужны другие элементы, вы можете добавить следующий код в шаблон страницы вашей темы. Тогда ваши ссылки будут присвоены переменным $prevID и $nextID, с которыми вы сможете делать всё, что захотите.
<?php
$pagelist = get_pages('sort_column=menu_order&sort_order=asc');
$pages = array();
foreach ($pagelist as $page) {
$pages[] += $page->ID;
}
$current = array_search($post->ID, $pages);
$prevID = $pages[$current-1];
$nextID = $pages[$current+1];
?>

Для потомков. previous_posts() и next_posts() сделают именно это.
echo previous_posts( 0, false );
echo next_posts( 0, false );
