반응형
현재 쿼리에 상대적인 범주 수 가져오기
WordPress를 사용하고 있는데 검색 페이지에서 카테고리 내의 투고 수를 파악하여 이름 옆에 표시해야 합니다.그렇게
고양이 1(3) 고양이 2(1) 고양이 3(18)..
현재 사용하고 있는 것은get_categories()
오브젝트를 제공하고 카운트를 잡는 기능$cat->count()
기간 내 투고 총수를 취득합니다만, 현재 쿼리 내의 투고만 취득하면 됩니다.사용하고 있다pre_get_posts
쿼리를 갱신합니다.이걸 할 방법을 아는 사람?
현재 코드 블록입니다.
foreach ( get_categories() as $cat ) {
if ( $cat->parent === 0 ) {
$checked = ( in_array( $cat->slug, $check ) ) ? 'checked' : '';
printf( '<input id="%1$s" %4$s type="checkbox" name="category[%1$s]"><label for="%1$s" >%2$s ( %3$d )</label><br>',
$cat->slug,
$cat->name,
$cat->count,
$checked
);
}
}
여기 제 것이 있습니다.pre_get_posts
액션:
add_action( 'pre_get_posts', 'breed_search_query' );
function breed_search_query( $query ) {
$cats = ( isset( $_GET['category'] ) ) ? implode( ',', array_keys( $_GET['category'] ) ) : null;
$search = ( isset( $_GET['s'] ) ) ? sanitize_text_field( $_GET['s'] ) : null;
if ( ! is_admin() && $query->is_main_query() && is_search() ) {
$query->set( 'post_type', 'post' );
$query->set( 'posts_per_page', 8 );
$query->set( 's', $search );
$query->set( 'category_name', $cats );
}
}
멋지고 흥미로운 질문이네요.유감스럽게도 이 기능을 사용할 수 없습니다.get_categories
다른 접근법이 필요합니다.
그 방법은 다음과 같습니다.
매우 희박한 사용자 지정 쿼리를 생성하여 쿼리에 일치하는 모든 게시물에서 모든 게시 ID를 가져옵니다.
게시물에 모든 카테고리를 첨부합니다.
투고내의 모든 투고와 카테고리를 루프 해, 카테고리명을 키로 하고, 투고 ID를 값으로 하는 배열을 작성합니다.
이 새로운 어레이를 루프하여 카테고리 이름을 표시하고 특정 키의 투고량(카테고리)을 카운트하여 표시합니다.
코드:
(주의: 다음 코드는 테스트되지 않았으며 새로운 어레이 구문()[]
으로 인해 PHP 5.4+에 필요합니다.)
$cats = ( isset( $_GET['category'] ) ) ? implode( ',', array_keys( $_GET['category'] ) ) : null;
$search = ( isset( $_GET['s'] ) ) ? sanitize_text_field( $_GET['s'] ) : null;
$args = [
'post_type' => 'post',
'nopaging' => true, // Gets all posts
's' => $search,
'category_name' => $cats,
'fields' => 'ids', // Makes the query extremely lean, excellent for performance, only get post ID's
];
$q = get_posts( $args );
// Define our $category_array which will hold the category name/post ID's array
$category_array = [];
// Define our $category_info array which will hold the category name as key and the object as value
$category_info = [];
foreach ( $q as $post ) {
// Get the categories attached to a post
$categories = get_the_category( $post );
foreach ( $categories as $category ) {
// Create our array which will hold the category name as key and post ID's as values
$category_array[$category->name][] = $post;
// Create an array to hold the category objects. Use names as keys and objects as values
$category_info[$category->name] = $category;
} // endforeach $categories
} // endforeach $wp_query->posts
wp_reset_postdata();
// Sort the array keys alphabetical. You can change or remove this as necessary
ksort( $category_array );
foreach ( $category_array as $k=>$v ) {
$category_slug = $category_info[$k]->slug;
$category_parent = $category_info[$k]->parent;
$checked = ( in_array( $category_slug, $check ) ) ? 'checked' : ''; // Just make sure that $check is defined somewhere
// Build our string
printf ( '<input id="%1$s" %4$s type="checkbox" name="category[%1$s]"><label for="%1$s" >%2$s ( %3$d )</label><br>', // I have not modified anything in this line
$category_slug, // Holds the category slug
$k, // Holds the category name
count( $v ), // Counts and return the post count
$checked
);
} // endforeach $category_array
언급URL : https://stackoverflow.com/questions/31372094/get-category-count-relative-to-the-current-query
반응형
'source' 카테고리의 다른 글
React 문서에서는 componentWillMount가 아닌 componentDidMount에서 AJAX를 실행할 것을 권장하는 이유는 무엇입니까? (0) | 2023.03.28 |
---|---|
현재 스코프를 Angular로 전달JS 서비스 (0) | 2023.03.28 |
왜 Instagram의 페이지 수가 같은 페이지를 반복해서 반환하는 걸까요? (0) | 2023.03.28 |
권한 문제:Wordpress와 함께 사용할 Windows용 도커 권한을 설정하는 방법 (0) | 2023.03.28 |
ASP.NET Core API POST 파라미터는 항상 null입니다. (0) | 2023.03.28 |