Paginare pe un șablon de pagină personalizat

25 oct. 2011, 21:23:15
Vizualizări: 13.9K
Voturi: 3

Am creat un tip de postare personalizat numit 'Evenimente'. Din motive pe care nu le voi detalia, am ales să nu folosesc archive-events.php ca șablon de arhivă pentru Evenimente. În schimb, am decis să creez un șablon de pagină personalizat, page-upcoming-events.php, pe care să-l folosesc ca arhivă.

Am scris o interogare personalizată în acest șablon pentru a prelua evenimentele. De asemenea, am limitat posts_per_page la 4. Am reușit să adaug link-uri de paginare folosind funcțiile previous_posts_link() și next_posts_link().

Aceste funcții generează link-uri către URL-urile așteptate: /upcoming-events/page/2/, etc.

Pe pagina 1, primesc primele 4 evenimente și link-ul către următoarele evenimente.

Problema pe care o am este că atunci când merg la pagina 2, primesc o eroare 404, nu evenimentele 5-8.

Cum pot adăuga corect paginarea pe un șablon de pagină personalizat?

0
Toate răspunsurile la întrebare 2
1

Iată ce fac eu pentru paginare. Sper să te ajute să te îndrepți pe drumul cel bun, poate fi exagerat pentru ceea ce încerci să faci...

Mai întâi setez $paged:

$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;

Apoi construiește array-ul $args, asigură-te să incluzi:

'paged' => $paged

Rulează interogarea includând funcțiile necesare pentru paginare (acesta este un exemplu, modifică ce ai nevoie pentru a-l personaliza):

        //interogarea folosind argumentele de mai sus
        $wp_query = new WP_Query( $args );

        //folosește interogarea pentru paginare
        $wp_query->query_vars[ 'paged' ] > 1 ? $current = $wp_query->query_vars[ 'paged' ] : $current = 1;

        //configurează array-ul "paginate_links" pentru a face ceea ce dorim. Verifică codex-ul pentru exemple http://codex.wordpress.org/Function_Reference/paginate_links
        $pagination = array(
            'base' => @add_query_arg( 'paged', '%#%' ),
            //'format' => '',
            'showall' => false,
            'end_size' => 4,
            'mid_size' => 4,
            'total' => $wp_query->max_num_pages,
            'current' => $current,
            'type' => 'plain'
        );

        //construiește link-urile de paginare
        if ( $wp_rewrite->using_permalinks() )
            $pagination[ 'base' ] = user_trailingslashit( trailingslashit( remove_query_arg( 's', get_pagenum_link( 1 ) ) ) . 'page/%#%/', 'paged' );

        //mai multe link-uri de paginare
        if ( !empty( $wp_query->query_vars[ 's' ] ) )
            $pagination[ 'add_args' ] = array( 's' => get_query_var( 's' ) );

        //rulează interogarea
        if ( $wp_query->have_posts() ) : while ( $wp_query->have_posts() ) : $wp_query->the_post();

Tot ce rămâne este să spui paginii unde dorești să apară link-urile:

        //afișează link-urile de paginare pe pagină
        echo '<div class="pydPaging">' . paginate_links($pagination) . '</div>';

Din nou, poate fi exagerat, dar funcționează foarte bine.

1 dec. 2011 19:56:39
Comentarii

funcția paginate_links($pagination) îmi returnează gol

AGrush AGrush
14 apr. 2022 17:05:33
0

Ești sigur că nu ai o pagină cu același nume ca și tipul de postare personalizată? Dacă da, regulile de rescriere a permalinkurilor se vor încurca și vor declanșa o eroare 404.

O soluție foarte simplă este: pagina care listează tipurile de postări personalizate să fie denumită la plural (de ex. produse), iar numele real al tipului de postare să fie la singular (de ex. produs). Astfel, nu vor intra în conflict și totul va funcționa corect.

De asemenea, asigură-te întotdeauna să rescrii fișierul .htaccess atunci când creezi un nou Tip de Postare Personalizată.

19 apr. 2022 11:40:08