Ubah Posting per jumlah halaman

14

Dalam pengaturan wordpress => Membaca => Halaman blog menunjukkan paling banyak posting [ kolom isian]

Saya telah mengaturnya menjadi 3 posting saat ini.

Pada indeks saya, arsip tanggal, arsip tag, arsip kategori, hasil pencarian, dll ... Semua halaman yang menggunakan loop dan paging, itu menunjukkan 3 posting per halaman sekarang.

Tujuan saya adalah untuk dapat memiliki jumlah hasil yang berbeda untuk halaman yang berbeda. PADA indeks saya mungkin memiliki 3 posting tetapi pada hasil pencarian atau arsip, tampilkan jumlah hasil yang berbeda per halaman.

Ada ide bagaimana melakukan ini?

JasonDavis
sumber

Jawaban:

23

Ini akan melakukannya: (tambahkan ke functions.php tema Anda)

add_action( 'pre_get_posts',  'set_posts_per_page'  );
function set_posts_per_page( $query ) {

  global $wp_the_query;

  if ( ( ! is_admin() ) && ( $query === $wp_the_query ) && ( $query->is_search() ) ) {
    $query->set( 'posts_per_page', 3 );
  }
  elseif ( ( ! is_admin() ) && ( $query === $wp_the_query ) && ( $query->is_archive() ) ) {
    $query->set( 'posts_per_page', 5 );
  }
  // Etc..

  return $query;
}
Dave Romsey
sumber
Apakah setmetode itu $query?
Rutwick Gangurde
@RutwickGangurde Ya. Bahkan, is_search () dan is_archive () juga, yang sekarang sedikit lebih jelas setelah memperbarui jawaban saya dengan info yang diperoleh dari posting hebat ini: billerickson.net/customize-the-wordpress-query Artikel itu juga mencatat bahwa kami ' Saya akan memiliki metode $ wp_query-> is_main_query () di WP3.3, yang cukup keren.
Dave Romsey
Pria yang luar biasa! Terima kasih banyak untuk kiriman yang bagus. Saya tidak pernah tahu metode ini, dan saya biasa menelusuri objek / array untuk mengubah / menetapkan nilai. Baik untuk hacks on the fly! +1 untuk Anda!
Rutwick Gangurde
Sejak kapan perlu untuk tidak pernah mengubahnya jika dashboard is_admin? Sepertinya itu tidak menyinkronkan "Jumlah item per halaman:" dalam opsi layar di WP mungkin menghasilkan halaman yang tidak dapat Anda halaman.
NoBugs
0

Memperbaiki jawaban di atas: kait pre_get_postsdiambil dengan referensi, sehingga tidak memerlukan globalpanggilan atau returnpanggilan.

add_action( 'pre_get_posts',  'set_posts_per_page'  );
function set_posts_per_page( $query ) {

  if ( ( ! is_admin() ) && ( $query === $wp_the_query ) && ( $query->is_search() ) ) {
    $query->set( 'posts_per_page', 3 );
  }
  elseif ( ( ! is_admin() ) && ( $query === $wp_the_query ) && ( $query->is_archive() ) ) {
    $query->set( 'posts_per_page', 5 );
  }
  // Etc..

}
Fantasi Seni
sumber
Ada masalah dengan kode Anda juga karena menggunakan $ global wp_query akan menggunakan pemborosan memori tetapi Anda tidak dapat memanggil berbagai $ wp_the_query yang tidak terdefinisi
Abdulkabir Ojulari
0

Menggunakan $ GLOBALS ['wp_query'] atau hanya $ wp_query

add_action( 'pre_get_posts',  'set_posts_per_page'  );
function set_posts_per_page( $query ) {

  if ( ( ! is_admin() ) && ( $query === $GLOBALS['wp_query'] ) && ( $query->is_search() ) ) {
    $query->set( 'posts_per_page', 3 );
  }
  elseif ( ( ! is_admin() ) && ( $query === $GLOBALS['wp_the_query'] ) && ( $query->is_archive() ) ) {
    $query->set( 'posts_per_page', 5 );
  }

  return $query;
}
Abdulkabir Ojulari
sumber