Czy zdarzyło Ci się kiedyś, że na stronie z rozbudowanym drzewem kategorii, chciałeś ukryć wpisy z podkategorii w widoku archiwum danej kategorii? Z pytaniem tym spotykam się dość często, więc może warto pokazać, jak należy się za to zabrać.
Poniżej znajdziesz kod, który realizuje dokładnie takie zadanie:
function prefiks_exclude_subcategory_from_category_archive( $query ) {
if ( !is_admin() && $query->is_main_query() && is_category() ) {
$category_not_in = $query->get( 'category__not_in', array() );
if ( $query->get('cat', false) ) {
$query->set('tax_query', array( array(
'taxonomy' => 'category',
'operator' => 'IN',
'terms' => $query->get('cat'),
'include_children' => false,
) ));
}
}
}
add_filter( 'pre_get_posts', 'prefiks_exclude_subcategory_from_category_archive' );
Dodatkowe warianty i pytania
-
A jeśli chciałbym użyć tego kodu względem własnej taksonomii?
- Wystarczy wprowadzić kilka drobnych modyfikacji do przedstawionego wyżej kodu. Poniżej wersja zmodyfikowana:
function prefiks_exclude_subterm_from_custom_taxonomy_archive($query) { if ( !is_admin() && $query->is_main_query() && is_tax('NAZWA_TAKSONOMII') ) { if ( $query->get('NAZWA_TAKSONOMII', false) ) { $query->set('tax_query', array( array( 'taxonomy' => 'NAZWA_TAKSONOMII', 'field' => 'slug', 'operator' => 'IN', 'terms' => $query->get('NAZWA_TAKSONOMII'), 'include_children' => false, ) )); } } } add_filter( 'pre_get_posts', 'my_pre_get_posts' );
-
Znalazłem rozwiązanie oparte o
query_posts()
w szablonie. Dlaczego nie powinienem go używać? - Z dwóch powodów. Przede wszystkim dlatego, że wykonujesz wtedy zupełnie niepotrzebnie dodatkowe zapytanie do bazy danych. Ponadto uniemożliwiasz w ten sposób wtyczkom i motywowi ingerencję w zawartość tego zapytania.