Döngü içinde Geçerli Mesaj Dizin numarasını yazdır


17

Ben döngü içinde mesajları almak için aşağıdaki kodu var WordPress üzerinde çalışıyorum.

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

Hangi Çıktı içinde yayınlar Böyle bir şey döngüler ...

Post Goes Here ....

Other Post Goes Here ....

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

Ne istiyorum mevcut mesajlar dizin numarası döngü içinde yazdırmak için. Misal

 1. Post Goes Here ....

 2. Other Post Goes Here ....

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

Bunu nasıl başarabilirim ? Teşekkürler.

DÜZENLE

Ohh! Bu şekilde yapabilirim ..

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

Başka / Daha iyi bir yol var mı?

Yanıtlar:


16

Aslında yazı dizinine göre kimlik atamak istiyorum!

İşte değiştirdiğim kodun.

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

Bu cevap, çözüme götüren cevabın özünü sağlamış gibi görünüyor.
Yeni İskenderiye

4

Bu sadece estetik bir şeyse ve daha fazla kodlama için count değişkenini kullanmanız gerekmiyorsa, yayınlarınızı bir oletikete sarmanız yeterlidir :

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

    <ol>

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

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

        <?php endwhile; ?>

    </ol>

<?php endif; ?>

Aslında yazı dizinine göre kimlik atamak istiyorum!
MANnDAaR

@MANnDAaR, aynen öyle.
Döngünüzde

3

herhangi bir nedenle, döngüde zaten bir sayaç değişkeniniz var; bu başka amaçlar için kullanılmazsa, yankılamanız yeterlidir:

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

1

Merhaba ben de nasıl yapacağını merak, bu konuya çarptı. Kanlı kolay olduğunu öğrendim. Ana şablon dosyasında, örneğin index.php, döngüden önce ve var olan döngü artışı içinde $ post_idx değişkenini bildirir. Bunun gibi:

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

Ardından, döngü içinde her zaman yürütülen içerik şablonunuzda (örneğin, content.php), $ post_idx değerini global yapın ve ardından gereksinimleriniz için kullanın:

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

Bu kadar!


Çarpışmaları adlandırmaktan kaçınmak için genel değişkenlere ön ek eklemeniz gerekir.
fuxia

0

Aynı şeyi yapmak istiyordum, ama döngünün dışında. Temelde bir gönderinin dizinini kimliğinden bulmak istedim. İşte ben geldim:

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

Gönderi tek başına "özellikli bir gönderi" kutusunda olsa bile, müşteri gönderilerin yanında sayılar istediği için bu tamamen tasarım içindi. Ayrıca kullanarak önüne sıfır eklendi: <?php echo str_pad(sleek_get_post_index($post), 2, '0', STR_PAD_LEFT) ?>.


0

Bu soru eski olsa bile, bir Google Arama'dan gelen birinin daha esnek bir cevaba ihtiyacı olması durumunda bunu buraya koyacağım.

Zamanla, WP_Queryagnostik olmak için küresel bir çözüm geliştirdim . Bir özel WP_Querykullandığınızda, yalnızca kullanmak includeveya requiredeğişkenleri kullanabilmekle sınırlandırılırsınız $custom_query, ancak bazı durumlarda (benim için çoğu durumda!) Oluşturduğum şablon parçaları, bazen genel bir sorguda kullanılır (arşiv şablonları gibi) veya özel olarak WP_Query(ön sayfada özel bir yayın türünü sorgulamak gibi). Bu, sorgu türünden bağımsız olarak küresel olarak erişilebilir olması için bir sayaca ihtiyacım olduğu anlamına gelir. WordPress bunu sağlamaz, ancak bazı kancalar sayesinde bunu nasıl gerçekleştirebilirsiniz.

Bunu işlevlerinize yerleştirin. 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);

Bu çözümün güzelliği, özel bir sorguya girip genel döngüye geri döndüğünüzde, her iki şekilde de doğru sayaca sıfırlanacaktır. Bir sorgunun içinde olduğunuz sürece (WordPress'de her zaman böyle, çok az biliyordunuz), sayacınız doğru olacaktır. Çünkü ana sorgu aynı sınıfla yürütülür!

Misal :

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;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.