Imprimir o número do índice de postagem atual no loop

17

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

Que Saída publica dentro de Loops mais ou menos assim ...

Post Goes Here ....

Other Post Goes Here ....

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

O que eu quero é imprimir o número do índice das postagens atuais no 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 desta maneira ..

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

Existe alguma outra maneira / melhor?

MANnDAaR
fonte

Respostas:

16

Na verdade, eu quero atribuir IDs de acordo com o índice do post!

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; ?>
Evan Mattson
fonte
Parece que esta resposta forneceu a essência da resposta que levou à solução.
Nova Alexandria
4

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

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

    <ol>

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

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

        <?php endwhile; ?>

    </ol>

<?php endif; ?>
mike23
fonte
Na verdade, eu quero atribuir IDs de acordo com o índice do post!
23411 MANnDAaR
@MANnDAaR, é exatamente o que faz. Se o seu circuito tem 10 lugares, você veria uma lista ordenada, numeradas de 1 a 10. (ver exemplo aqui )
mike23
3

por alguma razão, você já tem uma variável de contador no loop; se isso não for usado para outros fins, basta repeti-lo:

<?php echo $count.'.'; ?> /// Post Content Goes Here // 
Michael
fonte
1

Oi eu esbarrei neste tópico, querendo saber 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 no incremento do loop que var. Como isso:

<?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 no loop, torne global $ post_idx global e use-o de acordo com suas necessidades:

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

É isso aí!

Jerry303
fonte
Você deve prefixar variáveis ​​globais para evitar colisões de nomes.
fuxia
0

Eu estava olhando para fazer a mesma coisa, mas fora do circuito. Basicamente, eu queria poder descobrir o índice de uma postagem a partir do seu ID. Aqui está o que eu vim com:

<?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 foi feito exclusivamente para o design, pois o cliente queria números próximos às postagens, mesmo que a postagem estivesse sozinha em uma caixa "postagem em destaque". Eu também acrescentou um zero à esquerda usando: <?php echo str_pad(sleek_get_post_index($post), 2, '0', STR_PAD_LEFT) ?>.

powerbuoy
fonte
0

Mesmo se essa pergunta for antiga, colocarei isso aqui caso alguém proveniente de uma Pesquisa do Google precise de uma resposta mais flexível.

Ao longo do tempo, desenvolvi uma solução para que WP_Queryas consultas globais ou sejam agnósticas. Quando você usa um costume WP_Query, fica confinado a usar apenas includeou requirepoder usar as variáveis ​​no seu $custom_query, mas, em alguns casos (que são a maioria dos casos para mim!), As partes do modelo que eu crio são algumas vezes usadas em uma consulta global (como modelos de arquivo morto) ou em um personalizado WP_Query(como consultar um tipo de postagem personalizado na primeira página). Isso significa que eu preciso de um contador para estar globalmente acessível, independentemente do tipo de consulta. O WordPress não disponibiliza isso, mas veja como fazê-lo 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 vantagem desta solução é que, ao inserir uma consulta personalizada e retornar ao loop geral, ela será redefinida para o contador certo de qualquer maneira. Contanto que você esteja dentro de uma consulta (que é sempre o caso do WordPress, pouco você sabia), seu contador estará correto. Isso ocorre 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;
David Lapointe Gilbert
fonte