Afișarea numărului de index al articolului curent în interiorul buclei
Lucrez în WordPress unde am următorul cod pentru a obține articole în interiorul buclei.
<?php
$posts = $woo_options['woo_latest_entries'];
query_posts('post_type=post&category_name=company');
if ( have_posts() ) : while ( have_posts() ) : the_post(); $count++;
?>
/// Conținutul Articolului Vine Aici //
<?php endwhile; endif; ?>
Care afișează articolele în buclă în acest fel...
Articolul Apare Aici ....
Alt Articol Apare Aici ....
Încă Un Articol Apare Aici ....
.....
Ceea ce doresc este să afișez numărul de index al articolului curent în buclă. Exemplu
1. Articolul Apare Aici ....
2. Alt Articol Apare Aici ....
3. Încă Un Articol Apare Aici ....
.....
Cum pot realiza acest lucru? Mulțumesc.
EDITARE
Ah! Pot să o fac în acest fel..
<?php
echo $wp_query->current_post +1;
?>
Există și alte metode / O metodă mai bună?
De fapt, vreau să atribui ID-uri în funcție de indexul postării!
Iată codul tău pe care l-am modificat.
<?php
global $wp_query;
$posts = $woo_options['woo_latest_entries'];
query_posts('post_type=post&category_name=company');
if ( have_posts() ) : while ( have_posts() ) : the_post(); $count++;
$index = $wp_query->current_post + 1;
?>
<div id="postarea_mea_<?php echo $index; ?>">
<!-- Conținutul postării aici -->
</div>
<?php endwhile; endif; ?>

Dacă este doar o chestiune estetică și nu ai nevoie să folosești variabila count în codul tău, poți pur și simplu să înfășori postările într-un tag ol
:
<?php if ( have_posts() ) : ?>
<ol>
<?php while ( have_posts() ) : the_post(); ?>
<li> <!-- Conținutul Postării Aici --> </li>
<?php endwhile; ?>
</ol>
<?php endif; ?>

@MANnDAaR, exact asta face. Dacă bucla ta are 10 postări, vei vedea o listă ordonată, numerotată de la 1 la 10. (vezi exemplul aici)

Salut, am dat peste acest thread și mă întrebam și eu cum să fac asta. Am aflat că e foarte ușor. În fișierul template principal, de exemplu index.php, declară o variabilă $post_idx înainte de loop, și în interiorul loop-ului incrementează acea variabilă. Iată cum:
<?php $post_idx = 0; while ( have_posts() ) : the_post(); ?>
<?php
get_template_part( 'content', get_post_format() );
$post_idx++;
?>
<?php endwhile; ?>
Apoi, în template-ul de conținut (de exemplu content.php) care este executat de fiecare dată în loop, pur și simplu faci $post_idx global și îl folosești după nevoie:
global $post_idx;
print "<p>{$post_idx}</p>";
Și gata!

Chiar dacă această întrebare este veche, voi lăsa acest răspuns aici în cazul în care cineva care vine de pe Google are nevoie de un răspuns mai flexibil.
De-a lungul timpului, am dezvoltat o soluție care să fie agnostică față de WP_Query
sau interogarea globală. Când folosești un WP_Query
personalizat, ești limitat la utilizarea doar a include
sau require
pentru a putea folosi variabilele din $custom_query
, dar în unele cazuri (care sunt majoritatea pentru mine!), părțile de șablon pe care le creez sunt uneori utilizate într-o interogare globală (cum ar fi șabloanele de arhivă) sau într-un WP_Query
personalizat (cum ar fi interogarea unui tip de postare personalizată pe pagina principală). Asta înseamnă că am nevoie de un contor care să fie accesibil global, indiferent de tipul de interogare. WordPress nu oferă această funcționalitate, dar iată cum o poți implementa folosind câteva hook-uri.
Puneți acest cod în functions.php
/**
* Creează un contor accesibil global pentru toate interogările
* Chiar și pentru WP_Query personalizate!
*/
// Inițializează variabilele
add_action('init', function(){
global $cqc;
$cqc = -1;
});
// La începutul buclei, asigură-te întotdeauna că contorul este -1
// Acest lucru se datorează faptului că WP_Query apelează "next_post" pentru fiecare postare,
// chiar și pentru prima, ceea ce incrementează contorul cu 1
// (adică prima postare va fi 0, așa cum ne așteptăm)
add_action('loop_start', function($q){
global $cqc;
$cqc = -1;
}, 100, 1);
// La fiecare iterație a buclei, acest hook este apelat
// Stocăm contorul curent al instanței în variabila noastră globală
add_action('the_post', function($p, $q){
global $cqc;
$cqc = $q->current_post;
}, 100, 2);
// La sfârșitul fiecărei interogări, curățăm prin setarea contorului
// la valoarea contorului interogării globale. Acest lucru permite variabilei $cqc
// să fie setată corect în pagina principală, postare sau interogare, chiar și după
// executarea unui WP_Query personalizat.
add_action( 'loop_end', function($q){
global $wp_query, $cqc;
$cqc = $wp_query->current_post;
}, 100, 1);
Frumusețea acestei soluții este că, pe măsură ce intri într-o interogare personalizată și revii în bucla principală, contorul va fi resetat la valoarea corectă în ambele cazuri. Atâta timp cât ești într-o interogare (ceea ce este întotdeauna cazul în WordPress, chiar dacă nu-ți dai seama), contorul tău va fi corect. Acest lucru se datorează faptului că interogarea principală este executată cu aceeași clasă!
Exemplu :
global $cqc;
while(have_posts()): the_post();
echo $cqc; // Va afișa 0
the_title();
$custom_query = new WP_Query(array('post_type' => 'portfolio'));
while($custom_query->have_posts()): $custom_query->the_post();
echo $cqc; // Va afișa 0, 1, 2, 34
the_title();
endwhile;
echo $cqc; // Va afișa din nou 0
endwhile;

Căutam să fac același lucru, dar în afara buclei. În esență, voiam să pot afla indexul unui post folosindu-mă de ID-ul său. Iată la ce am ajuns:
<?php
function sleek_get_post_index ($post) {
$allPosts = get_posts([
'post_type' => $post->post_type,
'numberposts' => -1
]);
$index = 0;
foreach ($allPosts as $p) {
$index++;
if ($p->ID == $post->ID) {
break;
}
}
return $index;
}
Această funcție a fost creată strict pentru design, deoarece clientul dorea numere lângă postări, chiar și dacă postarea era singură într-un chenar "postare recomandată". Am adăugat și un zero în față folosind: <?php echo str_pad(sleek_get_post_index($post), 2, '0', STR_PAD_LEFT) ?>
.
