wake-up-neo.com

Produktkategorie- und Keyword-Suchformular im Woocommerce erstellen?

ich möchte Kategorie und Keyword-basierte Suchformular erstellen. also habe ich folgendes formular bekommen

<form role="search" method="get" id="searchform_special" action="<?php echo esc_url( home_url( '/'  ) ); ?>">
                      <div>
                        <label class="screen-reader-text" for="s"><?php _e( 'Search for:', 'woocommerce' ); ?></label>
                        <input type="text" value="<?php echo get_search_query(); ?>" name="s" id="s" placeholder="<?php _e( 'Search for products', 'woocommerce' ); ?>" />
                       <input type="submit" id="searchsubmit" value="<?php echo esc_attr__( 'Search' ); ?>" />
                       <input type="hidden" name="post_type" value="product" />
                       <input type="hidden" id="home_url" value="<?php echo esc_url( home_url( '/'  ) ); ?>" />
                       <input type="hidden" id="categ_base_lang" value="<?php echo _x('product-category', 'slug', 'woocommerce') ?>" />
                      </div>
                    </form>

Es funktioniert nur für Schlüsselwörter. Wenn ich dies auf Kategorie-Suche aktualisiere, bedeutet das, dass es nicht funktioniert hat. Der Screenshot meiner Seite ist unten angegeben.

My screenshot

Ich möchte diese Art der Header-Suche durchführen. Also bitte hilf mir jemand

3
Nathan Srivi

Ich habe es gerade für einen Kunden gemacht, du musst es mit der Aktion pre_get_posts machen. Das bedeutet, dass Sie der WordPress-Abfrage before Parameter hinzufügen, um die Beiträge zurückzugeben.

Füge dies zu functions.php hinzu:

// advanced search functionality
function advanced_search_query($query) {

    if($query->is_search()) {
        // category terms search.
        if (isset($_GET['category']) && !empty($_GET['category'])) {
            $query->set('tax_query', array(array(
                'taxonomy' => '***the_taxonomy_slug_of_your_category***',
                'field' => 'slug',
                'terms' => array($_GET['category']) )
            ));
        }    
    }
    return $query;
}
add_action('pre_get_posts', 'advanced_search_query', 1000);

Der obige Code funktioniert unter der Annahme, dass Sie eine Variable category übergeben haben. Sie können dies tun, indem Sie ein select-Tag mit 'category' als Namen erstellen:

<select name="category">
    <option value="***cat_slug***">Cat. name</option>
    <option value="***cat_slug***">Cat. name</option>
    <option value="***cat_slug***">Cat. name</option>
</select>

Das vollständige Formular:

<form role="search" method="get" action="<?php echo esc_url( home_url( '/' ) ); ?>">
    <!-- With this hidden input you can define a specific post type. -->
    <input type="hidden" name="post_type" value="your_post_type" />
    <input name="s" type="text" />
    <select name="category">
        <!-- Insert here all option tags you want, with category slug as value -->
    </select>
    <button type="submit">Submit</button>
</form>

Nach der Übermittlung enthält $ _GET [] s, post_type und category. s und post_type werden standardmäßig in der WP Suche verwendet, und category wird in pre_get_posts() verwendet, um Parameter zur WP Abfrage hinzuzufügen.

Schließlich wird WP query Folgendes berücksichtigen:

  • s: Ihre Keywords.
  • post_type : vermeidet das Mischen von Ergebnissen, wenn mehrere Post-Typen dieselbe Taxonomie haben.
  • Kategorie : Die Taxonomie, nach der Sie suchen.

Für WooCommerce

Ersetzen Sie das action-Attribut Ihres <form> -Tags durch:

<?php echo get_permalink( wc_get_page_id( 'shop' ) ); ?>

Sie können es auch leer lassen, wenn Sie sicher sind, dass sich Ihr Formular nur auf der Shop-Seite befindet.

Setzen Sie den Wert des ausgeblendeten Felds auf product, den benutzerdefinierten Pfostentyp für WC-Produkte.

3
Sebastien