商品的价格记录在数据库表的自定义字段$ custom_price中,其中包含商品ID和价格。因此,在category页面上按价格过滤时,它仅按标准WooCommerce价格字段过滤。我需要过滤产品的最低和最高价格的自定义价格字段,什么是在自定义表wp_product_prices中的产品。例如:我使用woocommerce过滤器按价格过滤产品,并在分类页面上获得结果。问题是: products没有显示,因为我在我的products中使用了非标准的价格字段,只找到了文件https://github.com/woocommerce/woocommerce/blob/master/includes/class-wc-query.php,它有请求处理价格,函数price_filter_post_clauses ($ args,$ wp_query)。也许有某种用于覆盖的钩子,或者您如何实现它?我的自定义价格表到products https://prnt.sc/w60t5p字段"product_id“等于wp_posts表中的产品"ID”。
发布于 2020-12-25 21:39:54
对于最低和最高价格的更改查询,使用操作"woocommerce_product_query“并停用标准筛选器'posts_clauses‘。如下所示:
add_action('woocommerce_product_query', 'min_max_price_handler');
function min_max_price_handler($q) {
global $wpdb, $wp_query;
if (! $wp_query->is_main_query() || ( ! isset($_GET['max_price']) && ! isset($_GET['min_price']))) {
return;
}
// Remove default Woocommerce min/max price request handler
remove_filter('posts_clauses', [WC()->query, 'price_filter_post_clauses'], 10);
$current_min_price = isset($_GET['min_price']) ? floatval(wp_unslash($_GET['min_price'])) : 0;
$current_max_price = isset($_GET['max_price']) ? floatval(wp_unslash($_GET['max_price'])) : PHP_INT_MAX;
$sql = "SELECT DISTINCT product_id FROM wp_product_prices WHERE country=%s AND price >= %f AND price <= %f";
$results = $wpdb->get_results(
$wpdb->prepare(
$sql,
$customer_country,
$current_min_price,
$current_max_price
),
ARRAY_A
);
$results = array_column($results, 'product_id');
if (is_array($results)) {
$q->set('post__in', $results);
}
}https://stackoverflow.com/questions/65360345
复制相似问题