posts_per_page tidak ada batasan

41

Saya ingin mengembalikan SEMUA pos dengan query_posts. Saya mencoba mengatur posts_per_pageke angka yang sangat tinggi, tetapi query_postspanik dan tidak mengembalikan tulisan apa pun. Apa cara yang benar untuk meminta posting tanpa batas?

$args = array(
    'post_type'      => 'post',
    'cat'            => '22,47,67',
    'orderby'        => 'name',
    'order'          => 'ASC',
    'hide_empty'     => 1,
    'depth'          => 1,
    'posts_per_page' => ?
    );
Banjer
sumber
6
Saya telah mencari Google sebentar dan mencari codex WP, tapi saya tidak bisa menemukan jawaban langsung untuk pertanyaan sederhana ini. Saya percaya pertanyaan saya diucapkan dengan jelas dengan kode contoh, dan apa upaya saya (menetapkan nilai tinggi untuk argumen). Saya bukan ahli WP, jadi itu sebabnya saya datang ke sini untuk mengajukan pertanyaan. Bahkan memberikan jawaban atas pertanyaan yang tampaknya sepele bagi Anda sangat membantu dalam menumbuhkan komunitas Stack Exchange ini. Saya pribadi suka melihat tautan Stack Overflow di hasil pencarian saya, dibandingkan dengan tautan ke forum jelek.
Banjer
Juga, terima kasih atas jawabannya. Anda harus mempostingnya sebagai jawaban dan bukan komentar, sehingga saya dapat menerimanya.
Banjer
Saya punya maksud Anda dan saya sangat menghargai upaya Anda dalam menulis pertanyaan. Saya juga setuju bahwa pertanyaan non-pakar dapat membuktikan diri mereka berharga di komunitas ini. Di sisi lain, terlalu banyak pertanyaan semacam itu dapat membuat beberapa pakar enggan terlibat di sini. Ini semua tentang semacam keseimbangan kurasa. Pokoknya saya pemilih besar jadi saya menantikan pertanyaan Anda berikutnya :) Selamat bersenang-senang di WPSE.
Michal Mau
PS: Anda juga ingin mengganti typeuntuk post_type(atau menghapus baris ini sama sekali). Saya akan mengedit jawaban Rutwick dan pertanyaan Anda untuk mencegah seseorang menyalin kesalahan kecil ini.
Michal Mau
@Maugly Terima kasih atas koreksi man ... hanya fokus pada posts_per_page maka disalin kesalahan ketik! ;)
Rutwick Gangurde

Jawaban:

83

-1 adalah jawaban Anda! Cari di posts_per_page sini .

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

Peringatan penting : Ini dapat menghasilkan kueri yang sangat besar yang dapat menjatuhkan situs. Lakukan ini hanya jika Anda yakin database Anda dapat mengatasinya. Tidak dalam tema atau plugin publik.

Rutwick Gangurde
sumber
6
Peringatan penting: Ini dapat menghasilkan kueri yang sangat besar yang dapat menjatuhkan situs. Lakukan ini hanya jika Anda yakin database Anda dapat mengatasinya. Tidak dalam tema atau plugin publik.
fuxia
@toscho Menambahkan komentar Anda sebagai pembaruan untuk jawabannya.
Rutwick Gangurde
kamu menyelamatkan hidupku !!
Darlan Dieterich
@ DarlanDieterich Senang saya bisa membantu! :)
Rutwick Gangurde
24

Atau sebagai alternatif Anda dapat memberikan argumen WP_Query(yang query_postsmenggunakan) nopaging, yang pada dasarnya melakukan hal yang sama ..

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

Ini akan melakukan hal yang persis sama, tetapi jika Anda harus melihat kembali nanti dan tidak dapat mengingat apa yang Anda lakukan, saya pribadi merasa itu akan lebih jelas bagi Anda, apa yang Anda maksudkan dengan parameter itu di dalam argumen array

Namun seperti yang saya sebutkan, keduanya akan benar-benar mencapai hal yang sama.

Tidak ada salahnya memiliki lebih dari satu pendekatan, dan selalu menyenangkan untuk membagikan apa yang Anda ketahui, cukup untuk mengatakan bahwa itulah alasan jawaban saya, meskipun Anda sudah memiliki yang cukup ..;)

t31os
sumber
4

Dari file fungsi tema anak Anda:

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' );

    }

}
Brad Dalton
sumber
2

Menggunakan Ricardo dengan beberapa modifikasi:

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;

Ini secara dramatis akan meningkatkan waktu kueri dengan hanya menanyakan terhadap baris ID dan menghindari memperbarui istilah dan cache meta.

Austin Passy
sumber
Bagus! Terima kasih telah berbagi.
Ricardo Canelas
1

Jawaban yang tepat untuk masalah Anda adalah 'posts_per_page' => -1karena -1akan menghasilkan posting tanpa batas per halaman Seperti jawaban pengguna lain.

Saya hanya ingin menambahkan add-on ke T / A ini,

Jika Anda ingin mendapatkan jumlah posting per halaman dari pengaturan bacaan di Panel Administrasi WordPress Anda harus memanggil get_option()fungsi dan meneruskannya posts_per_pagesebagai string.

$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')
    );

Saya harap jawaban ini akan membantu seseorang karena membantu saya. Selamat Mengkode Pengguna Stackexchange

Elkhouaja
sumber
Itu sebenarnya tambahan yang bagus!
Herbert Van-Vliet
1

Atau..

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;
}
Ricardo Canelas
sumber
2
Anda harus menambahkan konteks untuk menjelaskan kode Anda, ide Anda untuk menyelesaikan pertanyaan.
bueltge