Ottenere solo i link delle pagine precedente/successiva (senza titolo, <a> ecc)

8 lug 2012, 21:11:30
Visualizzazioni: 24.7K
Voti: 8

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

0
Tutte le risposte alla domanda 6
1
19

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 = __( '&laquo; 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', '&#038;$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.

8 lug 2012 22:00:30
Commenti

Wow, risposta molto informativa, e funziona ancora perfettamente dopo 5 anni, grazie!

Davey Davey
4 lug 2017 19:40:44
1
<?php get_previous_posts_link(); ?>

Ovviamente lo salvi in un array, come

<?php $prev = get_previous_posts_link(); ?>
8 lug 2012 21:31:59
Commenti

Esiste un modo per ottenere solo il link, e non l'elemento <a href=""></a>?

Ben Everard Ben Everard
8 lug 2012 21:41:53
0

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];
?>
8 lug 2012 21:37:29
1

Simile a @liam-jay, ma ottenendo solo uno dei post

$prev_post = get_previous_post();
empty($prev_post) or $link = $prev_post->guid;

Penso che questo dovrebbe funzionare bene, anche se non testato.

8 lug 2012 21:49:39
Commenti

Un GUID non è un collegamento. Sembra tale ma non lo è.

fuxia fuxia
8 lug 2012 23:13:01
0

questo funziona:

    <?php
    $next_post_url = get_permalink( get_adjacent_post(false,'',false)->ID );
    $previous_post_url = get_permalink( get_adjacent_post(false,'',true)->ID );        
    ?>
18 set 2019 09:09:33
0

Per la posterità. previous_posts() e next_posts() faranno esattamente questo.

echo previous_posts( 0, false );
echo next_posts( 0, false );
13 gen 2022 19:05:07