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.
Ich möchte diese Art der Header-Suche durchführen. Also bitte hilf mir jemand
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>
<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:
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.