我想要:
http://www.gadgetgogo.co.uk/?s=ipod
返回为:
http://www.gadgetgogo.co.uk/?s=ipod&post_type=product
因此,在使用搜索(滑块横幅和默认WordPress搜索)时,它会生成第二个URL。
答案 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'