내 사이트에 모든 범주의 페이지 매김을 만드는 방법은 무엇입니까?


9

내 사이트의 모든 카테고리를 나열하는 페이지 매김이있는 아카이브 페이지를 표시하고 각 링크는 해당 특정 카테고리 아카이브 페이지로 이동합니다. 따라서 이것은 카테고리 아카이브의 아카이브 페이지와 같습니다.

내 사이트의 각 카테고리에는 카테고리의 퍼머 링크와 일치하도록 수동으로 생성 된 맞춤 미리보기 이미지가 있습니다. 이미 모든 범주를 표시하는 레이아웃 설정이 있지만 사용자 정의 페이지 템플릿 으로이 작업을 수행하므로 페이지 매김이 없습니다. 이것은 모든 카테고리가 하나의 페이지에 표시되어 귀찮은 것입니다 (100 개 이상의 카테고리가 있음).

현재 보관 파일은 특정 사용자 정의 페이지 템플릿 이름으로 설정 page-catlist.php되었지만 다른 유형의 템플릿 파일로 변경하려고합니다.

한 페이지에 모든 카테고리를 출력하는 데 사용하는 현재 코드는 다음과 같습니다.

$args = array(
  'orderby' => 'name',
  'order' => 'ASC'
);
$cats      = get_categories( $args );
$thm_pre   = 'http://example.com/images/thumbs/';
$thm_end   = '.png';

foreach($cats as $cat) {
    $thumbnail = $thm_pre.$cat->slug.$thm_end;
    // output the loop HTML here
    // basically a list of category names & thumbs 
    // all linked to the cat URL by get_category_link()
}

WP-PageNavi를 사용하여 자연스럽게 페이지 매김을 추가 할 수 있도록 더 좋은 방법이 있기를 바랍니다. 어떤 도움이라도 대단히 감사하겠습니다!


그것은 많은 노력이 될 것입니다;)
Sumit

@Sumit 그것은 전혀 노력하지 않고 실제로 꽤 쉽습니다 ;-)
Pieter Goosen

답변:


2

용어 / 카테고리 / 태그 목록을 페이징하는 것은 매우 쉽고이를 달성하기 위해서는 최소한의 정보가 필요합니다.

우리가 필요한 것을 보자

  • 용어의 양

  • 페이지 당 용어 수

  • get_terms()( 버전 4.5 에서는 사용법 get_terms()이 변경되었습니다 .) 또한 사용할 수 있습니다 get_categories()원하는 경우, get_categories()단지 래퍼 함수입니다get_terms()

먼저 우리는 항의 수를 세어야합니다. 이를 위해, 우리는 사용 count의 매개 변수를get_terms()

노트:

  • 모든 코드는 테스트되지 않았으며 최소한

    • PHP 5.4

    • 워드 프레스 4.5

이전 버전의 PHP 및 WordPress에서 작동하도록 쉽게 변환 할 수 있습니다.

$taxonomy   = 'category';
$term_count = get_terms( 
    [
        'taxonomy'  => $taxonomy,
        'fields'    => 'count'
    ]
);

이제 용어의 양을 알았으므로 페이지 당 필요한 용어의 양을 설정할 수 있습니다.

$terms_per_page = 10;

위에서 우리는 이제 얼마나 많은 페이지를 가질 수 있는지 알아낼 수 있습니다. 여기의 값은 귀하의 경우에 페이지 매김 요구 기능으로 전달됩니다wp_pagenavi()

$max_num_pages = ceil( $term_count/$terms_per_page );

이 경우 $max_num_pages페이지 매김 함수로 전달 합니다.

다음 부분은 오프셋을 계산하는 것입니다. Google은 페이지 당 관련 용어를 검색하여 최적화합니다. 페이지 당 100 개 이상의 용어가 모두 필요한 것은 아닙니다. 필요한 10 개만 쿼리하는 것이 훨씬 빠릅니다. 따라서 우리는 어느 페이지에 있는지 알아야합니다. 오프셋을 계산할 것입니다. 이에 전달되고 초기 시작점에서 몇 개의 용어를 건너 뛸지 get_terms()알려 get_terms()줍니다.

그런 다음에는 get_terms()10 개의 조건 만 반환하도록 지시 해야합니다 . 이 조각의 코드를 보자

