我正在使用[products attribute =“ someattr” terms =“ someterm”]短代码来呈现产品循环。这里的问题是,如果任何一种版本都缺货,我希望能够过滤掉产品。 以下内容无法满足我的需求:
add_filter('woocommerce_shortcode_products_query', 'modifyshortcode', 10, 3);
function modifyshortcode( $query_args, $atts, $loop_name){
if($loop_name == 'products'){
$query_args['meta_query'] = array( array(
'key' => '_stock_status',
'value' => 'outofstock',
'compare' => 'NOT LIKE',
) );
return $query_args;
}
以上内容并未过滤出库存状态为“缺货”的产品。任何想法将不胜感激。
答案 0 :(得分:0)
我已决定采用一个更简单的woocommerce_product_is_visible过滤器解决方案,如果有人需要类似的过滤器,以下内容似乎对我有用:
add_filter( 'woocommerce_product_is_visible', 'hide_product_with_outofstock_variation', 10, 2 );
if(!function_exists('hide_product_with_outofstock_variation')){
function hide_product_with_outofstock_variation( $is_visible, $id ) {
$product = wc_get_product($id);
$outofstock_term = get_term_by( 'name', 'outofstock', 'product_visibility' );
$product_variations = $product->get_children();
foreach ($product_variations as $variation) {
// Get variation stock status
$stock_status = get_post_meta($variation, '_stock_status');
// if variant property 'outofstock' return false
if(in_array($outofstock_term->name, $stock_status)){
$is_visible = false;
}
}
return $is_visible;
}
}