WordPress: Loop mit pre_get_posts filtern
Der Standard-Loop kann mit pre_get_posts gefiltert werden, wobei diese Möglichkeit nur mit Bedacht gewählt werden sollte.

Durch den Einsatz des Hooks pre_get_posts
kann der Standard-Loop gefiltert werden. Diese Anpassung hat Auswirkung auf alle Loops, sowie auf das Backend, auf Feeds, Navigationen etc. Deshalb sollte man diesen Weg nur mit Bedacht wählen und durch Abfragen von vornherein einschränken.
Individueller Loop mit pre_get_posts
Der Hook führt eine individuelle Funktion aus, hier im Beispiel kb_change_query
.
<?php
function kb_change_query($query) {
$query->set('cat', '-1');
}
add_action('pre_get_posts', 'kb_change_query');
?>
Mit einfachen Abfragen (Conditional Tags) kann das Beispiel sinnvoller umgesetzt werden. Nun wird der Loop nur noch gefiltert, wenn er
- nicht im Backend läuft
- wenn es der Haupt-Loop ist und
- wenn es sich um die Suchergebnisse handelt.
<?php
function kb_change_query($query) {
if (!is_admin() && !is_search() && $query->is_main_query()) {
$query->set('cat', '-1');
}
}
add_action('pre_get_posts', 'kb_change_query');
?>