Imprimir el número de índice del Post actual dentro del Loop

23 jun 2011, 09:35:15
Vistas: 59.2K
Votos: 23

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?

0
Todas las respuestas a la pregunta 6
1
21

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; ?>
18 jul 2012 02:44:35
Comentarios

Parece que esta respuesta proporcionó la esencia de la solución que llevó a resolver el problema.

New Alexandria New Alexandria
30 mar 2016 19:38:53
2

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; ?>
23 jun 2011 10:12:10
Comentarios

¡En realidad quiero asignar ID's según el índice de la publicación!

MANnDAaR MANnDAaR
23 jun 2011 12:09:26

@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í)

mike23 mike23
23 jun 2011 12:15:43
1

por alguna razón, ya tienes una variable contador en el bucle; si no se usa para otros propósitos, simplemente imprímela:

<?php echo $count.'.'; ?> /// El Contenido del Post Va Aquí //
23 jun 2011 14:36:26
Comentarios

Absolutamente. Esto fue todo lo que tuve que hacer. Usa tu variable $count que ya está ahí. Gracias

anthonyCam anthonyCam
28 jun 2020 18:23:10
2

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!

18 jul 2012 01:36:49
Comentarios

Debes prefijar las variables globales para evitar colisiones de nombres.

fuxia fuxia
10 oct 2012 19:43:53

Esta es mi respuesta favorita - ¡haz que WordPress trabaje para ti!

Jillian Hoenig Jillian Hoenig
9 oct 2024 22:32:59
1

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;
25 jul 2017 16:25:07
Comentarios

¡Esto es genial! Puede que no sea la solución correcta o la mejor para esta pregunta, pero es un código muy útil.

Corey Corey
11 mar 2022 23:21:14
0

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

24 oct 2016 13:25:26