Cetak nomor Indeks Posting Sekarang dalam Loop

17

Saya sedang mengerjakan WordPress di mana saya memiliki kode berikut untuk mendapatkan posting dalam lingkaran.

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

Keluaran yang memposting di dalam Loop sesuatu seperti ini ...

Post Goes Here ....

Other Post Goes Here ....

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

Yang saya inginkan adalah mencetak nomor indeks posting saat ini dalam lingkaran. Contoh

 1. Post Goes Here ....

 2. Other Post Goes Here ....

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

Bagaimana Saya Bisa Mencapai Ini? Terima kasih.

EDIT

Ohh! Saya bisa melakukannya dengan cara ini ..

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

Apakah ada cara lain / Lebih Baik?

MANnDAaR
sumber

Jawaban:

16

Sebenarnya saya ingin menetapkan ID sesuai indeks postingan!

Inilah kode Anda yang saya modifikasi.

<?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
sumber
Sepertinya jawaban ini memberikan inti dari jawaban yang mengarah pada solusi.
New Alexandria
4

Jika itu hanya hal estetika dan Anda tidak perlu menggunakan variabel jumlah untuk pengkodean lebih lanjut, Anda bisa membungkus posting Anda dengan oltag:

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

    <ol>

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

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

        <?php endwhile; ?>

    </ol>

<?php endif; ?>
mike23
sumber
Sebenarnya saya ingin menetapkan ID sesuai indeks postingan!
MANnDAaR
@ MANnDAaR, itulah yang dilakukannya. Jika loop Anda memiliki 10 posting, Anda akan melihat daftar yang diurutkan, yang diberi nomor mulai 1 hingga 10. (lihat contoh di sini )
mike23
3

untuk beberapa alasan, Anda sudah memiliki variabel penghitung di loop; jika ini tidak digunakan untuk tujuan lain, cukup gema:

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

Hai, saya bertemu thread ini, bertanya-tanya bagaimana melakukannya juga. Ternyata sangat mudah. Dalam file templat utama, misalnya index.php, deklarasikan variabel $ post_idx sebelum loop, dan dalam penambahan loop yang var. Seperti ini:

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

Kemudian di templat konten Anda (misalnya content.php) yang dieksekusi setiap kali dalam loop, cukup buat $ post_idx global dan kemudian gunakan sesuai kebutuhan Anda:

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

Itu dia!

Jerry303
sumber
Anda harus mengawali variabel global untuk menghindari penamaan tabrakan.
fuxia
0

Saya mencari untuk melakukan hal yang sama, tetapi di luar lingkaran. Pada dasarnya saya ingin mengetahui indeks posting dari ID-nya. Inilah yang saya pikirkan:

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

Ini murni untuk desain karena klien menginginkan angka di sebelah pos, bahkan jika pos itu sendiri dalam kotak "pos fitur". Saya juga menambahkan nol menggunakan: <?php echo str_pad(sleek_get_post_index($post), 2, '0', STR_PAD_LEFT) ?>.

Powerbuoy
sumber
0

Bahkan jika pertanyaan ini sudah lama, saya akan meletakkannya di sini kalau-kalau seseorang yang berasal dari Google Search membutuhkan jawaban yang lebih fleksibel.

Seiring waktu, saya mengembangkan solusi menjadi WP_Queryagnostik atau permintaan global. Saat Anda menggunakan kustom WP_Query, Anda terbatas hanya menggunakan includeatau requireuntuk dapat menggunakan variabel pada Anda $custom_query, tetapi dalam beberapa kasus (yang kebanyakan kasus bagi saya!), Bagian templat yang saya buat beberapa kali digunakan dalam kueri global (seperti templat arsip) atau dalam kebiasaan WP_Query(seperti menanyakan jenis posting kustom di halaman depan). Itu berarti bahwa saya memerlukan penghitung agar dapat diakses secara global terlepas dari jenis kueri. WordPress tidak menyediakan ini, tetapi di sini adalah cara untuk mewujudkannya berkat beberapa kaitan.

Tempatkan ini di functions.php Anda

/**
 * 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);

Keindahan dari solusi ini adalah bahwa, saat Anda memasukkan permintaan khusus dan kembali ke loop umum, itu akan diatur ulang ke penghitung yang tepat. Selama Anda berada di dalam kueri (yang selalu terjadi di WordPress, sedikit yang Anda tahu), penghitung Anda akan benar. Itu karena permintaan utama dijalankan dengan kelas yang sama!

Contoh:

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
sumber