เปลี่ยนจำนวนการโพสต์ต่อหน้า


14

ในการตั้งค่า wordpress => การอ่าน => หน้าบล็อกแสดงได้มากที่สุด [ฟิลด์อินพุต] โพสต์

ฉันตั้งมันเป็น 3 โพสต์ในขณะนี้

ในดัชนีของฉันวันที่เก็บถาวรแท็กที่เก็บถาวรหมวดหมู่ผลการค้นหา ฯลฯ ... ทุกหน้าที่ใช้การวนซ้ำและการสลับหน้าจะแสดง 3 โพสต์ต่อหน้าในขณะนี้

เป้าหมายของฉันคือการได้ผลลัพธ์จำนวนต่างกันสำหรับหน้าเว็บที่ต่างกัน ในดัชนีของฉันอาจมี 3 โพสต์ แต่ในผลการค้นหาหรือเก็บถาวรแสดงจำนวนผลลัพธ์ที่แตกต่างกันต่อหน้า

ความคิดใด ๆ วิธีการทำเช่นนี้?

คำตอบ:


23

สิ่งนี้จะทำ: (เพิ่มในฟังก์ชั่นของธีมของคุณ)

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

คือsetวิธีการของ$query?
Rutwick Gangurde

@RutwickGangurde ใช่ ในความเป็นจริง is_search () และ is_archive () เหมือนกันซึ่งตอนนี้ค่อนข้างชัดเจนมากขึ้นหลังจากอัปเดตคำตอบของฉันด้วยข้อมูลที่รวบรวมจากโพสต์ที่ยอดเยี่ยมนี้: billerickson.net/customize-the-wordpress-queryบทความนั้นยังบันทึกว่าเรา ' จะมีวิธี $ wp_query-> is_main_query () ใน WP3.3 ซึ่งค่อนข้างดี
Dave Romsey

ผู้ชายที่น่ากลัว! ขอบคุณมากสำหรับโพสต์ที่ยอดเยี่ยม ฉันไม่เคยรู้วิธีการเหล่านี้และฉันเคยเจาะลึกวัตถุ / อาร์เรย์เพื่อเปลี่ยน / ตั้งค่า เหมาะสำหรับการแฮ็กบิน! +1 สำหรับคุณ!
Rutwick Gangurde

ตั้งแต่เมื่อใดจึงไม่จำเป็นต้องเปลี่ยนถ้าแดชบอร์ด is_admin? ดูเหมือนว่าจะไม่ซิงค์ "จำนวนรายการต่อหน้า:" ในตัวเลือกหน้าจอใน WP ที่อาจทำให้หน้าเว็บที่คุณไม่สามารถเพจได้
NoBugs

0

การปรับปรุงคำตอบข้างต้น: hook pre_get_postsถูกดึงโดยการอ้างอิงดังนั้นจึงไม่จำเป็นต้องมีการglobalโทรหรือการreturnโทร

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

}

มีปัญหากับรหัสของคุณด้วยการใช้ $ wp_query ทั่วโลกจะเปลี่ยนเป็นการสูญเสียความทรงจำ แต่คุณไม่สามารถโทรหา $ wp_the_query ที่ไม่ได้กำหนดไว้ได้หลายอย่าง
Abdulkabir Ojulari

0

ใช้ $ GLOBALS ['wp_query'] หรือเพียง $ 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;
}
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.