Nhận số lượng bài đăng của vòng lặp hiện tại khi sử dụng nhiều truy vấn trên một trang


10

Tôi đang cố gắng để có được số lượng bài viết hiện tại bên trong một vòng lặp. Tôi đang sử dụng nhiều vòng trên một trang trong chủ đề của mình. Cho đến nay tôi có:

$my_post_count = $wp_query->post_count;

Nhưng khi tôi in $ my_post_count, nó sẽ trả về số lượng tất cả các bài đăng trên trang WP của tôi. Nó có thể có liên quan đến việc sử dụng nhiều truy vấn trên một trang không? Tôi đã thử sử dụng wp_reset_query sau mỗi vòng lặp để đảm bảo rằng tôi sẽ không ném mọi thứ theo cách đó. Tôi đang làm gì sai?

Câu trả lời:


29

$wp_query giữ vòng lặp chính của trang và không nên được sử dụng để tạo nhiều vòng lặp.

Nếu bạn đang sử dụng WP_Queryđối tượng mới thì biến của bạn giữ nó sẽ có số lượng theo:

$my_query = new WP_Query();
// stuff
$count = $my_query->post_count;

Nếu bạn đang sử dụng get_posts()thì WP_Queryđối tượng không thể truy cập và bạn chỉ nên đếm bộ trả về:

$posts = get_posts();
$count = count($posts);

Lưu ý: Nếu bạn đang ở trong vòng lặp chính, bạn có thể truy cập WP_Queryquaglobal $wp_query
mrmadhat

5

Tôi tin rằng post_count được lưu trữ trên toàn cầu, vì vậy trước vòng lặp tùy chỉnh bạn nên đặt nó 0, vì bạn có thể sử dụng nó bên ngoài vòng lặp, nhưng điều này phụ thuộc vào cách bạn cấu trúc nhiều truy vấn của mình, có thể bạn có thể thêm chúng vào bài đăng của mình ?

Chẳng hạn, có một cách khác mà tôi sử dụng trong vòng lặp đó là đếm các bài đăng bằng cách sử dụng current_post + 1.

<?php $my_query = new WP_Query();?>
     <?php if ($my_query->have_posts()) :while ($my_query->have_posts()) : $my_query->the_post();

           $count_posts = $my_query->current_post + 1; //counts posts in loop

     endwhile;?>

2

Một giải pháp thay thế bằng WP_Query sẽ là:

           <?php 
               $args = array(
               'post_type' => 'post'
               );
            $the_query = new WP_Query( $args );
            $totalpost = $the_query->found_posts; 
            ?> 

0

Cách đơn giản để đếm tổng số bài bao gồm cả phân trang

<?php  global $wp_query
   echo $wp_query->found_posts; ?>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.