Post cercapersone: come utilizzare i numeri e i collegamenti successivi / precedenti?


17

Voglio che wp_link_pages (post di più pagine) visualizzi i numeri di pagina, la parola "precedente" prima di quei numeri e un "successivo" dopo quei numeri. Sarebbe così:

Indietro 1, 2, 3, 4 Avanti

Sto tentando di farlo senza un plug-in. Ecco cosa ho provato finora, ma non funziona, visualizza solo numeri.

<?php wp_link_pages(array(
    'before' => '<span style="clear:both; display:block">Pages', 
    'after'  => '</span>',
    'next_or_number'=>'number',
    'previouspagelink' => 'previous',
    'nextpagelink'=> 'Next'
)); ?>

Risposte:


12

La funzione che stai utilizzando, wp_link_pagesCodex , non ha la funzione che stai cercando per impostazione predefinita.

Tuttavia, è possibile estenderlo facilmente utilizzando una funzione di callback, registrata come filtro su tali argomenti di funzioni:

add_filter('wp_link_pages_args', 'wp_link_pages_args_prevnext_add');

Il filtro modificherà quindi i parametri utilizzati in quella funzione al volo e inietterà i collegamenti mancanti agli argomenti preve nextche vengono emessi sul lato sinistro e destro dell'elenco dei collegamenti numerati ( next_or_number' => 'number'):

/**
 * Add prev and next links to a numbered page link list
 */
function wp_link_pages_args_prevnext_add($args)
{
    global $page, $numpages, $more, $pagenow;

    if (!$args['next_or_number'] == 'next_and_number') 
        return $args; # exit early

    $args['next_or_number'] = 'number'; # keep numbering for the main part
    if (!$more)
        return $args; # exit early

    if($page-1) # there is a previous page
        $args['before'] .= _wp_link_page($page-1)
            . $args['link_before']. $args['previouspagelink'] . $args['link_after'] . '</a>'
        ;

    if ($page<$numpages) # there is a next page
        $args['after'] = _wp_link_page($page+1)
            . $args['link_before'] . ' ' . $args['nextpagelink'] . $args['link_after'] . '</a>'
            . $args['after']
        ;

    return $args;
}

Uso:

wp_link_pages(array(
    'before' => '<p>' . __('Pages:'),
    'after' => '</p>',
    'next_or_number' => 'next_and_number', # activate parameter overloading
    'nextpagelink' => __('Next'),
    'previouspagelink' => __('Previous'),
    'pagelink' => '%',
    'echo' => 1 )
);

Se il tema utilizza sempre i collegamenti precedente e successivo, è possibile modificare leggermente la funzione per renderla il comportamento predefinito ogni volta che si utilizza number(impostazione predefinita), quindi è necessario scrivere meno nei temi.

Questa è un'implementazione leggermente diversa come suggerito da Velvet Blues .


Fatta eccezione per alcuni commenti e primi ritorni, l'implementazione, il nome dell'opzione e la spiegazione sono esattamente gli stessi dei miei. Sto trascurando qualcosa? Quali vantaggi offre la tua soluzione? Grazie.
Velvet Blues,

Probabilmente quando confronterò il codice.
Hacre,

La soluzione di Hakre disponibile finché la domanda è qui. Le risposte complete (= comprensibili senza fare affidamento su fonti esterne) sono sempre preferite su StackExchange.
fuxia

6

La wp_link_pages()funzione mostra solo sia di testo o un numero, mai entrambi. Se dai un'occhiata al codice della funzione, vedrai che non esiste alcuna opzione per farlo funzionare diversamente passando parametri.

Detto questo, ci sono tre modi per farlo senza un plugin:

  1. Crea la tua funzione nel file Functions.php del tuo tema. Funziona, ma poi avresti una nuova funzione.
  2. Utilizzare 2-3 istanze di wp_link_pages(). Hack molto inefficiente.
  3. Usa un filtro. Metodo preferito . Vedi sotto.

