wake-up-neo.net

Filtern Sie die Ergebnisse mit benutzerdefinierten Feldwerten und Dropdown

Ich muss Beiträge nach einem benutzerdefinierten Feldwert filtern.

Mein konkretes Beispiel:

  • Benutzer suchen nach Produkten> Kategorie 1> Unterkategorie A.
  • ALLE Artikel der Unterkategorie A (Artikel mit benutzerdefiniertem Beitragstyp) werden standardmäßig nach Datum angezeigt.
  • Jeder Artikel in Unterkategorie A hat ein benutzerdefiniertes Feld "Größe". Der Benutzer kann die Größe über ein Dropdown-Menü auswählen, und die Beiträge werden gefiltert, wobei nur Elemente mit "Benutzerdefiniertes Feld: Größe" = "Ausgewählte Größe" angezeigt werden. Der Filter wird auch in der Paginierung beibehalten, da sich die Produkte auf mehreren Seiten befinden.

Ich habe viele Antworten überprüft, aber kein Fall war so einfach. Ich habe darüber nachgedacht, es mit einer benutzerdefinierten Suche oder einem Plugin zu tun, aber ich weiß wirklich nicht, wo ich anfangen soll. danke für Ihre Hilfe.

BEARBEITEN: Die benutzerdefinierten Feldwerte sind fest und werden nicht automatisch ausgefüllt. Die Auswahl kann ohne zusätzliche Abfragen in normalem HTML erstellt werden.

3
Andycap

Nach ersten Kommentaren bearbeitet und Pastebin-Code:

<?php /* You can also leave 'action' blank: action="" */ ?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
<select name="my_size" id="size" class="postform" onchange="submit();">
        <option selected="selected">Choose a size</option>
        <option value="10">10</option>
        <option value="20">20</option>
</select>
</form>
<?php /* Reset filter */ ?>
<p><a href="<?php the_permalink(); ?>">Clear filter</a></p>

<?php
if( !isset($_POST['my_size']) || '' == $_POST['my_size']) {

    // unfiltered product list here

}
else {

    // Get dropdown value
    // Don't forget to sanitize this!
    $size = $_POST['my_size'];

    // Create new query
    $query = new WP_Query( array(
        'post_type'=> 'product', // your CPT
        'post_status' => 'publish',
        'meta_key' => 'size',
        'meta_value' => $size, // Dropdown value
    ) );

    // Loop
    if($query->have_posts()):
        while( $query->have_posts() ): $query->the_post();
            // Product content
        endwhile;
    endif;

    // reset query to default
    wp_reset_postdata();

}

Siehe Codex für WP_Query-Referenz .

4
Max Yudin