web-dev-qa-db-ja.com

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>

これはキーワードに対してのみ機能します。私はこれをカテゴリ検索に更新するとうまくいきませんでした。私のページのスクリーンショットは以下の通りです。

My screenshot

このようなヘッダ検索をしたいのですが。だから私を助けてください

3
Nathan Srivi

クライアント用に作成しました。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 []にはspost_typeおよびcategoryが含まれます。 spost_typeはデフォルトでWP searchが使われ、categorypre_get_posts()でWP queryにパラメータを追加するために使われます。

そのため、最後にWP queryが考慮します。

  • s: あなたのキーワード。
  • post_type :複数の投稿タイプが同じ分類を持つ場合、結果の混在を避けます。
  • category :あなたが探している分類法。

WooCommerceのために

<form>タグのaction属性を次のように置き換えます。

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

フォームがショップページにのみあることが確実な場合は、空のままにすることもできます。

隠しフィールドの値をproductに設定します。これは、WC製品のカスタム投稿タイプのスラッグです。

3
Sebastien