Thay đổi bài viết trên mỗi trang


14

Trong cài đặt wordpress => Đọc => Trang blog hiển thị tối đa các bài đăng [trường nhập]

Tôi có nó được đặt thành 3 bài viết tại thời điểm này.

Trên chỉ mục của tôi, lưu trữ ngày, lưu trữ thẻ, lưu trữ danh mục, kết quả tìm kiếm, v.v ... Tất cả các trang sử dụng vòng lặp và phân trang, hiện hiển thị 3 bài đăng trên mỗi trang.

Mục tiêu của tôi là có thể có số lượng kết quả khác nhau cho các trang khác nhau. ON chỉ mục của tôi có thể có 3 bài đăng nhưng trên kết quả tìm kiếm hoặc lưu trữ, hiển thị số lượng kết quả khác nhau trên mỗi trang.

Bất kỳ ý tưởng làm thế nào để làm điều này?

Câu trả lời:


23

Điều này sẽ làm điều đó: (thêm vào chức năng của chủ đề.php)

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

setmột phương pháp của $query?
Rutwick Gangurde

@RutwickGangurde Vâng. Trên thực tế, is_search () và is_archive () cũng vậy, giờ đây rõ ràng hơn một chút sau khi cập nhật câu trả lời của tôi với thông tin lượm lặt được từ bài đăng tuyệt vời này: billerickson.net/customize-the-wordpress-query Bài báo đó cũng lưu ý rằng chúng tôi ' sẽ có phương thức $ wp_query-> is_main_query () trong WP3.3, khá thú vị.
Dave Romsey

Người đàn ông tuyệt vời! Cảm ơn rất nhiều cho bài viết tuyệt vời. Tôi chưa bao giờ biết các phương thức này và tôi đã sử dụng để đi sâu vào đối tượng / mảng để thay đổi / đặt giá trị. Tốt cho các hacks bay! +1 cho bạn!
Rutwick Gangurde

Từ khi nào cần thiết không bao giờ thay đổi nó nếu bảng điều khiển is_admin? Có vẻ như nó không đồng bộ hóa "Số lượng mục trên mỗi trang:" trong các tùy chọn màn hình trong WP có thể dẫn đến các trang bạn không thể trang.
NoBugs

0

Cải thiện câu trả lời ở trên: hook pre_get_postsđược tìm nạp bằng tham chiếu, do đó nó không yêu cầu một globalcuộc gọi hoặc một returncuộc gọi.

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

}

Có một vấn đề với mã của bạn vì sử dụng $ wp_query toàn cầu sẽ sử dụng lãng phí bộ nhớ nhưng bạn không thể gọi nhiều loại không xác định khác nhau $ wp_the_query
Abdulkabir Ojulari

0

Sử dụng $ GLOBALS ['wp_query'] hoặc chỉ $ 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;
}
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.