상황에 따라 페이지 당 다른 게시물 수를 표시합니다 (예 : 홈페이지, 검색, 보관)


21

읽기 설정에는 모든 컨텍스트에 표시되는 게시물 수에 영향을주는 표시되는 게시물 수를 설정할 수 있습니다. 대신 홈페이지에 특정 수의 게시물을 표시하고 보관, 검색 결과 등과 같은 페이지에 다른 수의 게시물을 표시하고 싶습니다.

읽기-설정-블로그-페이지-페이지 당 표시

테마 파일을 편집하고 쿼리 매개 변수를 변경 하여이 작업을 수행 할 수 있다는 것을 알고 있지만 간단한 설정 페이지에 더 쉽게 액세스하고 싶습니다. 오래 전에, 나는 이것을 한 플러그인을 발견했지만 지금은 찾을 수 없습니다.

누구 든지이 작업을 수행하는 플러그인이나 같은 기능을 수행하기 위해 functions.php에 넣을 수있는 기능을 알고 있습니까?


아마도 @ chip-bennett의 '페이지 당 다른 게시물'플러그인 : chipbennett.net/plugins/cbnet-different-posts-per-pages 를 생각했을 것입니다.
Tom Auger

답변:


23

플러그인 에서이 작업을 수행하는 가장 좋은 방법은 pre_get_posts작업 후크가 발생할 때 다음 샘플 기능을 실행하는 것 입니다. $wp_query객체는 사용할 수 있습니다 조건부 태그를 사용할 수있는 것을 의미하지만, 워드 프레스 당신은 쿼리를 변경하는 수단 게시물을 취득하기 전에 실행되는 것이 아니라 query_posts ()가 테마를 사용할 때와 같은 두 번째 쿼리를 추가하는 첫 번째 질의에 앞서 바르 파일.

function custom_posts_per_page($query) {
    if (is_home()) {
        $query->set('posts_per_page', 8);
    }
    if (is_search()) {
        $query->set('posts_per_page', -1);
    }
    if (is_archive()) {
        $query->set('posts_per_page', 25);
    } //endif
} //function

//this adds the function above to the 'pre_get_posts' action     
add_action('pre_get_posts', 'custom_posts_per_page');

내 사이트에서이 기능을 사용합니다. 잘라서 붙여 넣기가 쉬웠습니다.
kevtrout

0

query_posts를 사용하여 사용자 정의 루프를 수행하고 is_home, is_archive 등으로 게시물 수를 지정할 수 있습니다.

query_posts와 함께 간단한 if 문


예, 나는 내 질문에 그것을 언급했습니다. 설정을 변경하기 위해 여러 테마 파일을 편집 할 필요가 없도록하는 방법을 찾고 있습니다. 감사.
Doug

1
이런 식으로하는 것이 좋지 않습니다. 워드 프레스는 이미 쿼리를 실행합니다. 당신이 넣으면 query_posts테마, 당신은 원래 쿼리를 무시하고 다른 중복 하나를 만들 것입니다.
Krzysiek Dróżdż

-1

이 질문에 추가하십시오. 다음과 같이 index.php에 새 페이지를 추가하면이 기능 함수 custom_posts_per_page ($ query)에 대해 post_per_page를 결정하는 방법을 알고 있습니까?

<?php
if ($_GET['new'] == 1) 
{
    include ( TEMPLATEPATH . '/newpage.php' );
    exit;
}
?>

-1

테마 파일을 편집하고 쿼리 매개 변수를 변경 하여이 작업을 수행 할 수 있다는 것을 알고 있지만 간단한 설정 페이지에 더 쉽게 액세스하고 싶습니다.

완전성 query_posts을 위해 $query_string연결 과 결합하면 효과가 있다는 것을 알았 습니다.

이 코드를 배치했습니다 index.php(내 테마에는 category.php가 없습니다) ...

<?php 
if (!is_front_page()) { 
    query_posts($query_string . "&posts_per_page=20"); 
}
?>

물론 우리가하고있는 일은 루프의 내부 쿼리 문자열을 수정하여 페이지 당 기본 게시물 수를 재정의하는 것입니다 .

그것은 전체 게시물을 보여주는 홈페이지에 작은 게시물 목록을 제공하고 게시물 요약 만 표시하는 다른 곳 (카테고리, 날짜 등)의 훨씬 큰 게시물 목록을 제공하는 대행입니다.

그러나 허용 된 답변과 달리 쿼리가 두 번 실행 되므로 해결책이 아닙니다.


Jeff, 저는 다른 상황에서 반환되는 게시물 수를 제어 할 수있는 중앙 집중식 장소를 찾고있었습니다. 대답은 index.php를 사용하여 대부분의 테마가하지 않는 모든 컨텍스트를 처리하는 경우에만 수행합니다. 데이터베이스에 대한 호출을 늘리는 것 (성능에 영향을 미침) 외에도 기술은 예상치 않은 방식으로 조건부 태그 (예 : is_home () 또는 is_front_page)에 대한 응답을 변경할 수 있습니다. 마지막으로 페이지에 보조 루프를 추가하려면 query_posts를 사용하지 말고 대신 "new WP_Query"(또는 get_posts)를 사용해야합니다.
Doug

@doug 이것은 보조 루프가 아니며 기본 루프를 재정의합니다.이 특정 테마는 index.php를 사용하여 모든 것을 렌더링합니다. 나는 이것이 대답으로 여기에 더 의미가 있다고 느꼈지만, 원한다면 내 질문을하고 대답이 어떤 식 으로든 당신을 화나게하면 대답 할 수 있습니다.
Jeff Atwood

실제로 두 번째 단락에서 마지막 단락을 잘못 읽었으며 "큰"글과 "작은"글 목록이 같은 페이지에 있다고 생각했기 때문에 위의 마지막 문장은 관련이 없습니다. 그리고 네, 원한다면 모든 코드를 index.php에 넣는 것이 합법적입니다. 그리고 그 경우라면, 방법이 빠르고 쉬운 방법이므로 20 시간이 지나면 다운 보트를 제거하겠습니다. 그럼에도 불구하고 kevtrout의 답변에서와 같이 원래 쿼리를 수정하는 대신 새 쿼리를 보내는 것은 이미 언급 한 이유로 (나와 WP 코덱스) 바람직하지 않습니다.
Doug
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.