是否在WooCommerce中创建产品类别和关键字搜索表单?

时间:2015-04-14 作者:Padmanathan J

我想建立基于类别和关键字的搜索表单。所以我得到了以下表格

<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

我想进行这种类型的标题搜索。所以请帮助我任何人

1 个回复
最合适的回答,由SO网友:Sebastien 整理而成

我只是为客户做的,你必须在pre_get_posts 行动这意味着您将向WordPress查询添加参数before 它返回帖子。

将此添加到函数。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 变量您可以通过创建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>
一旦提交,$\\u GET[]将包含s, post_typecategory. spost_type 默认情况下使用WP搜索,并且category 将在中使用pre_get_posts() 向WP查询添加参数。

因此,最终WP查询将考虑:

  • s : 您的关键字
  • post_type : 避免在多个帖子类型具有相同的分类法时混合结果
  • category : 您正在搜索的分类法action 您的属性<form> 标记人:

    <?php echo get_permalink( wc_get_page_id( \'shop\' ) ); ?>
    
    如果您确定您的表单仅在商店页面上,也可以将其留空。

    将隐藏字段的值设置为product, WC产品的定制立柱式slug。

结束

相关推荐

Searching post types

是否可以从搜索表单中获取用户输入,使用该表单通过WP_Query 类,然后将用户重定向到页面模板以显示结果?例如假设您有一个搜索输入city, state 或zip 然后输入California,然后捕获该输入,然后使用WP\\U查询搜索自定义帖子类型“位置”。它会找到4个匹配的位置,然后重定向到“位置”页面,该页面将显示所有4个位置。你会怎么做?Note: 这不是家庭作业,而是客户端功能。是的,有插件,但由于这是如何定制的,以及他们希望它如何布局,它必须从头开始构建。