Um Beiträge im Frontend von WordPress zu filtern, kannst du eine benutzerdefinierte Funktion erstellen, die eine Auswahloption für den Benutzer bietet, z.B. durch Kategorien, Tags, Autoren oder andere benutzerdefinierte Taxonomien. Diese Funktion wird normalerweise in einem Template oder als Shortcode verwendet, um ein Dropdown-Menü oder andere Filteroptionen anzuzeigen.
Hier zeige ich dir, wie du eine einfache Filterfunktion erstellen kannst, die Beiträge nach Kategorien filtert.
Schritt 1: Funktion in die functions.php einfügen
Füge den folgenden Code in die functions.php deines Child-Themes ein:
// Erstelle den Filterformular-Shortcode
function custom_post_filter_form() {
// Hole alle Kategorien
$categories = get_categories();
// HTML für das Filterformular
ob_start(); ?>
<form method="GET" action="">
<select name="category" onchange="this.form.submit()">
<option value="">Alle Kategorien</option>
<?php foreach ($categories as $category) : ?>
<option value="<?php echo $category->slug; ?>" <?php selected($_GET['category'], $category->slug); ?>>
<?php echo $category->name; ?>
</option>
<?php endforeach; ?>
</select>
</form>
<?php
return ob_get_clean();
}
add_shortcode('post_filter_form', 'custom_post_filter_form');
// Filtere Beiträge basierend auf der ausgewählten Kategorie
function custom_filter_posts($query) {
if (!is_admin() && $query->is_main_query()) {
if (isset($_GET['category']) && $_GET['category'] != '') {
$query->set('category_name', sanitize_text_field($_GET['category']));
}
}
}
add_action('pre_get_posts', 'custom_filter_posts');
Schritt 2: Shortcode im Beitrag oder Template verwenden
Verwende den Shortcode [post_filter_form] in einem Beitrag, einer Seite oder einem Template, um das Filterformular anzuzeigen. Zum Beispiel:
echo do_shortcode('[post_filter_form]');
Schritt 3: Ausgabe der gefilterten Beiträge
Um die gefilterten Beiträge anzuzeigen, stelle sicher, dass dein Template oder deine Seite die Haupt-Loop verwendet, z.B.:
if (have_posts()) :
while (have_posts()) : the_post();
// Dein Template für die Anzeige der Beiträge
the_title('<h2>', '</h2>');
the_excerpt();
endwhile;
// Paginierung
the_posts_pagination();
else :
echo '<p>Keine Beiträge gefunden.</p>';
endif;
Erklärung des Codes:
- custom_post_filter_form(): Erstellt ein Dropdown-Menü mit allen Kategorien. Wenn der Benutzer eine Kategorie auswählt, wird das Formular automatisch abgeschickt.
- custom_filter_posts($query): Dieser Hook filtert die Beiträge basierend auf der ausgewählten Kategorie, indem er den
category_name-Parameter auf die ausgewählte Kategorie setzt. - sanitize_text_field(): Diese Funktion sorgt dafür, dass der Eingabewert sicher verarbeitet wird.
Zusammenfassung
Mit dieser Funktionalität kannst du Beiträge im Frontend nach Kategorien filtern. Die gleiche Logik lässt sich auch für andere Taxonomien wie Tags, benutzerdefinierte Taxonomien oder Autoren anwenden. Diese Lösung ist flexibel und lässt sich leicht anpassen, um verschiedene Filtermöglichkeiten anzubieten, die den Benutzern eine gezielte Suche nach Inhalten ermöglichen.
