Post_per_page không giới hạn


41

Tôi muốn trả lại TẤT CẢ bài viết với query_posts. Tôi đã cố gắng thiết lập posts_per_pagemột số thực sự cao, nhưng query_postskỳ dị và không trả lại bất kỳ bài viết nào. Cách chính xác để truy vấn bài viết mà không có giới hạn là gì?

$args = array(
    'post_type'      => 'post',
    'cat'            => '22,47,67',
    'orderby'        => 'name',
    'order'          => 'ASC',
    'hide_empty'     => 1,
    'depth'          => 1,
    'posts_per_page' => ?
    );

6
Tôi đã Googling một lúc và tìm kiếm bộ mã WP, nhưng tôi không thể tìm thấy câu trả lời trực tiếp cho câu hỏi đơn giản này. Tôi tin rằng câu hỏi của tôi được diễn đạt rõ ràng với mã ví dụ và nỗ lực của tôi là gì (đặt giá trị cao cho đối số). Tôi không phải là chuyên gia về WP, vì vậy đó là lý do tại sao tôi đến đây để đặt câu hỏi. Ngay cả việc cung cấp câu trả lời cho các câu hỏi có vẻ tầm thường đối với bạn cũng hữu ích trong việc phát triển các cộng đồng Stack Exchange này. Cá nhân tôi thích nhìn thấy một liên kết Stack Overflow trong kết quả tìm kiếm của mình, trái ngược với một liên kết đến một diễn đàn nhảm nhí.
Banjer

Ngoài ra, cảm ơn câu trả lời. Bạn nên đăng nó dưới dạng câu trả lời và không bình luận, vì vậy tôi có thể chấp nhận nó.
Banjer

Tôi đã có quan điểm của bạn và tôi đánh giá cao nỗ lực của bạn trong việc viết câu hỏi. Tôi cũng đồng ý rằng các câu hỏi không chuyên gia có thể chứng minh bản thân có giá trị trong cộng đồng này. Mặt khác, quá nhiều câu hỏi như vậy có thể làm nản lòng một số chuyên gia tham gia vào đây. Đó là tất cả về một số loại cân bằng tôi đoán. Dù sao tôi là một cử tri lớn nên tôi rất mong chờ những câu hỏi tiếp theo của bạn :) Có một thời gian tuyệt vời ở đây trên WPSE.
Michal Mau

PS: bạn cũng muốn thay thế typecho post_type(hoặc loại bỏ hoàn toàn dòng này). Tôi sẽ chỉnh sửa cả câu trả lời của Rutwick và câu hỏi của bạn để ngăn ai đó sao chép lỗi nhỏ này.
Michal Mau

@Maugly Cảm ơn người sửa lỗi ... chỉ tập trung vào bài viết_per_page do đó đã sao chép lỗi chính tả! ;)
Rutwick Gangurde

Câu trả lời:


81

-1 là câu trả lời của bạn! Hãy tìm posts_per_page ở đây .

$args = array(
'post_type'      => 'post',
'cat'            => '22,47,67',
'orderby'        => 'name',
'order'          => 'ASC',
'hide_empty'     => 1,
'depth'          => 1,
'posts_per_page' => -1
);

Thông báo trước quan trọng : Điều này có thể dẫn đến một truy vấn rất lớn có thể đưa trang web xuống. Làm điều này chỉ khi bạn chắc chắn cơ sở dữ liệu của bạn có thể xử lý nó. Không có trong các chủ đề công cộng hoặc plugin.


6
Thông báo trước quan trọng: Điều này có thể dẫn đến một truy vấn rất lớn có thể đưa trang web xuống. Làm điều này chỉ khi bạn chắc chắn cơ sở dữ liệu của bạn có thể xử lý nó. Không có trong các chủ đề công cộng hoặc plugin.
fuxia

@toscho Thêm bình luận của bạn dưới dạng cập nhật cho câu trả lời.
Rutwick Gangurde

Bạn cứu mạng tôi!!
Darlan Dieterich

@DarlanDieterich Vui mừng tôi có thể giúp! :)
Rutwick Gangurde

23

