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?

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

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..

}

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;
}
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.