Nicht immer wird im Frontend oder Backend von WordPress alles erwünscht, was an Beiträgen oder Seiten vorhanden ist. Diese Anforderung kann man beliebig mit verschiedenen Bedingungen verknüpfen. Als Beispiel dient hier die Filterung der Suche im Frontend. Dabei setze ich einen Filter auf den Query von WordPress und nehme entsprechenden Beiträge oder Seiten aus der Suche raus.
Dabei wir über die ID des Beitrags oder Seite ausgeschlossen, so dass der Parameter ob page oder post irrelevant ist, es gilt nur die ID, die man in einem Array mitgibt und so mehrere Beiträge oder Seiten ausschließen kann.
Im ersten Code-Beispiel wird der Filter angesprochen und im Array zum query werden die IDs gesetzt. Die Filterung wirkt nur wenn es sich um die Suche is_search
handelt und man nicht !
im Backend is_admin
ist.
// search filter
function fb_search_filter($query) {
if ( !$query->is_admin && $query->is_search) {
$query->set('post__not_in', array(40, 9) ); // id of page or post
}
return $query;
}
add_filter( 'pre_get_posts', 'fb_search_filter' );
Möchte man bei der Verwendung der Seiten die Kinder-Seiten ebenso mit ausschließen, so kann man diese zu der ID zusammen suchen und ebenfalls von der Suche ausschließen.
// search filter
function fb_search_filter($query) {
if ( !$query->is_admin && $query->is_search) {
$pages = array(2, 40, 9); // id of page or post
// find children to id
foreach( $pages as $page ) {
$childrens = get_pages( array('child_of' => $page, 'echo' => 0) );
}
// add id to array
for($i = 0; $i < sizeof($childrens); ++$i) {
$pages[] = $childrens[$i]->ID;
}
$query->set('post__not_in', $pages );
}
return $query;
}
add_filter( 'pre_get_posts', 'fb_search_filter' );
Die Möglichkeiten sind sehr vielfältig und oft hilft ein kleiner Anstoß, den ich hier hoffentlich geben kann, da ich auf meiner Suche nichts gefunden habe. Weitere Parameter des Query sind im zugehörigen Codex dokumentiert.