Stampare il Numero Indice del Post Corrente all'interno del Loop

23 giu 2011, 09:35:15
Visualizzazioni: 59.2K
Voti: 23

Sto lavorando su WordPress dove ho il seguente codice per ottenere i post all'interno 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++;

        ?>

        /// Il Contenuto del Post Va Qui //

        <?php endwhile; endif; ?>

Che mostra i post all'interno del Loop in questo modo...

Il Post Va Qui ....

Un Altro Post Va Qui ....

Un Altro Post Ancora Va Qui ....
.....

Quello che voglio fare è stampare il numero dell'indice del post corrente all'interno del loop. Esempio

1. Il Post Va Qui ....

2. Un Altro Post Va Qui ....

3. Un Altro Post Ancora Va Qui ....
.....

Come posso ottenere questo risultato? Grazie.

MODIFICA

Oh! Posso farlo in questo modo..

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

C'è qualche altro modo / modo migliore?

0
Tutte le risposte alla domanda 6
1
21

In realtà voglio assegnare gli ID in base all'indice del post!

Ecco il tuo codice che ho modificato.

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

        <!-- Contenuto del Post Va Qui -->

    </div>

<?php endwhile; endif; ?>
18 lug 2012 02:44:35
Commenti

Sembra che questa risposta abbia fornito l'essenza della soluzione che ha portato alla risoluzione del problema.

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

Se è solo una questione estetica e non hai bisogno di utilizzare la variabile count per ulteriore codice, puoi semplicemente racchiudere i tuoi post in un tag ol:

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

    <ol>

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

            <li> <!-- Il Contenuto del Post Va Qui --> </li>

        <?php endwhile; ?>

    </ol>

<?php endif; ?>
23 giu 2011 10:12:10
Commenti

In realtà voglio assegnare gli ID in base all'indice del post!

MANnDAaR MANnDAaR
23 giu 2011 12:09:26

@MANnDAaR, è esattamente ciò che fa. Se il tuo loop ha 10 post, vedrai una lista ordinata, numerata da 1 a 10. (vedi esempio qui)

mike23 mike23
23 giu 2011 12:15:43
1

per qualche motivo, hai già una variabile contatore nel ciclo; se questa non viene utilizzata per altri scopi, puoi semplicemente stamparla:

<?php echo $count.'.'; ?> /// Il Contenuto del Post Va Qui // 
23 giu 2011 14:36:26
Commenti

Assolutamente. Questo è tutto ciò che dovevo fare. Usa la tua variabile $count che è già lì. Grazie

anthonyCam anthonyCam
28 giu 2020 18:23:10
2

Ciao, mi sono imbattuto in questo thread cercando anche io come fare questa cosa. Ho scoperto che è incredibilmente semplice. Nel file template principale, ad esempio index.php, dichiara una variabile $post_idx prima del loop, e all'interno del loop incrementa quella variabile. In questo modo:

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

Poi nel tuo template del contenuto (ad esempio content.php) che viene eseguito ogni volta all'interno del loop, rendi $post_idx globale e usalo secondo le tue necessità:

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

Ecco fatto!

18 lug 2012 01:36:49
Commenti

Dovresti prefissare le variabili globali per evitare conflitti di denominazione.

fuxia fuxia
10 ott 2012 19:43:53

Questa è la mia risposta preferita - fai funzionare WordPress per te!

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

Anche se questa domanda è vecchia, la riporto qui nel caso qualcuno arrivando da una ricerca su Google abbia bisogno di una risposta più flessibile.

Nel tempo, ho sviluppato una soluzione per essere indipendente da WP_Query o dalla query globale. Quando usi una WP_Query personalizzata, sei limitato a usare solo include o require per poter utilizzare le variabili nella tua $custom_query, ma in alcuni casi (che per me sono la maggior parte!), i template parts che creo a volte vengono usati in una query globale (come i template di archivio) o in una WP_Query personalizzata (come interrogare un custom post type nella homepage). Ciò significa che ho bisogno di un contatore accessibile globalmente indipendentemente dal tipo di query. WordPress non lo rende disponibile, ma ecco come farlo accadere grazie ad alcuni hook.

Inserisci questo nel tuo functions.php

/**
 * Crea un contatore accessibile globalmente per tutte le query
 * Anche per nuove WP_Query personalizzate!
 */

// Inizializza le tue variabili
add_action('init', function(){
    global $cqc;
    $cqc = -1;
});

// All'inizio del loop, assicurati sempre che il contatore sia -1
// Questo perché WP_Query chiama "next_post" per ogni post,
// anche per il primo, che incrementa di 1
// (significa che il primo post sarà 0 come previsto)
add_action('loop_start', function($q){
    global $cqc;
    $cqc = -1;
}, 100, 1);

// Ad ogni iterazione di un loop, questo hook viene chiamato
// Memorizziamo il contatore dell'istanza corrente nella nostra variabile globale
add_action('the_post', function($p, $q){
    global $cqc;
    $cqc = $q->current_post;
}, 100, 2);

// Alla fine di ogni query, ripuliamo impostando il contatore
// sul contatore della query globale. Questo permette alla variabile $cqc
// di essere impostata correttamente nella pagina principale, post o query, anche dopo
// aver eseguito una WP_Query personalizzata.
add_action( 'loop_end', function($q){
    global $wp_query, $cqc;
    $cqc = $wp_query->current_post;
}, 100, 1);

La bellezza di questa soluzione è che, quando entri in una query personalizzata e ritorni nel loop principale, verrà reimpostato al contatore corretto in entrambi i casi. Finché sei all'interno di una query (cosa che accade sempre in WordPress, anche se non te ne rendi conto), il tuo contatore sarà corretto. Questo perché la query principale viene eseguita con la stessa classe!

Esempio:

global $cqc;
while(have_posts()): the_post();
    echo $cqc; // Mostrerà 0
    the_title();

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

    echo $cqc; // Mostrerà 0 di nuovo
endwhile;
25 lug 2017 16:25:07
Commenti

Fantastico! Potrebbe non essere la soluzione giusta o migliore per questa domanda, ma è un codice molto utile.

Corey Corey
11 mar 2022 23:21:14
0

Stavo cercando di fare la stessa cosa, ma al di fuori del loop. Fondamentalmente volevo poter scoprire l'indice di un post dal suo ID. Ecco cosa ho trovato:

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

Questo era puramente per il design, poiché il cliente voleva dei numeri accanto ai post, anche se il post era da solo in una "casella di post in evidenza". Ho anche aggiunto uno zero iniziale usando: <?php echo str_pad(sleek_get_post_index($post), 2, '0', STR_PAD_LEFT) ?>.

24 ott 2016 13:25:26