Afișarea numărului de index al articolului curent în interiorul buclei

23 iun. 2011, 09:35:15
Vizualizări: 59.2K
Voturi: 23

Lucrez în WordPress unde am următorul cod pentru a obține articole în interiorul buclei.

        <?php
                $posts = $woo_options['woo_latest_entries'];
                query_posts('post_type=post&category_name=company');
                if ( have_posts() ) : while ( have_posts() ) : the_post(); $count++;

        ?>

        /// Conținutul Articolului Vine Aici //

        <?php endwhile; endif; ?>

Care afișează articolele în buclă în acest fel...

Articolul Apare Aici ....

Alt Articol Apare Aici ....

Încă Un Articol Apare Aici ....
.....

Ceea ce doresc este să afișez numărul de index al articolului curent în buclă. Exemplu

 1. Articolul Apare Aici ....

 2. Alt Articol Apare Aici ....

 3. Încă Un Articol Apare Aici ....
 .....

Cum pot realiza acest lucru? Mulțumesc.

EDITARE

Ah! Pot să o fac în acest fel..

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

Există și alte metode / O metodă mai bună?

0
Toate răspunsurile la întrebare 6
1
21

De fapt, vreau să atribui ID-uri în funcție de indexul postării!

Iată codul tău pe care l-am modificat.

<?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="postarea_mea_<?php echo $index; ?>">

        <!-- Conținutul postării aici -->

    </div>

<?php endwhile; endif; ?>
18 iul. 2012 02:44:35
Comentarii

Se pare că acest răspuns a oferit esența soluției care a condus la rezolvarea problemei.

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

Dacă este doar o chestiune estetică și nu ai nevoie să folosești variabila count în codul tău, poți pur și simplu să înfășori postările într-un tag ol:

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

    <ol>

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

            <li> <!-- Conținutul Postării Aici --> </li>

        <?php endwhile; ?>

    </ol>

<?php endif; ?>
23 iun. 2011 10:12:10
Comentarii

De fapt, vreau să atribui ID-uri în funcție de indexul postării!

MANnDAaR MANnDAaR
23 iun. 2011 12:09:26

@MANnDAaR, exact asta face. Dacă bucla ta are 10 postări, vei vedea o listă ordonată, numerotată de la 1 la 10. (vezi exemplul aici)

mike23 mike23
23 iun. 2011 12:15:43
1

din anumite motive, deja ai o variabilă counter în buclă; dacă aceasta nu este folosită în alte scopuri, pur și simplu afișeaz-o:

<?php echo $count.'.'; ?> /// Conținutul Postării Aici //
23 iun. 2011 14:36:26
Comentarii

Absolut. Asta este tot ce a trebuit să fac. Folosește variabila ta $count care este deja acolo. Mulțumesc

anthonyCam anthonyCam
28 iun. 2020 18:23:10
2

Salut, am dat peste acest thread și mă întrebam și eu cum să fac asta. Am aflat că e foarte ușor. În fișierul template principal, de exemplu index.php, declară o variabilă $post_idx înainte de loop, și în interiorul loop-ului incrementează acea variabilă. Iată cum:

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

Apoi, în template-ul de conținut (de exemplu content.php) care este executat de fiecare dată în loop, pur și simplu faci $post_idx global și îl folosești după nevoie:

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

Și gata!

18 iul. 2012 01:36:49
Comentarii

Ar trebui să prefixați variabilele globale pentru a evita conflictele de denumire.

fuxia fuxia
10 oct. 2012 19:43:53

Acesta este răspunsul meu preferat - fă ca WordPress să lucreze pentru tine!

Jillian Hoenig Jillian Hoenig
9 oct. 2024 22:32:59
1

Chiar dacă această întrebare este veche, voi lăsa acest răspuns aici în cazul în care cineva care vine de pe Google are nevoie de un răspuns mai flexibil.

De-a lungul timpului, am dezvoltat o soluție care să fie agnostică față de WP_Query sau interogarea globală. Când folosești un WP_Query personalizat, ești limitat la utilizarea doar a include sau require pentru a putea folosi variabilele din $custom_query, dar în unele cazuri (care sunt majoritatea pentru mine!), părțile de șablon pe care le creez sunt uneori utilizate într-o interogare globală (cum ar fi șabloanele de arhivă) sau într-un WP_Query personalizat (cum ar fi interogarea unui tip de postare personalizată pe pagina principală). Asta înseamnă că am nevoie de un contor care să fie accesibil global, indiferent de tipul de interogare. WordPress nu oferă această funcționalitate, dar iată cum o poți implementa folosind câteva hook-uri.

Puneți acest cod în functions.php

/**
 * Creează un contor accesibil global pentru toate interogările
 * Chiar și pentru WP_Query personalizate!
 */

// Inițializează variabilele
add_action('init', function(){
    global $cqc;
    $cqc = -1;
});

// La începutul buclei, asigură-te întotdeauna că contorul este -1
// Acest lucru se datorează faptului că WP_Query apelează "next_post" pentru fiecare postare,
// chiar și pentru prima, ceea ce incrementează contorul cu 1
// (adică prima postare va fi 0, așa cum ne așteptăm)
add_action('loop_start', function($q){
    global $cqc;
    $cqc = -1;
}, 100, 1);

// La fiecare iterație a buclei, acest hook este apelat
// Stocăm contorul curent al instanței în variabila noastră globală
add_action('the_post', function($p, $q){
    global $cqc;
    $cqc = $q->current_post;
}, 100, 2);

// La sfârșitul fiecărei interogări, curățăm prin setarea contorului
// la valoarea contorului interogării globale. Acest lucru permite variabilei $cqc
// să fie setată corect în pagina principală, postare sau interogare, chiar și după
// executarea unui WP_Query personalizat.
add_action( 'loop_end', function($q){
    global $wp_query, $cqc;
    $cqc = $wp_query->current_post;
}, 100, 1);

Frumusețea acestei soluții este că, pe măsură ce intri într-o interogare personalizată și revii în bucla principală, contorul va fi resetat la valoarea corectă în ambele cazuri. Atâta timp cât ești într-o interogare (ceea ce este întotdeauna cazul în WordPress, chiar dacă nu-ți dai seama), contorul tău va fi corect. Acest lucru se datorează faptului că interogarea principală este executată cu aceeași clasă!

Exemplu :

global $cqc;
while(have_posts()): the_post();
    echo $cqc; // Va afișa 0
    the_title();

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

    echo $cqc; // Va afișa din nou 0
endwhile;
25 iul. 2017 16:25:07
Comentarii

Este minunat! Poate că nu este soluția corectă sau cea mai bună pentru această întrebare, dar este un cod foarte util.

Corey Corey
11 mar. 2022 23:21:14
0

Căutam să fac același lucru, dar în afara buclei. În esență, voiam să pot afla indexul unui post folosindu-mă de ID-ul său. Iată la ce am ajuns:

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

Această funcție a fost creată strict pentru design, deoarece clientul dorea numere lângă postări, chiar și dacă postarea era singură într-un chenar "postare recomandată". Am adăugat și un zero în față folosind: <?php echo str_pad(sleek_get_post_index($post), 2, '0', STR_PAD_LEFT) ?>.

24 oct. 2016 13:25:26