Ai putea seta variabile în funcție de id-ul paginii/slug-ul paginii.
Verifici dacă pagina are slug-ul X
atunci max_posts=x
… și tot așa.
Sper că am înțeles întrebarea.
Inițiator fir de discuții
smashmatic
(@smashmatic)
Cred că ar fi fost prea mult de lucrat totuși am găsit o soluție. Mai băbească, dar e ok.
De fapt care era problema? În practică aveam vroiam ca fiecare pagină dinamică de pe site (adică care nu e articol) să aibă 5 articole, dar numărătoarea să nu includă eventualele articole înrudite, care sunt eventual doar o anexă la unul din cele cinci articole principale. Problema apărea din cauza dublurilor. Foloseam <?php if (in_array(post->ID,$do_not_duplicate)) continue ?>
, după cum
scrie la carte, numai că deși dublura dispărea, contorul nu era resetat. Și mă trezeam cu patru postări sau chiar trei pe paginile cu unu și respectiv două articole înrudite. Dacă blocam Ciclul (The Loop) la 5 cu ajutorul unui contor (adică cât contorul e mai mic decât 6 ciclul se desfășoară, când ajunge la șase ss oprește) stricam paginația (ce am scris mai sus).
În final am renunțat să folosesc comanda continue
. În schimb am
mai creat un ciclu care se comportă exact la fel ca primul, doar că rolul lui e doar să-mi umple un șir cu dublurile (este vorba de $do_not_duplicate[]
). Ăsta l-am pus chiar la începutul paginii index.
Apoi, ciclului principal i-am declarat argumentul 'post__not_in'=>$do_not_duplicate;
.
O să încerc mâine să pun codul simplificat aici, în caz că vor fi și alții care să aibă aceeași problemă cu mine.
Inițiator fir de discuții
smashmatic
(@smashmatic)
Uite codul cu care am rezolvat. Poate e de folos cuiva.
<!-- INCEPUT INREGISTRARE DUBLURI -->
<?php
$args = array(
'showposts'=> -1,
'order' => 'date'
);
$do_not_duplicate=array();
$myquery = new WP_Query($args);
while ($myquery->have_posts()) : $myquery->the_post(); ?>
<!--inceput stire-similara -->
<?php $stirisimilare = get_post_meta($post->ID, "stirilatema", false); $args = array(
'post__in' => $stirisimilare,
'showposts'=> -1,
'order' => 'date'
);?>
<?php if ($stirisimilare): ?>
<?php $similare = new WP_Query($args);
while ($similare->have_posts()) : $similare->the_post();
$do_not_duplicate[] = get_the_ID(); ?>
<?php endwhile; ?>
<?php endif; ?>
<!--sfarsit stire-similara -->
<?php endwhile; ?>
<!-- SFARSIT INREGISTRARE DUBLURI -->
<?php wp_reset_query(); ?>
<?php
$args=array('post__not_in'=>$do_not_duplicate,
'paged'=>$paged);
$myquery = new WP_Query($args);
if ($myquery->have_posts()) : ?>
<?php while ($myquery->have_posts()) : $myquery->the_post();
update_post_caches($posts); ?>
// AICI VINE CODUL PENTRU ARTICOLELE OBISNUITE
<!--inceput stire-similara -->
<?php $stirisimilare = get_post_meta($post->ID, "stirilatema", false); $args = array(
'post__in' => $stirisimilare,
'showposts'=> -1,
'order' => 'date'
);?>
<?php if ($stirisimilare): ?>
<?php $similare = new WP_Query($args);
while ($similare->have_posts()) : $similare->the_post();
$do_not_duplicate[] = get_the_ID(); ?>
// AICI VINE CODUL PENTRU STIRILE SIMILARE LA UN ARTICOL OBISNUIT
<?php endwhile; ?>
<?php endif; ?>
<!-- inchidere stire-similara -->
<?php endwhile; ?>
<!-- inceput paginatie -->
<?php posts_nav_link(); ?>
<!-- inchidere paginatie --></div>
<?php endif; ?>