更改WordPress搜索以仅生成WooCommerce搜索结果

时间:2019-01-03 23:34:23

标签: php wordpress woocommerce

我想要:

http://www.gadgetgogo.co.uk/?s=ipod

返回为:

http://www.gadgetgogo.co.uk/?s=ipod&post_type=product

因此,在使用搜索(滑块横幅和默认WordPress搜索)时,它会生成第二个URL。

4 个答案:

答案 0 :(得分:0)

这可以使用pre_get_posts过滤器完成。在主题的functions.php file

中添加以下代码
    add_filter( 'pre_get_posts', 'search_by_product_only' );

    function search_by_product_only( $query ) {

        // check if search query only
        if ( $query->is_search ) {
            $query->set( 'post_type', array( 'product') ); // here you can add multiple post types in whcih you want to search
        }

        return $query;
    }

答案 1 :(得分:0)

显然当前的 WooCommerce 版本仅将搜索查询视为产品搜索(并使用适当的模板呈现),如果 $query->is_post_type_archive( 'product' ) 为真,那么关键不仅要设置 post_type,还要设置is_post_type_archive 属性,并在 WooCommerce 加载其过滤器之前执行此操作(默认优先级为 10),因此优先级为 9 或更小。

添加到 funtions.php 的示例:

function my_search_filter($query) {
    if ( $query->is_search && ! is_admin() ) {
        $query->set( 'post_type', 'product' );
        $query->is_post_type_archive = true;
    }
}
add_filter('pre_get_posts','my_search_filter', 9);

请注意,此代码将覆盖所有搜索作为产品搜索,因此如果您还有其他搜索,请在 my_search_filter 的开头实施适当的检查。

答案 2 :(得分:0)

我一直在寻找与您类似的解决方案,但找不到任何解决方案,最后我结合了我在此处阅读的最后几个答案,并按我的意愿正常工作。

在主题的functions.php文件中添加以下代码

    function wpb_change_search_url() {
    if ( is_search() && ! empty( $_GET['s'] ) && ($_GET['post_type'] != 'product') ) {
        wp_redirect( home_url( "/?s=" ) . urlencode( get_query_var( 's' ) ) . "&post_type=product" );
        exit();
    }   
}
add_action( 'template_redirect', 'wpb_change_search_url' );

希望对您和其他人有所帮助。

答案 3 :(得分:-1)

只需将此行添加到search.php的顶部

$_GET['post_type'] = 'product'