페이지 수당 게시물 변경


14

워드 프레스 설정에서 => 읽기 => 블로그 페이지는 최대 [입력 필드] 게시물을 표시합니다

현재 3 개의 게시물로 설정되어 있습니다.

내 인덱스, 날짜 아카이브, 태그 아카이브, 카테고리 아카이브, 검색 결과 등 루프와 페이징을 사용하는 모든 페이지에 페이지 당 3 개의 게시물이 표시됩니다.

내 목표는 페이지마다 다른 수의 결과를 가질 수 있도록하는 것입니다. 내 색인에 3 개의 게시물이 있지만 검색 결과 또는 아카이브에 페이지 당 다른 수의 결과가 표시 될 수 있습니다.

이 작업을 수행하는 방법에 대한 아이디어가 있습니까?

답변:


23

이것은 할 것입니다 : (테마의 functions.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;
}

인가 set하는 방법 $query?
Rutwick Gangurde

@RutwickGangurde 네. 실제로 is_search ()와 is_archive ()도 마찬가지입니다.이 위대한 게시물에서 얻은 정보로 내 답변을 업데이트 한 후 조금 더 분명해졌습니다. billerickson.net/customize-the-wordpress-query 이 기사는 또한 우리가 WP3.3에는 $ wp_query-> is_main_query () 메소드가 있습니다.
Dave Romsey

멋진 남자! 좋은 게시물 주셔서 감사합니다. 나는이 방법을 몰랐고 객체 / 배열을 드릴 다운하여 값을 변경 / 설정했습니다. 즉석 해킹에 좋습니다! 당신을 위해 +1!
Rutwick Gangurde

is_admin 대시 보드 인 경우 언제 변경하지 않아도 되었습니까? WP의 화면 옵션에서 "페이지 당 항목 수 :"를 동기화하지 않는 것 같습니다. 페이지를 페이지로 넘길 수 없습니다.
NoBugs

0

위의 답변 개선 : 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.