Imprimir el número de índice de publicación actual dentro del bucle

15

Estoy trabajando en WordPress donde tengo el siguiente código para obtener publicaciones dentro de 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++;

        ?>

        /// Post Content Goes Here //

        <?php endwhile; endif; ?>

Qué publicaciones de salida dentro de los bucles son algo como esto ...

Post Goes Here ....

Other Post Goes Here ....

Another Post Goes Here ....
.....

Lo que quiero es imprimir el número de índice de las publicaciones actuales dentro del bucle. Ejemplo

 1. Post Goes Here ....

 2. Other Post Goes Here ....

 3. Another Post Goes Here ....
 .....

¿Cómo puedo lograr esto? Gracias.

EDIT

Ohh! Puedo hacerlo de esta manera ...

<?php 
echo $wp_query->current_post +1; 
?>

¿Hay alguna otra forma / mejor?

    
pregunta MANnDAaR 23.06.2011 - 08:35

6 respuestas

13
  

En realidad, quiero asignar ID según el índice de publicación.

Aquí está su código que modifiqué.

<?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; ?>">

        <!-- Post Content Goes Here -->

    </div>

<?php endwhile; endif; ?>
    
respondido por el Evan Mattson 18.07.2012 - 01:44
4

Si es solo una cuestión estética y no necesitas usar la variable de conteo para una mayor codificación, puedes envolver tus publicaciones en una etiqueta ol :

<?php if ( have_posts() ) : ?>

    <ol>

        <?php while ( have_posts() ) : the_post(); ?>

            <li> <!-- Post Content Goes Here --> </li>

        <?php endwhile; ?>

    </ol>

<?php endif; ?>
    
respondido por el mike23 23.06.2011 - 09:12
2

por alguna razón, ya tienes una variable de contador en el bucle; Si esto no se usa para otros propósitos, simplemente repítalo:

<?php echo $count.'.'; ?> /// Post Content Goes Here // 
    
respondido por el Michael 23.06.2011 - 13:36
1

Hola, me topé con este hilo, preguntándome cómo hacerlo también. Descubrí que es muy fácil. En el archivo de plantilla principal, por ejemplo index.php, declare una variable $ post_idx antes del bucle, y dentro del incremento del bucle esa var. Así:

<?php $post_idx = 0; while ( have_posts() ) : the_post(); ?>
  <?php
    get_template_part( 'content', get_post_format() );
    $post_idx++;
  ?>
<?php endwhile; ?>

Luego, en su plantilla de contenido (por ejemplo, content.php) que se ejecuta cada vez dentro del bucle, simplemente haga $ post_idx global y luego utilícelo según sus necesidades:

global $post_idx;
print "<p>{$post_idx}</p>";

Eso es todo!

    
respondido por el Jerry303 18.07.2012 - 00:36
0

Estaba buscando hacer lo mismo, pero fuera del bucle. Básicamente quería poder averiguar 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 fue puramente para el diseño, ya que el cliente quería números junto a las publicaciones, incluso si la publicación estaba 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) ?> .

    
respondido por el powerbuoy 24.10.2016 - 12:25
0

Incluso si esta pregunta es antigua, pondré esto aquí en caso de que alguien proveniente de una Búsqueda de Google necesite una respuesta más flexible.

A lo largo del tiempo, desarrollé una solución para ser WP_Query o agnóstico de consultas globales. Cuando usa un WP_Query personalizado, está limitado a usar solo include o require para poder usar las variables en su $custom_query , pero en algunos casos (¡en la mayoría de los casos para mí!), Las partes de la plantilla que creo se usan algunas veces en una consulta global (como las plantillas de archivo) o en un WP_Query personalizado (como consultar un tipo de publicación personalizada en la página frontal). Eso significa que necesito un contador para poder acceder a todo el mundo independientemente del tipo de consulta. WordPress no lo hace disponible, pero aquí hay cómo hacerlo gracias a algunos ganchos.

Coloca esto en tus funciones.php

/**
 * Create a globally accessible counter for all queries
 * Even custom new WP_Query!
 */

// Initialize your variables
add_action('init', function(){
    global $cqc;
    $cqc = -1;
});

// At loop start, always make sure the counter is -1
// This is because WP_Query calls "next_post" for each post,
// even for the first one, which increments by 1
// (meaning the first post is going to be 0 as expected)
add_action('loop_start', function($q){
    global $cqc;
    $cqc = -1;
}, 100, 1);

// At each iteration of a loop, this hook is called
// We store the current instance's counter in our global variable
add_action('the_post', function($p, $q){
    global $cqc;
    $cqc = $q->current_post;
}, 100, 2);

// At each end of the query, we clean up by setting the counter to
// the global query's counter. This allows the custom $cqc variable
// to be set correctly in the main page, post or query, even after
// having executed a custom WP_Query.
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, al ingresar en una consulta personalizada y regresar al ciclo general, se reiniciará en el contador correcto de cualquier manera. Mientras esté dentro de una consulta (lo cual siempre fue el caso en WordPress, poco sabía), su contador será correcto. ¡Esto se debe a que la consulta principal se ejecuta con la misma clase!

Ejemplo:

global $cqc;
while(have_posts()): the_post();
    echo $cqc; // Will output 0
    the_title();

    $custom_query = new WP_Query(array('post_type' => 'portfolio'));
    while($custom_query->have_posts()): $custom_query->the_post();
        echo $cqc; // Will output 0, 1, 2, 34
        the_title();
    endwhile;

    echo $cqc; // Will output 0 again
endwhile;
    
respondido por el David Lapointe Gilbert 25.07.2017 - 15:25

Lea otras preguntas en las etiquetas