Zum Inhalt springen
Startseite » WP Snippets » Beiträge im Frontend filtern

Beiträge im Frontend filtern

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.