Imprimer le numéro de publication actuel dans la boucle

15

Je travaille sur WordPress où j'ai le code suivant pour obtenir des publications dans la boucle.

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

Quelle sortie est postée dans Loops, quelque chose comme ça ...

Post Goes Here ....

Other Post Goes Here ....

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

Ce que je veux, c'est imprimer le numéro d'index des publications actuelles dans la boucle. Exemple

 1. Post Goes Here ....

 2. Other Post Goes Here ....

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

Comment puis-je y parvenir? Merci.

MODIFIER

Ohh! Je peux le faire de cette façon.

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

Y a-t-il une autre / Meilleure façon de faire?

    
posée MANnDAaR 23.06.2011 - 08:35

6 réponses

13
  

En fait, je souhaite attribuer des identifiants selon l'index de publication!

Voici votre code que j'ai modifié.

<?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; ?>
    
réponse donnée Evan Mattson 18.07.2012 - 01:44
4

S'il ne s'agit que d'une question esthétique et que vous n'avez pas besoin d'utiliser la variable count pour un codage ultérieur, vous pouvez simplement envelopper vos publications dans une balise ol :

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

    <ol>

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

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

        <?php endwhile; ?>

    </ol>

<?php endif; ?>
    
réponse donnée mike23 23.06.2011 - 09:12
2

pour une raison quelconque, vous avez déjà une variable de compteur dans la boucle; si cela n’est pas utilisé à d’autres fins, rappelez-le simplement:

<?php echo $count.'.'; ?> /// Post Content Goes Here // 
    
réponse donnée Michael 23.06.2011 - 13:36
1

Bonjour, je suis tombé sur ce fil, me demandant comment faire cela aussi. J'ai découvert que c'était trop facile. Dans le fichier de modèle principal, par exemple index.php, déclarez une variable $ post_idx avant la boucle et incrémentez cette variable dans la boucle. Comme ceci:

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

Ensuite, dans votre modèle de contenu (par exemple, content.php) qui est exécuté à chaque fois dans la boucle, créez simplement $ post_idx global, puis utilisez-le selon vos besoins:

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

C'est ça!

    
réponse donnée Jerry303 18.07.2012 - 00:36
0

Je cherchais à faire la même chose, mais en dehors de la boucle. En gros, je voulais être capable de trouver l'index d'une publication à partir de son identifiant. Voici ce que je suis venu avec:

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

C’était purement pour la conception car le client voulait des numéros à côté des messages, même si le message était lui-même dans une zone "message en vedette". J'ai également ajouté un zéro non significatif en utilisant: <?php echo str_pad(sleek_get_post_index($post), 2, '0', STR_PAD_LEFT) ?> .

    
réponse donnée powerbuoy 24.10.2016 - 12:25
0

Même si cette question est ancienne, je vais la poser ici au cas où quelqu'un venant d'une recherche Google aurait besoin d'une réponse plus flexible.

Au fil du temps, j'ai développé une solution WP_Query ou globalement agnostique aux requêtes. Lorsque vous utilisez un WP_Query personnalisé, vous ne pouvez utiliser que include ou require pour pouvoir utiliser les variables de votre $custom_query , mais dans certains cas (qui sont la plupart du temps pour moi!), Les parties de modèle que je crée sont parfois utilisées dans une requête globale (telle que des modèles d'archive) ou dans un WP_Query personnalisé (comme pour interroger un type de publication personnalisé sur la page de couverture). Cela signifie que j'ai besoin d'un compteur pour être accessible de manière globale, quel que soit le type de requête. WordPress ne le rend pas disponible, mais voici comment y arriver grâce à quelques crochets.

Placez ceci dans votre functions.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 beauté de cette solution réside dans le fait que, lorsque vous entrez dans une requête personnalisée et que vous revenez dans la boucle générale, elle sera réinitialisée dans le bon sens. Tant que vous êtes dans une requête (ce qui est toujours le cas dans WordPress, vous le saviez peu), votre compteur sera correct. En effet, la requête principale est exécutée avec la même classe!

Exemple:

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;
    
réponse donnée David Lapointe Gilbert 25.07.2017 - 15:25

Lire d'autres questions sur les étiquettes