Imprimir el número de índice del Post actual dentro del Loop
Estoy trabajando en WordPress donde tengo el siguiente código para obtener posts dentro 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++;
?>
/// El Contenido del Post va Aquí //
<?php endwhile; endif; ?>
El cual muestra los posts dentro del Loop algo como esto...
Post va Aquí ....
Otro Post va Aquí ....
Otro Post más va Aquí ....
.....
Lo que quiero es imprimir el número de índice del post actual dentro del loop. Por ejemplo
1. Post va Aquí ....
2. Otro Post va Aquí ....
3. Otro Post más va Aquí ....
.....
¿Cómo puedo lograr esto? Gracias.
EDICIÓN
¡Oh! Puedo hacerlo de esta manera..
<?php
echo $wp_query->current_post +1;
?>
¿Hay alguna otra forma / mejor manera?

Actualmente quiero asignar IDs según el índice de la publicación!
Aquí está tu código que he modificado.
<?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; ?>">
<!-- El contenido de la publicación va aquí -->
</div>
<?php endwhile; endif; ?>

Si es solo una cuestión estética y no necesitas usar la variable de conteo para más código, simplemente puedes envolver tus publicaciones en una etiqueta ol
:
<?php if ( have_posts() ) : ?>
<ol>
<?php while ( have_posts() ) : the_post(); ?>
<li> <!-- El contenido de la publicación va aquí --> </li>
<?php endwhile; ?>
</ol>
<?php endif; ?>

@MANnDAaR, eso es exactamente lo que hace. Si tu bucle tiene 10 publicaciones, verías una lista ordenada, numerada del 1 al 10. (mira el ejemplo aquí)

Hola, me encontré con este hilo y también me preguntaba cómo hacer eso. Resulta que es súper fácil. En el archivo de plantilla principal, por ejemplo index.php, declara una variable $post_idx antes del bucle, y dentro del bucle incrementa esa variable. Así:
<?php $post_idx = 0; while ( have_posts() ) : the_post(); ?>
<?php
get_template_part( 'content', get_post_format() );
$post_idx++;
?>
<?php endwhile; ?>
Luego, en tu plantilla de contenido (por ejemplo content.php) que se ejecuta cada vez dentro del bucle, simplemente haz global $post_idx y luego úsalo según tus necesidades:
global $post_idx;
print "<p>{$post_idx}</p>";
¡Eso es todo!

Aunque esta pregunta sea antigua, dejaré esto aquí por si alguien que llega desde una búsqueda de Google necesita una respuesta más flexible.
Con el tiempo, desarrollé una solución para ser agnóstico a WP_Query
o consultas globales. Cuando usas un WP_Query
personalizado, estás limitado a usar solo include
o require
para poder usar las variables en tu $custom_query
, pero en algunos casos (¡que son la mayoría para mí!), las partes de plantilla que creo a veces se usan en una consulta global (como plantillas de archivo) o en un WP_Query
personalizado (como consultar un tipo de publicación personalizada en la página de inicio). Eso significa que necesito un contador que sea accesible globalmente, independientemente del tipo de consulta. WordPress no ofrece esto, pero así es como lograrlo gracias a algunos hooks.
Coloca esto en tu functions.php
/**
* Crea un contador accesible globalmente para todas las consultas
* ¡Incluso nuevas WP_Query personalizadas!
*/
// Inicializa tus variables
add_action('init', function(){
global $cqc;
$cqc = -1;
});
// Al inicio del loop, asegúrate siempre de que el contador sea -1
// Esto es porque WP_Query llama a "next_post" para cada publicación,
// incluso para la primera, lo que incrementa en 1
// (lo que significa que la primera publicación será 0 como se espera)
add_action('loop_start', function($q){
global $cqc;
$cqc = -1;
}, 100, 1);
// En cada iteración de un loop, se llama a este hook
// Almacenamos el contador de la instancia actual en nuestra variable global
add_action('the_post', function($p, $q){
global $cqc;
$cqc = $q->current_post;
}, 100, 2);
// Al final de cada consulta, limpiamos estableciendo el contador al
// contador de la consulta global. Esto permite que la variable personalizada $cqc
// se establezca correctamente en la página principal, publicación o consulta, incluso después
// de haber ejecutado una WP_Query personalizada.
add_action( 'loop_end', function($q){
global $wp_query, $cqc;
$cqc = $wp_query->current_post;
}, 100, 1);
La belleza de esta solución es que, a medida que entras en una consulta personalizada y vuelves al loop general, se restablecerá al contador correcto de cualquier manera. Siempre que estés dentro de una consulta (que siempre es el caso en WordPress, aunque no lo sepas), tu contador será correcto. ¡Eso es porque la consulta principal se ejecuta con la misma clase!
Ejemplo :
global $cqc;
while(have_posts()): the_post();
echo $cqc; // Mostrará 0
the_title();
$custom_query = new WP_Query(array('post_type' => 'portfolio'));
while($custom_query->have_posts()): $custom_query->the_post();
echo $cqc; // Mostrará 0, 1, 2, 34
the_title();
endwhile;
echo $cqc; // Mostrará 0 nuevamente
endwhile;

Estaba buscando hacer lo mismo, pero fuera del bucle. Básicamente quería poder encontrar el índice de una publicación a partir de su ID. Esto es lo que se me ocurrió:
<?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;
}
Esto era puramente por diseño, ya que el cliente quería números junto a las publicaciones, incluso si la publicación estaba sola en un cuadro de "publicación destacada". También agregué un cero inicial usando: <?php echo str_pad(sleek_get_post_index($post), 2, '0', STR_PAD_LEFT) ?>
.
