Loop multipli nella stessa pagina, senza contenuti duplicati

11 nov 2012, 16:13:45
Visualizzazioni: 26.1K
Voti: 0

Sto cercando di creare una pagina con loop multipli, ho bisogno che ogni loop mostri un numero predefinito di post dalla stessa categoria (ogni loop mostra X numero di post dalla Categoria CATS). Ma ho anche bisogno che il secondo loop, il terzo loop e così via mostrino i post da dove l'ultimo loop si è fermato, senza duplicare i contenuti (esempio: loop 1 dal post 1 al 5, loop 2 dal post 6 al 10, loop 3 dal post 11 al 15 ecc.). Ecco cosa ho provato finora (Ho anche provato il codice nel codex di WordPress, ma niente sembra funzionare)

Potete aiutarmi?

Ecco il mio codice finora:

<?php   if (have_posts()) : ?>
<?php   $mosaics = new WP_Query('category_name=mosaics&posts_per_page=5'); ?>
<?php   while ($mosaics->have_posts()) : $mosaics->the_post(); ?>
<?php   if( $post->ID == $do_not_duplicate ) continue; ?>

<?php   echo get_the_content(); ?>
<?php   endwhile; ?>
<?php   endif; ?>
<?php   wp_reset_query(); ?>

<br />

<?php   if (have_posts()) : ?>
<?php   $mosaics = new WP_Query('category_name=mosaics&posts_per_page=4'); ?>
<?php   while ($mosaics->have_posts()) : $mosaics->the_post(); ?>
<?php   if( $post->ID == $do_not_duplicate ) continue; ?>

<?php   echo get_the_content(); ?>
<?php   endwhile; ?>
<?php   endif; ?>
<?php   wp_reset_query(); ?>

<br />

<?php   if (have_posts()) : ?>
<?php   $mosaics = new WP_Query('category_name=mosaics&posts_per_page=3'); ?>
<?php   while ($mosaics->have_posts()) : $mosaics->the_post(); ?>
<?php   if( $post->ID == $do_not_duplicate ) continue; ?>

<?php   echo get_the_content(); ?>
<?php   endwhile; ?>
<?php   endif; ?>
<?php   wp_reset_query(); ?>

<br />

<?php   if (have_posts()) : ?>
<?php   $mosaics = new WP_Query('category_name=mosaics&posts_per_page=2'); ?>
<?php   while ($mosaics->have_posts()) : $mosaics->the_post(); ?>
<?php   if( $post->ID == $do_not_duplicate ) continue; ?>

<?php   echo get_the_content(); ?>
<?php   endwhile; ?>
<?php   endif; ?>
<?php   wp_reset_query(); ?>
2
Commenti

'ho provato il codice nel codex di wordpress' - ti riferisci a: http://codex.wordpress.org/The_Loop#Multiple_Loops_in_Action

Michael Michael
11 nov 2012 16:32:09

@Michael: sì, ho provato quello e altre cose ma nulla sembra funzionare

Martin Aston Martin Aston
11 nov 2012 16:45:19
Tutte le risposte alla domanda 5
0

È importante leggere questo capitolo del Codex fino alla fine, poiché i suggerimenti essenziali si trovano dopo l'intestazione 'Nota per i Post Multipli nella Prima Categoria';

codice ripetitivo e tedioso:

<?php   $do_not_duplicate = array(); ?>
<?php   $mosaics = new WP_Query('category_name=mosaics&posts_per_page=5'); ?>
<?php   while ($mosaics->have_posts()) : $mosaics->the_post(); ?>
<?php   $do_not_duplicate[] = $post->ID; ?>

<?php   echo get_the_content(); ?>
<?php   endwhile; wp_reset_postdata(); ?>

<br />

<?php   $mosaics = new WP_Query( array( 'category_name' => 'mosaics', 'posts_per_page' => 4, 'post__not_in' => $do_not_duplicate ) ); ?>
<?php   while ($mosaics->have_posts()) : $mosaics->the_post(); ?>
<?php   $do_not_duplicate[] = $post->ID; ?>
<?php   echo get_the_content(); ?>
<?php   endwhile; wp_reset_postdata(); ?>

<br />

<?php   $mosaics = new WP_Query( array( 'category_name' => 'mosaics', 'posts_per_page' => 3, 'post__not_in' => $do_not_duplicate ) ); ?>
<?php   while ($mosaics->have_posts()) : $mosaics->the_post(); ?>
<?php   $do_not_duplicate[] = $post->ID; ?>
<?php   echo get_the_content(); ?>
<?php   endwhile; wp_reset_postdata(); ?>

<br />

<?php   $mosaics = new WP_Query( array( 'category_name' => 'mosaics', 'posts_per_page' => 2, 'post__not_in' => $do_not_duplicate ) ); ?>
<?php   while ($mosaics->have_posts()) : $mosaics->the_post(); ?>
<?php   $do_not_duplicate[] = $post->ID; ?>
<?php   echo get_the_content(); ?>
<?php   endwhile; wp_reset_postdata(); ?>
11 nov 2012 17:08:54
1

Sebbene la risposta di Michael funzioni, eseguire query multiple per questo scopo è uno spreco di risorse del database quando puoi ottenere tutti i risultati con una singola query e gestire la suddivisione dell'output in PHP. Vedi questa risposta che ho dato a un'altra domanda simile per ottenere gli stessi risultati con una singola query al database.

11 nov 2012 19:15:45
Commenti

Sono totalmente d'accordo; tuttavia, spero che la mia risposta sia utile come schema generale su come evitare post duplicati con una moltitudine di loop.

Michael Michael
11 nov 2012 20:25:46
1

Puoi utilizzare wp_reset_query() dopo ogni query per cancellare i risultati delle query precedenti, oppure creare istanze di WP_Query dove i loop verrebbero iterati attraverso variabili locali invece di quelle globali.

11 nov 2012 16:23:19
Commenti

No, da solo questo non impedirebbe i post duplicati, perché un post può avere più categorie.

fuxia fuxia
11 nov 2012 16:25:04
0

Utilizza il parametro Offset per i cicli successivi, questo farà in modo che i post vengano visualizzati a partire dal numero che specifichi:

// parte dal post 6 al post 10
$mosaics = new WP_Query('category_name=mosaics&posts_per_page=5&offset=5');

// parte dal post 11 al post 15
$mosaics = new WP_Query('category_name=mosaics&posts_per_page=5&offset=10');
11 nov 2012 17:04:20
0

La magia.

 wp_reset_query();

Questa funzione può essere utilizzata per ripulire il percorso per chiamate successive a WP_Query. Oppure per evitare la duplicazione causata da una chiamata non strutturata al loop, come:

$data = query_posts($args);
6 ott 2016 23:58:06