Imprime o número do índice de postagem atual no Loop

15

Estou trabalhando no WordPress, onde tenho o seguinte código para obter postagens em 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; ?>

Quais postagens de saída dentro do Loops são algo assim ...

Post Goes Here ....

Other Post Goes Here ....

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

O que eu quero é imprimir o número atual do índice de posts dentro do loop. Exemplo

 1. Post Goes Here ....

 2. Other Post Goes Here ....

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

Como posso conseguir isso? Obrigado.

EDITAR

Ohh! Eu posso fazer assim ..

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

Existe alguma outra maneira / melhor?

    
por MANnDAaR 23.06.2011 / 08:35

6 respostas

13
  

Na verdade, quero atribuir IDs por índice de postagem!

Aqui está o seu código que eu modifiquei.

<?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; ?>
    
por Evan Mattson 18.07.2012 / 01:44
4

Se é apenas uma coisa estética e você não precisa usar a variável count para codificação adicional, basta colocar suas postagens em uma tag ol :

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

    <ol>

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

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

        <?php endwhile; ?>

    </ol>

<?php endif; ?>
    
por mike23 23.06.2011 / 09:12
2

por alguma razão, você já tem uma variável de contador no loop; se isso não for usado para outros propósitos, simplesmente repita:

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

Oi, eu esbarrei neste tópico, imaginando como fazer isso também. Descobri que é muito fácil. No arquivo de modelo principal, por exemplo, index.php, declare uma variável $ post_idx antes do loop e dentro do incremento de loop que var. Assim:

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

Em seguida, no seu modelo de conteúdo (por exemplo, content.php) que é executado toda vez dentro do loop, apenas torne $ post_idx global e use-o de acordo com suas necessidades:

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

É isso aí!

    
por Jerry303 18.07.2012 / 00:36
0

Eu estava procurando fazer a mesma coisa, mas fora do loop. Basicamente, eu queria ser capaz de descobrir o índice de um post do seu ID. Aqui está o que eu criei:

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

Isso era puramente para design, já que o cliente queria números próximos aos posts, mesmo que o post estivesse em uma caixa de "postagens em destaque". Eu também adicionei um zero à esquerda usando: <?php echo str_pad(sleek_get_post_index($post), 2, '0', STR_PAD_LEFT) ?> .

    
por powerbuoy 24.10.2016 / 12:25
0

Mesmo que essa questão seja antiga, vou colocar isso aqui, caso alguém que venha de uma Pesquisa do Google precise de uma resposta mais flexível.

Ao longo do tempo, desenvolvi uma solução para ser WP_Query ou agnóstico de consulta global. Quando você usa um WP_Query personalizado, você está confinado a usar apenas include ou require para poder usar as variáveis em seu $custom_query , mas em alguns casos (que são a maioria dos casos para mim!), As partes do modelo que crio são algumas vezes usadas em uma consulta global (como modelos de archive) ou em um WP_Query personalizado (como a consulta de um tipo de postagem personalizado na primeira página). Isso significa que eu preciso de um contador para ser globalmente acessível, independentemente do tipo de consulta. O WordPress não disponibiliza isso, mas veja como fazer isso acontecer graças a alguns ganchos.

Coloque isso em suas funções.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);

A beleza desta solução é que, à medida que você entra em uma consulta personalizada e volta no loop geral, ela será redefinida para o contador direito de qualquer forma. Contanto que você esteja dentro de uma consulta (o que é sempre o caso no WordPress, pouco sabia), seu contador estará correto. Isso porque a consulta principal é executada com a mesma classe!

Exemplo:

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;
    
por David Lapointe Gilbert 25.07.2017 / 15:25

Tags