Come utilizzare the_posts_navigation con wp_query e get_posts?

15 gen 2015, 04:09:12
Visualizzazioni: 49.1K
Voti: 9

WordPress ha la funzione the_posts_navigation dalla versione 4.1.0. Ma non so come usarla con wp_query o get_posts. Il seguente codice si trova in un file template di una pagina.
metodo wp_query:

    <?php
    if ( get_query_var('paged') ) {
    $paged = get_query_var('paged');
    } else if ( get_query_var('page') ) {
    $paged = get_query_var('page');
    } else {
    $paged = 1;
    }

    $get_posts=new wp_query('post_type=case&posts_per_page=2&paged='.$paged);

    while($get_posts->have_posts()):$get_posts->the_post();
    the_title();
    endwhile;

    the_posts_pagination( array(
        'prev_text'          => __( 'Pagina precedente', 'cm' ),
        'next_text'          => __( 'Pagina successiva', 'cm' ),
        'before_page_number' => '<span class="meta-nav screen-reader-text">' . __( 'Pagina', 'cm' ) . ' </span>',
    ) );
    ?>

metodo get_posts:

    <?
    while(have_posts()):the_post();
    if ( get_query_var('paged') ) {
        $paged = get_query_var('paged');
        } else if ( get_query_var('page') ) {
        $paged = get_query_var('page');
        } else {
        $paged = 1;
    }

    $case_posts=get_posts('post_type=case&posts_per_page=2&paged='.$paged);
    echo '<pre>';
    print_r($case_posts);
    echo '</pre>';
    foreach($case_posts as $case_post){
        echo $case_post->post_title;
    }
    endwhile;
    // Navigazione pagina precedente/successiva.
    the_posts_pagination( array(
        'prev_text'          => __( 'Pagina precedente', 'cm' ),
        'next_text'          => __( 'Pagina successiva', 'cm' ),
        'before_page_number' => '<span class="meta-nav screen-reader-text">' . __( 'Pagina', 'cm' ) . ' </span>',
    ) );
    ?>

Non funzionano e non mostrano la paginazione, ma inserendo manualmente http://127.0.0.1/gdboer/?page_id=74&page=2 nella barra degli indirizzi, funziona. Chi può aiutarmi, grazie mille!

1
Commenti

La tua domanda è fuorviante, poiché il tuo codice utilizza the_posts_pagination, che è diverso dalla domanda nel titolo the_posts_navigation.

Jevuska Jevuska
2 apr 2016 23:02:12
Tutte le risposte alla domanda 3
4
10

the_posts_navigation() è semplicemente una funzione wrapper per get_the_posts_navigation() che a sua volta è una funzione wrapper per paginate_links. Le prime due funzioni utilizzano esattamente gli stessi parametri usati da paginate_links e li passano anche a quest'ultima funzione.

get_the_posts_navigation() e the_posts_navigation() sono buone nuove funzioni perché eliminano molto codice personalizzato e sono più user-friendly per i nuovi utenti inesperti che desiderano una navigazione paginata numerata.

L'unico difetto in get_the_posts_navigation() è che gli sviluppatori hanno avvolto la funzione paginate_links in un'istruzione condizionale che stabilisce che se la query principale ($wp_query) ha meno di 1 pagina (ricorda, la prima pagina è 0 e la seconda è 2), non mostrare i link. Questo è problematico per query personalizzate nei template di pagina. Le pagine avranno sempre solo una pagina, quindi queste funzioni non funzionano con query personalizzate.

L'unica vera soluzione alternativa, se devi usare the_posts_navigation(), è utilizzare la risposta di @ChipBennet in questo post. Non mi piace annullare la query principale (piuttosto hacky, secondo me è come usare query_posts) ma non vedo altre soluzioni per far funzionare get_the_posts_navigation() con query personalizzate.

15 gen 2015 12:24:08
Commenti

Grazie per la tua risposta. Ora so che la funzione non può funzionare con query personalizzate. A proposito, non ti piace annullare la query principale. Ma quale metodo hai usato?

Vincent Wong Vincent Wong
16 gen 2015 02:31:23

Non utilizzo la funzione nativa, ho scritto la mia funzione di paginazione che uso. Puoi controllarla qui

Pieter Goosen Pieter Goosen
16 gen 2015 06:14:04

Se uso un permalink come questo http://127.0.0.1/gdboer/?post_type=case non funziona. Usare il permalink http://127.0.0.1/gdboer/?page_id=74 va bene.

Vincent Wong Vincent Wong
17 gen 2015 04:14:35

Ci giocherò un po' nella prossima settimana. Al momento sono impegnato con altre cose. Grazie mille per la tua risposta. Questo mi aiuta davvero molto.

Pieter Goosen Pieter Goosen
17 gen 2015 08:24:16
2

Ho un template personalizzato e ho faticato per ore per mostrare il componente di paginazione. Ecco cosa ha funzionato per me.

$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$args = array(
    'posts_per_page' => 3,
    'orderby' => 'menu_order',
    'order'=> 'ASC',
    'paged'=>$paged,
    'post_type' => 'projects'
    );

$projects = new WP_Query($args);

            <!-- esempio funzionante di paginazione con numeri -->
            ...<?php endwhile;?>
                <?php 
                $GLOBALS['wp_query']->max_num_pages = $projects->max_num_pages;
                the_posts_pagination( array(
                   'mid_size' => 1,
                   'prev_text' => __( 'Indietro', 'green' ),
                   'next_text' => __( 'Avanti', 'green' ),
                   'screen_reader_text' => __( 'Navigazione articoli' )
                ) ); ?>
             OPPURE
             <!-- esempio funzionante di paginazione senza numeri -->
             ...<?php endwhile;?>   
             <?php next_posts_link( 'successivo', $projects->max_num_pages ); ?>
             <?php previous_posts_link('precedente') ?>
25 apr 2015 03:56:41
Commenti

Decisamente un'idea, l'unica parte che non mi piace molto è modificare l'oggetto della query principale. È un po' un hack e un bug che ti darà incubi perché non resetti la query principale una volta finito. Tienilo a mente. Questo è il motivo per cui la globalizzazione è una cosa così malvagia, chiunque può cambiare i valori. Ricorda, molti plugin si basano sulle variabili globali, in particolare $wp_query e $post

Pieter Goosen Pieter Goosen
25 apr 2015 08:33:26

Grazie mille. $GLOBALS['wp_query']->max_num_pages era il pezzo mancante per me. Non sono sicuro che esista un modo migliore.

Space Space
11 ago 2017 02:17:42
2

Questa funzione utilizza get_the_posts_pagination() che usa la variabile GLOBALE wp_query per configurare la funzione paginate_links(), quindi credo che non funzioni con get_posts.

Prova a usare direttamente la funzione paginate_links() oppure la funzione posts_nav_link()

PS: Assicurati di usare wp_reset_query()

15 gen 2015 04:31:57
Commenti

grazie per la tua risposta. So che paginate_links funziona per me. ma voglio usare la nuova funzione the_posts_navigation. Ho guardato attentamente il codice sorgente di get_the_posts_navigation e ho fatto riferimento al tema di twentyfifteen.

Vincent Wong Vincent Wong
15 gen 2015 10:16:08

non sono riuscito a far funzionare get_the_posts_pagination() nella mia query ajax, ma paginate_links() funziona bene. grazie per questo.

honk31 honk31
14 gen 2020 15:25:32