Mai multe bucle pe aceeași pagină, fără conținut duplicat

11 nov. 2012, 16:13:45
Vizualizări: 26.1K
Voturi: 0

Încerc să creez o pagină cu mai multe bucle, am nevoie ca fiecare buclă să afișeze un număr predefinit de articole din aceeași categorie (fiecare buclă afișează X număr de articole din Categoria CATS). Dar am nevoie ca a doua buclă, a treia buclă și așa mai departe să afișeze articolele de unde s-a oprit ultima buclă, fără a duplica conținutul (exemplu: bucla 1 de la articolul 1 la 5, bucla 2 de la articolul 6 la 10, bucla 3 de la articolul 11 la 15 etc.). Iată ce am încercat până acum (am încercat și codul din WordPress Codex, dar nimic nu pare să funcționeze)

Mă puteți ajuta?

iată codul meu până acum:

<?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
Comentarii

'am încercat codul din codex-ul WordPress' - te referi la: http://codex.wordpress.org/The_Loop#Multiple_Loops_in_Action

Michael Michael
11 nov. 2012 16:32:09

@Michael: da, am încercat asta și alte variante, dar nimic nu pare să funcționeze

Martin Aston Martin Aston
11 nov. 2012 16:45:19
Toate răspunsurile la întrebare 5
0

este important să citiți acest capitol din Codex până la final, deoarece sugestiile esențiale se află după acest titlu 'Notă pentru Postări Multiple în Prima Categorie';

cod repetitiv și plictisitor:

<?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

Deși răspunsul lui Michael funcționează, efectuarea mai multor interogări pentru aceasta reprezintă o irosire a resurselor bazei de date, când poți obține toate rezultatele într-o singură interogare și să gestionezi afișarea în PHP. Vezi acest răspuns pe care l-am dat la o altă întrebare similară pentru a obține aceleași rezultate cu o singură interogare la baza de date.

11 nov. 2012 19:15:45
Comentarii

Sunt complet de acord; cu toate acestea, răspunsul meu este, sper, util ca o schiță generală despre cum să eviți postări duplicate cu o multitudine de bucle.

Michael Michael
11 nov. 2012 20:25:46
1

Fie folosește wp_reset_query() după fiecare interogare pentru a șterge rezultatele interogărilor anterioare, fie creează instanțe WP_Query unde buclele ar fi iterate prin variabile locale în locul celor globale.

11 nov. 2012 16:23:19
Comentarii

Nu, doar asta nu ar preveni postări duplicate, deoarece o postare poate avea mai multe categorii.

fuxia fuxia
11 nov. 2012 16:25:04
0

Utilizați parametrul Offset pentru buclele ulterioare, acesta va începe afișarea postărilor după numărul pe care îl specificați:

// începe de la postarea 6 până la postarea 10
$mosaics = new WP_Query('category_name=mosaics&posts_per_page=5&offset=5');

// începe de la postarea 11 până la postarea 15
$mosaics = new WP_Query('category_name=mosaics&posts_per_page=5&offset=10');
11 nov. 2012 17:04:20
0

Magia.

 wp_reset_query();

Aceasta poate fi folosită pentru a curăța calea pentru apeluri ulterioare la WP_Query. Sau pentru a evita duplicarea datorată unui apel nestructurat la buclă, precum:

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