質問: woocommerceで商品カテゴリとキーワード検索フォームを作成しますか? カテゴリとキーワードベースの検索フォームを作成したいです。だから私はこの次のフォームを得た<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> これはキーワードに対してのみ機能します。私はこれをカテゴリ検索に更新するとうまくいきませんでした。私のページのスクリーンショットは以下の通りです。このようなヘッダ検索をしたいのですが。だから私を助けてください
回答: クライアント用に作成しました。pre_get_postsアクションで実行する必要があります。それはあなたがwordpressクエリにパラメータを追加することを意味します 前に それは投稿を返します。これをfunctions.phpに追加してください。// 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); 上記のコードはcategory変数を渡したと仮定して動作します。名前として 'category'を持つselectタグを作成することでそれを行うことができます。<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> 送信されると、$ _ get []にはs、post_typeおよびcategoryが含まれます。 sとpost_typeはデフォルトでwp searchが使われ、categoryはpre_get_posts()でwp queryにパラメータを追加するために使われます。そのため、最後にwp queryが考慮します。 s: あなたのキーワード。 post_type :複数の投稿タイプが同じ分類を持つ場合、結果の混在を避けます。 category :あなたが探している分類法。 woocommerceのために<form>タグのaction属性を次のように置き換えます。<?php echo get_permalink( wc_get_page_id( 'shop' ) ); ?> フォームがショップページにのみあることが確実な場合は、空のままにすることもできます。隠しフィールドの値をproductに設定します。これは、wc製品のカスタム投稿タイプのスラッグです。