$current_page = get_query_var( 'paged', 1 ); // Change to 'page' for static front page
$offset       = ( $terms_per_page * $current_page ) - $terms_per_page;
$terms        = get_terms(
    [
        'taxonomy' => $taxonomy,
        'order'    => 'ASC',
        'orderby'  => 'name',
        'number'   => $terms_per_page,
        'offset'   => $offset
    ]
);

페이지 매김에 따라 페이지 당 10 개의 용어 만 있습니다. 이제 용어를 정상적으로 반복 할 수 있습니다.

참고로, 실제로 get_terms()함수 에서 용어가 반환되도록해야 합니다.


Cool;) 그러나 페이지 매김 마크 업을 작성하는 방법을 찾지 못했습니다. wp_pagnavi()이 경우 실제로 작동합니까?
수밋

1
함께 일하는 것이이 @Sumit next_posts_link(), previous_posts_link()하고 paginate_links(). 내 페이징 함수 here 과 같이 정수 값을 함수에 전달할 수있는 모든 페이징 함수에서도 작동 합니다 . 에 관해서는 wp_pagenavi(), 그 기능이 어떻게 작동하는지 전혀 알지 못하므로 예 또는 아니오라고 말할 수 없습니다. 테스트해야합니다. 위의 코드 $max_num_pages에서 페이지의 양을 보유하고 정수 값입니다.이 변수는 페이지 매김을 계산하는 함수에 전달해야합니다.
Pieter Goosen

1
이 솔루션 모두 확실히 작동 할 수 있다고 생각하므로 귀하와 @cjbj에게 특별한 감사를드립니다. 둘러 본 후 나는 그것이 어떻게 작동하는지 설명하는 WP-PageNavi 물건을 발견 했습니다 ... 이 솔루션이 최선이라고 생각하는 방식으로 항상 사용자 정의 페이지 매김굴릴 수 있습니다.
gelleproductions

1

나는 WP-PageNavi에 익숙하지 않지만 게시물을 다루는 것으로 가정하므로 귀하와 같은 루프에서 사용하면 쉽게 망칠 수 있습니다. 아마도 CSS는 여전히 HTML 스타일을 지정하는 데 도움이 될 수 있습니다. 어쨌든 자신의 페이지 매김을 설정하는 것은 그리 어렵지 않습니다.

먼저 몇 개의 카테고리가 있는지 알아야합니다.

$cat_amounts=count($cats);

다음으로 페이지 당 원하는 항목 수를 결정해야합니다.

$cats_per_page=20;

이것은 당신에게 페이지의 양을 줄 것입니다 :

$max_pages=ceil($cat_amounts/$cats_per_page);

필요한 세 번째 정보는 현재 페이지입니다. query_varURL 을 소개하면이를 추적 할 수 있습니다 .www.example.com/yourcatpage?catpage=2

루프를 시작하기 전에 어떤 페이지가 호출되는지 알아야합니다.

$page_called=get_query_var ( $catpage, 1 )

이것으로부터 표시하고자하는 첫 번째 요소를 호출 할 수 있습니다.

$first_element=($page_called-1)*$cats_per_page)

그리고 마지막 것 :

$last_element=$page_called*$cats_per_page-1;

마지막 페이지에는 $cats_per_page범주 보다 적을 수 있으므로 다음이 추가로 필요합니다.

if ($last_element > $cat_amounts) $last_element = $cat_amounts;

이제 원하는 요소를 반복하십시오 $cats.

for ($i=$first_element;$i=<$last_element;$i++) {
    //do your thing with $cats[$i];
}

루프 후 변수를 사용하여 이전 / 다음 태그 또는 다른 유형의 탐색을 생성 할 수 있습니다.

실제로이 코드를 테스트하지 않았 음을주의하십시오. 배열의 첫 번째 요소에 키 0이 있다는 것을 고려할 때 약간의 실수가 있었을 수 있습니다.


깨끗하고있다 훨씬 쉽게 접근이 빠르게 ;-)
피터 구센

실제로, 나는 우리의 접근 방식이 그렇게 다르다고 생각하지 않습니다. MySQL이 오프셋을 처리하게하고 PHP에 맡깁니다.
cjbj
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.