Paginazione WordPress Non Funzionante - Mostra Sempre il Contenuto della Prima Pagina
Sto lavorando su un sito web dove ho un blog ma ho anche un custom post type per permettermi di inserire alcuni video.
Vorrei utilizzare la paginazione in modo che se ci sono più di 9 video visualizzati, venga attivata la paginazione.
La prima parte funziona. I video sono effettivamente limitati a 9 per pagina e la paginazione appare correttamente in fondo.
Tuttavia, quando clicco sul link per la seconda pagina, anche se l'URL cambia, vengono visualizzati i video della prima pagina.
Per i miei post 'normali' del blog, la paginazione funziona esattamente come previsto.
Questo è il codice che sto attualmente utilizzando per il mio custom post type:
<?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 /* Inizia il Loop */ ?>
<?php while ( have_posts() ) : the_post(); ?>
Qualsiasi aiuto sarebbe molto apprezzato.

Perché il tuo codice attuale non funziona
Ottieni sempre il contenuto della prima pagina, perché la stringa di parametri passata a query_posts
essendo racchiusa tra apici singoli impedisce alle variabili (così come alle sequenze di escape per caratteri speciali diversi da $
) di essere interpretate.
query_posts("post_type=videos&posts_per_page=9&paged=$paged");
risolverebbe questo problema.
query_posts('post_type=videos&posts_per_page=9&paged='.$paged);
funzionerebbe altrettanto.
E infine, anche passare un array di argomenti misti anziché una stringa in stile query URL andrebbe bene.
Detto questo però, non dovresti usare affatto query_posts:
Come dovrebbe essere fatto
Come hai menzionato nel tuo commento, hai provato a usare get_posts
.
Questa è davvero una funzione molto utile, ma non è il modo corretto se vuoi utilizzare successivamente un WordPress-Loop.
get_posts
restituisce un array di oggetti post - la proprietà posts
dell'oggetto WP_Query
. Ma solo quella proprietà, senza tutte le altre funzionalità e metodi che WP_Query
offre.
Quindi, per adattarti al tuo frammento di codice sopra, fai qualcosa di simile a questo:
<?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() ) {
/* The Loop */
while ( $your_query->have_posts() ) {
$your_query->the_post();
// fai qualcosa
}
} else {
echo 'Spiacente, nessun post trovato.';
}
?>

Grazie mille per questo, lettura interessante. Tuttavia, potresti fornire l'alternativa utilizzando il metodo get_posts()?
È così semplice come:
<?php $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; get_posts("post_type=videos&posts_per_page=9&paged=$paged"); ?>
In realtà non funziona per me, ma potrebbe essere a causa di codice altrove?
