Ottenere solo i link delle pagine precedente/successiva (senza titolo, <a> ecc)
Attualmente uso il seguente metodo per ottenere il link della pagina precedente/successiva del blog:
<?php previous_post_link( '%link', '%title' ); ?>
Tuttavia questo include l'elemento esterno, il nome ecc., mentre voglio solo il link ad esempio http://domain.com/blog/page/2
Esiste una funzione che non sto vedendo per soddisfare i miei requisiti?
Chiarimento
- Questo è per la pagina successiva del blog (non per l'articolo del blog)
- Voglio solo il link, non l'elemento anchor
Grazie mille

Risposta breve: get_previous_posts_page_link
è la funzione che stai cercando:
<?php if($url = get_previous_posts_page_link()): ?>
fai qualcosa con $url
<?php endif; ?>
Risposta più dettagliata: segui il codice.
previous_posts_link
chiama get_previous_posts_link
.
<?php
/**
* Mostra il link alla pagina precedente dei post.
*
* @since 0.71
* @uses get_previous_posts_link()
*
* @param string $label Testo opzionale per il link alla pagina precedente.
*/
function previous_posts_link( $label = null ) {
echo get_previous_posts_link( $label );
}
get_previous_posts_link
chiama previous_posts
per ottenere l'URI del link stesso.
<?php
/**
* Restituisce il link alla pagina precedente dei post.
*
* @since 2.7.0
*
* @param string $label Testo opzionale per il link alla pagina precedente.
* @return string|null
*/
function get_previous_posts_link( $label = null ) {
global $paged;
if ( null === $label )
$label = __( '« Pagina precedente' );
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
è semplicemente un piccolo wrapper attorno alla funzione che stai cercando: get_previous_posts_page_link
<?php
/**
* Mostra o restituisce il link alla pagina precedente dei post.
*
* @since 0.71
*
* @param boolean $echo Opzionale. Se stampare o restituire;
*/
function previous_posts( $echo = true ) {
$output = esc_url( get_previous_posts_page_link() );
if ( $echo )
echo $output;
else
return $output;
}
La funzione che vogliamo:
<?php
/**
* Recupera il link alla pagina precedente dei post.
*
* Restituirà una stringa solo se non ci si trova in una singola pagina o post.
*
* Backportato alla versione 2.0.10 dalla 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);
}
}
Ho incluso tutto questo per illustrare come puoi trovare risposte esaminando il codice core. Strumenti come ack possono aiutarti a iniziare:
shell$ cd /percorso/della/tua/installazione/wordpress
shell$ ack "function previous_posts_link"
In generale, WordPress è abbastanza bravo nel fare in modo che una funzione faccia solo una cosa. Seguire le funzioni più ampie (come previous_posts_link
e altri template tag) fino a funzioni più basilari è solitamente un buon modo per imparare cose interessanti e trovare la tua risposta.

Se non vuoi altri elementi, puoi aggiungere il seguente codice al template della pagina del tuo tema. I tuoi link verranno quindi assegnati a $prevID e $nextID che potrai utilizzare come preferisci.
<?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];
?>

Per la posterità. previous_posts() e next_posts() faranno esattamente questo.
echo previous_posts( 0, false );
echo next_posts( 0, false );
