내 사이트의 모든 카테고리를 나열하는 페이지 매김이있는 아카이브 페이지를 표시하고 각 링크는 해당 특정 카테고리 아카이브 페이지로 이동합니다. 따라서 이것은 카테고리 아카이브의 아카이브 페이지와 같습니다.
내 사이트의 각 카테고리에는 카테고리의 퍼머 링크와 일치하도록 수동으로 생성 된 맞춤 미리보기 이미지가 있습니다. 이미 모든 범주를 표시하는 레이아웃 설정이 있지만 사용자 정의 페이지 템플릿 으로이 작업을 수행하므로 페이지 매김이 없습니다. 이것은 모든 카테고리가 하나의 페이지에 표시되어 귀찮은 것입니다 (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를 사용하여 자연스럽게 페이지 매김을 추가 할 수 있도록 더 좋은 방법이 있기를 바랍니다. 어떤 도움이라도 대단히 감사하겠습니다!
답변
용어 / 카테고리 / 태그 목록을 페이징하는 것은 매우 쉽고이를 달성하기 위해서는 최소한의 정보가 필요합니다.
우리가 필요한 것을 보자
-
용어의 양
-
페이지 당 용어 수
-
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()
함수 에서 용어가 반환되도록해야 합니다.
답변
나는 WP-PageNavi에 익숙하지 않지만 게시물을 다루는 것으로 가정하므로 귀하와 같은 루프에서 사용하면 쉽게 망칠 수 있습니다. 아마도 CSS는 여전히 HTML 스타일을 지정하는 데 도움이 될 수 있습니다. 어쨌든 자신의 페이지 매김을 설정하는 것은 그리 어렵지 않습니다.
먼저 몇 개의 카테고리가 있는지 알아야합니다.
$cat_amounts=count($cats);
다음으로 페이지 당 원하는 항목 수를 결정해야합니다.
$cats_per_page=20;
이것은 당신에게 페이지의 양을 줄 것입니다 :
$max_pages=ceil($cat_amounts/$cats_per_page);
필요한 세 번째 정보는 현재 페이지입니다. query_var
URL 을 소개하면이를 추적 할 수 있습니다 .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이 있다는 것을 고려할 때 약간의 실수가 있었을 수 있습니다.