【发布时间】:2016-03-24 19:11:04
【问题描述】:
我正在使用 this code 从 Wordpress/WooCommerce 网站搜索产品。
我的要求是 URL 就像“http://localhost/wp/?s=D34&post_type=product”
而s=D34 是搜索字符串。
用户何时搜索字符串。将从所有默认字段+产品的custom filed 中搜索数据。下面的代码适用于http://localhost/wp/?s=D34,但是当&post_type=product 与url 连接时,它会显示
代码如下
function cf_search_where( $where ) {
global $pagenow, $wpdb;
if ( is_search() ) {
$where = preg_replace("/\(\s*".$wpdb->posts.".post_title\s+LIKE\s*(\'[^\']+\')\s*\)/",
"(".$wpdb->posts.".post_title LIKE $1) OR (".$wpdb->postmeta.".meta_value LIKE $1)", $where );
$where .= " AND ($wpdb->posts.post_type = 'product') ";
}
return $where;
}
add_filter( 'posts_where', 'cf_search_where' );
这是为了防止出现不同的值
function cf_search_distinct( $where ) {
global $wpdb;
if ( is_search() ) {
return "DISTINCT"; //to prevent duplicates
}
return $where;
}
add_filter( 'posts_distinct', 'cf_search_distinct' );
那么需要什么修改呢?
URLhttp://localhost/wp/?orderby=price&post_type=product 工作正常
【问题讨论】:
-
我只是好奇(因为这有点发生在我身上);尝试在您的搜索字段所在页面的某处(临时)添加购物车小部件或任何 woocommerce 小部件(如类别),然后尝试使用您的第二个字符串(使用
s=d34)进行搜索。我想对 woocommerce 进行详细搜索,并且仅当我在带有搜索字段的页面上存在其他一些 woocommerce 小部件时才有效。这可能是 woocommerce 问题... -
我只能在这里建议,尝试使用给定的 URL,可能是您的问题与字符 D34 的 url 编码有关,localhost/wp/?post_type=product&s=D34,它可以通过打印 where 子句来洞察您的问题,如下答案建议
-
@dingo_d 我也认为它的 woo-commerce 问题,或者可能是当包含 post_type ='product' 时它开始在特定文件夹中搜索,就像您在图片“Home/Shop/”中看到的那样,我将尝试您的建议。
-
@Abhishek 我以前尝试过这个东西,但它没有给出所需的结果但同样的错误。
标签: php wordpress search post woocommerce