Dziś, podczas drobnych zmian w drzewku kategorii na jednej ze stron, którą się opiekuję zapytał mnie kolega, który akurat siedział obok (pogaduszki przy czymś chłodnym ;-)) o 2 kategorie, które mam na stronie – „wyklucz z wyszukiwania” i „wyklucz z RSS”. Pytanie oczywiście nie dotyczyło tego do czego te kategorie służą, bo to chyba oczywiste, tylko jak takie coś najprościej wdrożyć.

Wykluczanie wpisów z wyników wyszukiwania i kanału RSS w WordPressie

O samej zabawie kanałem RSS w WordPressie od dawna mam w Trello utworzoną cegiełkę, i mam nadzieję, że niebawem uda się opublikować poradnik na ten temat, bo pomimo upływu lat, i całego „postępu” RSS nadal jest to moim zdaniem najbielszy sposób na śledzenie aktualności na wybranych stronach. Chyba nawet lepszy niż newsletter… Ale w związku z zapytaniem kolegi w pewnym sensie muszę o ten temat zahaczyć dziś.

Jak już wspomniałem – mam (m.in.) 2 kategorie systemowe:

  • Wyklucz z wyszukiwania (ID: 17)
  • Wyklucz z RSS (ID: 21)

Wystarczy, że dowolny wpis dodam do którejś z tych kategorii, a zostanie on automatycznie wykluczony z wyników wyszukiwania i/lub kanały RSS.

Wykluczenie robię na podstawi numerów ID poszczególnych obiektów (w tym przypadku kategorii), co najprościej odczytać w panelu zarządzania WordPressem (WP-Admin) poprzez najechanie kursorem na wybrany element – w adresie URL zazwyczaj będzie identyfikator obiektu:

https://webinsider.pl/wp-admin/term.php?taxonomy=category&tag_ID=21

Za wykluczanie z wyników wyszukiwania odpowiada kod:

function webinsider_wp_exclude_category_from_search( $query ) {
    if ( $query->is_search && !is_admin() ) {
		$query->set( 'cat', '-17' ); // 17: Wyklcuz z wyszukiwania
	}
    return $query;
}
add_filter( 'pre_get_posts', 'webinsider_wp_exclude_category_from_search' );

Za wykluczanie z kanału RSS odpowiada kod:

function webinsider_wp_exclude_category_from_rss( $query ) {
	if ( $query->is_feed ) {
		$query->set( 'cat', '-21' ); // 21: Wyklucz z RSS
	}
	return $query;
}
add_filter( 'pre_get_posts', 'webinsider_wp_exclude_category_from_rss' );

Możemy też wykluczenia dokonać po tagach zamiast kategorii. Jednym:

$query->set( 'tag', '-4' );

Lub kilku:

$query->set( 'tag', '-4, -8' );

Możemy też wykluczenia dokonać np. po autorze:

$query->set( 'author', '-3' );

Kod możemy wstawić czy to do własnej wtyczki, czy do pliku functions.php, oczywiście motywu potomnego…

(!) Zgłoś błąd na stronie