Ho scritto un articolo su come farlo sul mio blog. Fondamentalmente, uso il filtro wp_link_pages_args e aggiungo una funzione nel file Functions.php che aggiunge una nuova opzione 'next_and_number'.

WordPress Hack: visualizza il numero e i collegamenti successivi / precedenti con wp_link_pages ()


Fantastico ... Stavo pensando a qualcosa usando i 4 valori globali, ma non sono mai riuscito a trovare una soluzione ... +1!
Rutwick Gangurde,

3

Prova questo, puoi personalizzarlo di più. Ma dovrebbe fare come volevi :-)

function tp_link_pages() {
    global $page, $numpages;

    echo paginate_links( array(
        'format' => get_permalink() . '%#%/',
        'current' => $page,
        'total' => $numpages
    ) );
}

come possiamo gestirlo? wordpress.org/support/topic/… o come aggiungere un titolo personalizzato dinamico prima del numero di pagina.
ravi patel,

1

Non capisco qual è il problema ... Hai qualche errore?

Questo dovrebbe funzionare:

<?php $args = array(
    'before'           => '<span style="clear:both; display:block">Pages',
    'after'            => '</span>',
    'nextpagelink'     => __('Next'),
    'previouspagelink' => __('Previous')
); 

wp_link_pages($args);
?> 

Non è necessario aggiungere next_or_number poiché il numero è già predefinito.


Per qualche ragione questo non funziona, ma mi sembra giusto. Mi chiedo se c'è stata una modifica a 3.3 o se devo incollare qualcosa in Functions.php?
AndrettiMilas,

2
Sì, ho provato anche questo, funziona quando si imposta next_or_numbera next. Ma mostra solo i collegamenti "Successivo" e "Precedente", non i numeri!
Rutwick Gangurde,

1
Ho bisogno di entrambi, come mostrato nell'esempio.
AndrettiMilas,

1

Questo codice è nel ciclo dei post? La codifica è OK per me. Ecco l'esempio del Codex su come usare:

<?php

wp_link_pages(array(
    'before' => '<p>' . __('Pages:'),
    'after' => '</p>',
    'next_or_number' => 'number',
    'nextpagelink' => __('Next page'),
    'previouspagelink' => __('Previous page'),
    'pagelink' => '%',
    'echo' => 1 )
);

?>

Questo codice non funziona.
AndrettiMilas,

Codice fisso Scusa. Alcuni attributi sono senza valore.
Caio Alves,

1
Questo non ottiene i risultati che stavo cercando nella mia domanda, mostra solo numeri.
AndrettiMilas,

0

La risposta è diversa, ma è stato ispirato @ 荒野 无 灯 che ha deciso di eliminare la sua risposta. Imho è la migliore, come la soluzione più semplice e flessibile:

La soluzione dipende paginate_links(). L'unica cosa da sapere è che basesarà l'URl dall'inizio, aggiunto da %_%, che sarà poi sostituito da format. Quindi, fintanto che usiamo get_permalink().'%_%';, sappiamo che rimarremo comunque sul post corrente. All'interno format, #viene sostituito dal numero di pagina:

function wpse37256_paginate_paged()
{
    if ( ! $paginate_links = paginate_links( array(
         'type'      => 'array'

        ,'total'     => $GLOBALS['numpages']
        ,'mid_size'  => 1
        ,'end_size'  => 1

        #,'prev_next' => false
        ,'prev_text' => '&laquo; '.__( 'Prev', 'your_textdomain' )
        ,'next_text' => __( 'Next', 'your_textdomain' ).' &raquo;'

        ,'base'      => get_permalink().'%_%'
        ,'format'    => user_trailingslashit( '%#%' )

        ,'current'   => $GLOBALS['page']
    ) ) )
        return;

    echo "<div class='pagination-container'>{$paginate_links}</div>";
}
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.