我正在使用[products attributes=“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;
}
以上没有过滤掉库存状态为'outofstock'的产品。任何想法都将不胜感激。
我已经决定去一个更简单的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;
}
}