Paginarea WordPress nu funcționează - Afișează mereu conținutul primei pagini
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.
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.';
}
?>

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?
