พิมพ์หมายเลขดัชนีโพสต์ปัจจุบันภายในวง


17

ฉันกำลังทำงานกับ WordPress ที่ฉันมีรหัสต่อไปนี้เพื่อรับโพสต์ภายในวง

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

โพสต์เอาท์พุทใดในลูปบางอย่างเช่นนี้ ...

Post Goes Here ....

Other Post Goes Here ....

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

สิ่งที่ฉันต้องการคือการพิมพ์หมายเลขดัชนีโพสต์ปัจจุบันภายในวง ตัวอย่าง

 1. Post Goes Here ....

 2. Other Post Goes Here ....

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

ฉันจะบรรลุสิ่งนี้ได้อย่างไร ขอบคุณ

แก้ไข

โอ้! ฉันสามารถทำสิ่งนี้ได้ ..

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

มีวิธีอื่นใดหรือดีกว่า?

คำตอบ:


16

ที่จริงฉันต้องการกำหนด ID ตามดัชนีโพสต์!

นี่คือรหัสของคุณที่ฉันแก้ไข

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

ดูเหมือนว่าคำตอบนี้ให้สาระสำคัญของคำตอบที่นำไปสู่การแก้ปัญหา
ใหม่ Alexandria

4

หากเป็นเพียงเรื่องเกี่ยวกับความงามและคุณไม่จำเป็นต้องใช้ตัวแปร count สำหรับการเข้ารหัสเพิ่มเติมคุณสามารถรวมโพสต์ของคุณในolแท็ก:

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

    <ol>

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

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

        <?php endwhile; ?>

    </ol>

<?php endif; ?>

ที่จริงฉันต้องการกำหนด ID ตามดัชนีโพสต์!
MANNDAaR

@MANnDAaR นั่นคือสิ่งที่มันทำ หากลูปของคุณมี 10 โพสต์คุณจะเห็นรายการสั่งซื้อเรียงตามลำดับตั้งแต่ 1 ถึง 10 (ดูตัวอย่างที่นี่ )
mike23

3

ด้วยเหตุผลบางอย่างคุณมีตัวแปรตัวนับในลูปอยู่แล้ว หากนี่ไม่ได้ใช้เพื่อวัตถุประสงค์อื่นเพียงแค่สะท้อน:

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

1

สวัสดีฉันชนเข้ากับกระทู้นี้และสงสัยว่าจะทำเช่นนั้นได้อย่างไร พบว่ามันเป็นเลือดง่าย ในไฟล์เท็มเพลตหลักเช่น index.php ประกาศตัวแปร $ post_idx ก่อนลูปและภายในการเพิ่มลูปที่ var แบบนี้:

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

จากนั้นในเทมเพลตเนื้อหาของคุณ (เช่น content.php) ที่ดำเนินการทุกครั้งภายในลูปเพียงแค่สร้าง $ post_idx global จากนั้นใช้มันตามความต้องการของคุณ:

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

แค่นั้นแหละ!


คุณควรเติมตัวแปรส่วนกลางเพื่อหลีกเลี่ยงการชนกันของชื่อ
fuxia

0

ฉันกำลังมองหาที่จะทำสิ่งเดียวกัน แต่อยู่นอกวง โดยทั่วไปฉันต้องการที่จะสามารถหาดัชนีของการโพสต์จาก ID ของมัน นี่คือสิ่งที่ฉันมาด้วย:

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

นี่เป็นการออกแบบเพียงอย่างเดียวเนื่องจากลูกค้าต้องการตัวเลขถัดจากโพสต์แม้ว่าโพสต์นั้นจะอยู่ในกล่อง "โพสต์เด่น" ฉันได้เพิ่มศูนย์นำโดยใช้: <?php echo str_pad(sleek_get_post_index($post), 2, '0', STR_PAD_LEFT) ?>.


0

แม้ว่าคำถามนี้จะเก่า แต่ฉันจะวางที่นี่ในกรณีที่มีคนมาจาก Google Search ต้องการคำตอบที่ยืดหยุ่นมากขึ้น

เมื่อเวลาผ่านไปฉันพัฒนาวิธีแก้ปัญหาWP_Queryหรือไม่เชื่อเรื่องคำถามทั่วโลก เมื่อคุณใช้กำหนดเองWP_Queryคุณจะถูก จำกัด ให้ใช้เพียงอย่างเดียวincludeหรือrequireเพื่อให้สามารถใช้ตัวแปรในของคุณ$custom_queryแต่ในบางกรณี (ซึ่งเป็นกรณีส่วนใหญ่สำหรับฉัน!) ส่วนแม่แบบที่ฉันสร้างบางครั้งใช้ในแบบสอบถามทั่วโลก (เช่นเทมเพลตการเก็บถาวร) หรือในแบบกำหนดเองWP_Query(เช่นการสืบค้นประเภทโพสต์ที่กำหนดเองในหน้าแรก) นั่นหมายความว่าฉันต้องการตัวนับเพื่อให้สามารถเข้าถึงได้ทั่วโลกโดยไม่คำนึงถึงชนิดของแบบสอบถาม WordPress ไม่สามารถใช้งานได้ แต่นี่เป็นวิธีที่จะทำให้มันเกิดขึ้นได้ด้วยตะขอบางตัว

วางสิ่งนี้ไว้ในฟังก์ชั่นของคุณ

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

ความสวยงามของโซลูชันนี้คือเมื่อคุณป้อนข้อความค้นหาที่กำหนดเองและกลับมาอยู่ในการวนรอบทั่วไปมันจะถูกรีเซ็ตเป็นตัวนับที่ถูกต้องด้วยวิธีใดวิธีหนึ่ง ตราบใดที่คุณอยู่ในคิวรี (ซึ่งเป็นกรณีของเวิร์ดเพรสเสมอคุณรู้หรือไม่) ตัวนับของคุณจะถูกต้อง นั่นเป็นเพราะการสืบค้นหลักถูกดำเนินการด้วยคลาสเดียวกัน!

ตัวอย่าง:

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;
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.