Paginarea WordPress nu funcționează - Afișează mereu conținutul primei pagini

10 iul. 2013, 16:28:36
Vizualizări: 45.6K
Voturi: 10

Lucrez la un site web unde am un blog dar am și un tip de postare personalizat (custom post type) care îmi permite să adaug videoclipuri.

Aș dori să folosesc paginare astfel încât dacă există mai mult de 9 videoclipuri afișate, să apară paginarea.

Prima parte funcționează. Videoclipurile sunt într-adevăr limitate la 9 pe pagină și paginarea apare corect în partea de jos.

Cu toate acestea, când dau click pe link-ul pentru a doua pagină, chiar dacă URL-ul se schimbă, sunt afișate videoclipurile din prima pagină.

Pentru postările mele 'normale' de blog, paginarea funcționează exact așa cum ar trebui.

Acesta este codul pe care îl folosesc în prezent pentru tipul meu de postare personalizat:

<?php if ( have_posts() ) : ?>
<?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; query_posts('post_type=videos&posts_per_page=9&paged=$paged'); ?>

    <?php /* Începe bucla */ ?>
    <?php while ( have_posts() ) : the_post(); ?>

Orice ajutor ar fi foarte apreciat.

1
Comentarii

posibil duplicat al Cum se repară paginarea pentru bucle personalizate?

Chip Bennett Chip Bennett
31 oct. 2013 16:36:09
Toate răspunsurile la întrebare 1
3
18

De ce eșuează codul tău actual

Întotdeauna primești conținutul primei pagini, deoarece șirul de parametri transmis la query_posts fiind încapsulat în ghilimele simple împiedică variabilele (precum și secvențele de escape pentru caractere speciale altele decât $) să fie interpretate.

query_posts("post_type=videos&posts_per_page=9&paged=$paged"); ar rezolva această problemă.

query_posts('post_type=videos&posts_per_page=9&paged='.$paged); ar rezolva de asemenea.

Și în final, transmiterea unui array de argumente mixte în loc de un șir în format URL-query ar funcționa la fel de bine.

Cu toate acestea, nu ar trebui să folosești deloc query_posts:

Cum ar trebui făcut corect

Conform comentariului tău, ai încercat să folosești get_posts.
Aceasta este într-adevăr o funcție foarte utilă, dar nu este soluția corectă dacă intenționezi să folosești o buclă WordPress ulterior. get_posts returnează un array de obiecte post - proprietatea posts a obiectului WP_Query. Dar doar această proprietate, fără celelalte funcționalități și metode pe care le oferă WP_Query.

Prin urmare, pentru a adapta fragmentul tău de cod, fă ceva de genul acesta:

<?php
    $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; 
    $args = array(
        'post_type' => 'videos',
        'posts_per_page' => 9,
        'paged' => $paged
    );
    $your_query = new WP_Query( $args );

    if ( $your_query->have_posts() ) {
        /* Bucla */
        while ( $your_query->have_posts() ) {
            $your_query->the_post();
            // faci ceva
        }
    } else {
        echo 'Ne pare rău, nu s-au găsit postări.';
    }
?>
10 iul. 2013 16:36:43
Comentarii

Mulțumesc mult pentru asta, lectură interesantă. Totuși, te rog să-mi poți oferi alternativa folosind metoda get_posts().

Este la fel de simplu ca:

<?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; get_posts("post_type=videos&posts_per_page=9&paged=$paged"); ?>

Asta nu funcționează de fapt pentru mine, dar poate fi din cauza altui cod din altă parte?

Johnny Johnny
10 iul. 2013 17:13:21

Vezi răspunsul actualizat.

Johannes Pille Johannes Pille
10 iul. 2013 18:58:12

Mulțumesc foarte mult că ți-ai luat timp să-mi arăți cum să folosesc asta. Apreciez foarte mult.

Johnny Johnny
11 iul. 2013 00:35:33