在WooCommerce产品上,我有一个名为“ amazon_price”的自定义元字段,并且如果该“ amazon_price”自定义字段未设置价格,我想隐藏产品而不显示在前端。
我使用此代码进行了过滤,该过滤对于简单的产品而言效果很好,但是即使它们设置了“ amazon_price”字段,它也不会显示可变的产品,我想这个问题背后的原因是该代码可能正在寻找“产品主帖子ID上的amazon_price”字段值,因此我认为这可能是在寻找变量产品的主帖子ID,而不是在变量ID中查找该字段,但是即使我的猜测是正确的,我仍然不会知道如何解决。
add_action( 'woocommerce_product_query', 'apm_products_meta_query' );
function apm_products_meta_query( $q ){
$meta_query = $q->get( 'meta_query' );
$meta_query[] = array(
'key' => 'amazon_price',
'value' => 0,
'compare' => '>'
);
$q->set( 'meta_query', $meta_query );
}
答案 0 :(得分:0)
我认为不可能对可变产品的产品变化进行WC元查询。但是使用自定义的轻型SQL查询,您可以同时进行所有操作:
// The custom SQL query
function custom_query_incl_ids() {
global $wpdb;
$meta_key = 'amazon_price';
return $wpdb->get_col( "
SELECT DISTINCT p.ID FROM {$wpdb->prefix}posts p
LEFT JOIN {$wpdb->prefix}postmeta as pm ON p.ID = pm.post_id
WHERE p.post_type = 'product' AND p.post_status = 'publish'
AND ( ( pm.meta_key = '$meta_key' AND pm.meta_value > 0 )
OR p.ID IN (
SELECT DISTINCT v.post_parent FROM {$wpdb->prefix}posts v
LEFT JOIN {$wpdb->prefix}postmeta as vm ON v.ID = vm.post_id
WHERE v.post_type = 'product_variation'
AND v.post_status = 'publish' AND v.post_parent > 0
AND vm.meta_key = '$meta_key' AND vm.meta_value > 0
) )
");
}
// The WC query
add_action( 'woocommerce_product_query', 'product_query_action_callback' );
function product_query_action_callback( $q ){
$q->set( 'post__in', (array) custom_query_incl_ids() );
}
代码进入您的活动子主题(或活动主题)的function.php文件中。经过测试,可以正常工作。