Stampare il Numero Indice del Post Corrente all'interno del Loop
Sto lavorando su WordPress dove ho il seguente codice per ottenere i post all'interno del loop.
<?php
$posts = $woo_options['woo_latest_entries'];
query_posts('post_type=post&category_name=company');
if ( have_posts() ) : while ( have_posts() ) : the_post(); $count++;
?>
/// Il Contenuto del Post Va Qui //
<?php endwhile; endif; ?>
Che mostra i post all'interno del Loop in questo modo...
Il Post Va Qui ....
Un Altro Post Va Qui ....
Un Altro Post Ancora Va Qui ....
.....
Quello che voglio fare è stampare il numero dell'indice del post corrente all'interno del loop. Esempio
1. Il Post Va Qui ....
2. Un Altro Post Va Qui ....
3. Un Altro Post Ancora Va Qui ....
.....
Come posso ottenere questo risultato? Grazie.
MODIFICA
Oh! Posso farlo in questo modo..
<?php
echo $wp_query->current_post +1;
?>
C'è qualche altro modo / modo migliore?
In realtà voglio assegnare gli ID in base all'indice del post!
Ecco il tuo codice che ho modificato.
<?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="my_post_<?php echo $index; ?>">
<!-- Contenuto del Post Va Qui -->
</div>
<?php endwhile; endif; ?>

Se è solo una questione estetica e non hai bisogno di utilizzare la variabile count per ulteriore codice, puoi semplicemente racchiudere i tuoi post in un tag ol
:
<?php if ( have_posts() ) : ?>
<ol>
<?php while ( have_posts() ) : the_post(); ?>
<li> <!-- Il Contenuto del Post Va Qui --> </li>
<?php endwhile; ?>
</ol>
<?php endif; ?>

@MANnDAaR, è esattamente ciò che fa. Se il tuo loop ha 10 post, vedrai una lista ordinata, numerata da 1 a 10. (vedi esempio qui)

Ciao, mi sono imbattuto in questo thread cercando anche io come fare questa cosa. Ho scoperto che è incredibilmente semplice. Nel file template principale, ad esempio index.php, dichiara una variabile $post_idx prima del loop, e all'interno del loop incrementa quella variabile. In questo modo:
<?php $post_idx = 0; while ( have_posts() ) : the_post(); ?>
<?php
get_template_part( 'content', get_post_format() );
$post_idx++;
?>
<?php endwhile; ?>
Poi nel tuo template del contenuto (ad esempio content.php) che viene eseguito ogni volta all'interno del loop, rendi $post_idx globale e usalo secondo le tue necessità:
global $post_idx;
print "<p>{$post_idx}</p>";
Ecco fatto!

Anche se questa domanda è vecchia, la riporto qui nel caso qualcuno arrivando da una ricerca su Google abbia bisogno di una risposta più flessibile.
Nel tempo, ho sviluppato una soluzione per essere indipendente da WP_Query
o dalla query globale. Quando usi una WP_Query
personalizzata, sei limitato a usare solo include
o require
per poter utilizzare le variabili nella tua $custom_query
, ma in alcuni casi (che per me sono la maggior parte!), i template parts che creo a volte vengono usati in una query globale (come i template di archivio) o in una WP_Query
personalizzata (come interrogare un custom post type nella homepage). Ciò significa che ho bisogno di un contatore accessibile globalmente indipendentemente dal tipo di query. WordPress non lo rende disponibile, ma ecco come farlo accadere grazie ad alcuni hook.
Inserisci questo nel tuo functions.php
/**
* Crea un contatore accessibile globalmente per tutte le query
* Anche per nuove WP_Query personalizzate!
*/
// Inizializza le tue variabili
add_action('init', function(){
global $cqc;
$cqc = -1;
});
// All'inizio del loop, assicurati sempre che il contatore sia -1
// Questo perché WP_Query chiama "next_post" per ogni post,
// anche per il primo, che incrementa di 1
// (significa che il primo post sarà 0 come previsto)
add_action('loop_start', function($q){
global $cqc;
$cqc = -1;
}, 100, 1);
// Ad ogni iterazione di un loop, questo hook viene chiamato
// Memorizziamo il contatore dell'istanza corrente nella nostra variabile globale
add_action('the_post', function($p, $q){
global $cqc;
$cqc = $q->current_post;
}, 100, 2);
// Alla fine di ogni query, ripuliamo impostando il contatore
// sul contatore della query globale. Questo permette alla variabile $cqc
// di essere impostata correttamente nella pagina principale, post o query, anche dopo
// aver eseguito una WP_Query personalizzata.
add_action( 'loop_end', function($q){
global $wp_query, $cqc;
$cqc = $wp_query->current_post;
}, 100, 1);
La bellezza di questa soluzione è che, quando entri in una query personalizzata e ritorni nel loop principale, verrà reimpostato al contatore corretto in entrambi i casi. Finché sei all'interno di una query (cosa che accade sempre in WordPress, anche se non te ne rendi conto), il tuo contatore sarà corretto. Questo perché la query principale viene eseguita con la stessa classe!
Esempio:
global $cqc;
while(have_posts()): the_post();
echo $cqc; // Mostrerà 0
the_title();
$custom_query = new WP_Query(array('post_type' => 'portfolio'));
while($custom_query->have_posts()): $custom_query->the_post();
echo $cqc; // Mostrerà 0, 1, 2, 34
the_title();
endwhile;
echo $cqc; // Mostrerà 0 di nuovo
endwhile;

Stavo cercando di fare la stessa cosa, ma al di fuori del loop. Fondamentalmente volevo poter scoprire l'indice di un post dal suo ID. Ecco cosa ho trovato:
<?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;
}
Questo era puramente per il design, poiché il cliente voleva dei numeri accanto ai post, anche se il post era da solo in una "casella di post in evidenza". Ho anche aggiunto uno zero iniziale usando: <?php echo str_pad(sleek_get_post_index($post), 2, '0', STR_PAD_LEFT) ?>
.