Hoặc cách khác, bạn có thể vượt qua WP_Query(đó là những gì query_postssử dụng) nopagingđối số, về cơ bản thực hiện cùng một điều ..

$args = array(
    'nopaging' => true
    // Your other args, etc..
);

Nó sẽ làm chính xác như vậy, nhưng nếu bạn phải nhìn lại sau đó và không thể nhớ những gì bạn đang làm, cá nhân tôi cảm thấy nó sẽ rõ ràng hơn với bạn, bạn đang có ý định gì với tham số đó bên trong các đối số mảng.

Như tôi đã đề cập, cả hai sẽ thực sự đạt được như nhau.

Không thể bị tổn thương khi có nhiều hơn một cách tiếp cận và thật tuyệt khi chia sẻ những gì bạn biết, đủ để nói rằng đó là lý do cho câu trả lời của tôi, mặc dù bạn đã có đủ một cách ..;)


3

Từ tập tin chức năng chủ đề con của bạn:

add_action( 'pre_get_posts', 'wpsites_no_limit_posts' );

function wpsites_no_limit_posts( $query ) {

if( $query->is_main_query() && !is_admin() && is_home() ) {

$query->set( 'posts_per_page', '-1' );
$query->set( 'order', 'ASC' );
$query->set( 'post_type', 'post' );
$query->set( 'cat', '22,47,67' );
$query->set( 'orderby', 'name' );
$query->set( 'order', 'ASC' );
$query->set( 'hide_empty', '1' );
$query->set( 'depth', '1' );

    }

}

1

Câu trả lời đúng cho vấn đề của bạn là 'posts_per_page' => -1bởi vì -1sẽ trả về các bài đăng không giới hạn trên mỗi trang Như những người dùng khác trả lời.

Tôi chỉ muốn thêm một tiện ích bổ sung cho Q / A này,

Nếu bạn muốn lấy số lượng bài đăng trên mỗi trang từ cài đặt đọc trên Bảng quản trị WordPress, bạn phải gọi get_option()hàm và chuyển posts_per_pagedưới dạng chuỗi cho nó.

$args = array(
    'post_type'      => 'post',
    'cat'            => '22,47,67',
    'orderby'        => 'name',
    'order'          => 'ASC',
    'hide_empty'     => 1,
    'depth'          => 1,
    'posts_per_page' => get_option('posts_per_page')
    );

Tôi hy vọng câu trả lời này sẽ giúp được ai đó vì nó giúp tôi. Người dùng mã hóa hạnh phúc Stackexchange


Đó thực sự là một bổ sung tốt đẹp!
Herbert Van-Vliet

1

Hoặc là..

function getAll($arg, $posts_per_page = 50)
{
    $data = array();
    $page = 1;

    do{
        $arg['paged'] = $page;
        $arg['posts_per_page'] = $posts_per_page;

        $query = new WP_Query($arg);

        foreach ($query->posts as $post){
            $data[] = $post;
        }

        $page++;

    }while(count($query->posts) === $posts_per_page);

    return $data;
}

2
Bạn nên thêm ngữ cảnh để giải thích mã của bạn, ý tưởng của bạn để giải quyết câu hỏi.
bueltge

1

Sử dụng Ricardo với một số sửa đổi:

static $paged;
$post_ids = [];
do {
    $paged++;
    $defaults = [
        'fields' => 'ids', // Only return the ID field to make this query faster.
        'post_type' => 'post',
        'posts_per_page' => 100,
        'no_found_rows' => false, // We need pagination & the count for all posts found.
        'paged' => $paged,
        'update_post_term_cache' => false,
        'update_post_meta_cache' => false,
    ];
    $query = new WP_Query($defaults);
    if ($query->have_posts()) {
        foreach ($query->posts as $id) {
            $post_ids[] = $id;
        }
    }
} while ($query->max_num_pages > $paged);

return $post_ids;

Điều này sẽ tăng đáng kể thời gian truy vấn bằng cách chỉ truy vấn vào hàng ID và tránh cập nhật thuật ngữ và bộ đệm meta.


Đẹp! cám ơn vì đã chia sẻ.
Ricardo Canelas
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.