为了账号安全,请及时绑定邮箱和手机立即绑定

通过减少 WooCommerce 中的自定义库存数量,使“缺货”产品变体变灰

通过减少 WooCommerce 中的自定义库存数量,使“缺货”产品变体变灰

PHP
慕后森 2023-07-21 16:10:40
我现在面临的问题是,它不会检查这些变体是否缺货(例如主库存为 10,捆绑设置设置为 12 瓶)。我用来添加总库存减少乘数的代码是:// For implementation instructions see: https://aceplugins.com/how-to-add-a-code-snippet//** * Simple product setting. */function ace_add_stock_inventory_multiplier_setting() {    ?><div class='options_group'><?php        woocommerce_wp_text_input( array(            'id'                => '_stock_multiplier',            'label'             => __( 'Inventory reduction per quantity sold', 'woocommerce' ),            'desc_tip'          => 'true',            'description'       => __( 'Enter the quantity multiplier used for reducing stock levels when purchased.', 'woocommerce' ),            'type'              => 'number',            'custom_attributes' => array(                'min'   => '1',                'step'  => '1',            ),        ) );    ?></div><?php}add_action( 'woocommerce_product_options_inventory_product_data', 'ace_add_stock_inventory_multiplier_setting' );/** * Add variable setting. * * @param $loop * @param $variation_data * @param $variation */function ace_add_variation_stock_inventory_multiplier_setting( $loop, $variation_data, $variation ) {    $variation = wc_get_product( $variation );    woocommerce_wp_text_input( array(        'id'                => "stock_multiplier{$loop}",        'name'              => "stock_multiplier[{$loop}]",        'value'             => $variation->get_meta( '_stock_multiplier' ),        'label'             => __( 'Inventory reduction per quantity sold', 'woocommerce' ),        'desc_tip'          => 'true',        'description'       => __( 'Enter the quantity multiplier used for reducing stock levels when purchased.', 'woocommerce' ),        'type'              => 'number',        'custom_attributes' => array(            'min'   => '1',            'step'  => '1',        ),    ) );}
查看完整描述

2 回答

?
肥皂起泡泡

TA贡献1829条经验 获得超6个赞

将总库存数量与新添加的设置进行比较$multiplier

注释并添加到代码中的解释

function filter_woocommerce_variation_is_active( $active, $variation ) {    

    // Get multiplier

    $multiplier = get_post_meta( $variation->get_variation_id(), '_stock_multiplier', true );   

    

    // NOT empty

    if ( ! empty( $multiplier ) ) {

        // Get stock quantity

        $var_stock_count = $variation->get_stock_quantity();

        

        // Stock quantity < multiplier

        if( $var_stock_count < $multiplier ) {

            $active = false;

        }

    }

    

    return $active;

}

add_filter( 'woocommerce_variation_is_active', 'filter_woocommerce_variation_is_active', 10, 2 );



查看完整回答
反对 回复 2023-07-21
?
慕虎7371278

TA贡献1802条经验 获得超4个赞

它不起作用,因为:

  • $item您的代码中未定义变量。

  • 您的自定义字段在父变量产品中定义。

所以你需要更换:

$multiplier = $item->get_product()->get_meta( '_stock_multiplier' );

通过以下方式(从父变量产品获取数据)

$multiplier = get_post_meta( $variation->get_parent_id(), '_stock_multiplier', true );

所以在你的代码中:

add_filter( 'woocommerce_variation_is_active', 'my_jazzy_function', 10, 2 ); 

function my_jazzy_function( $active, $variation ) {    

    // Get multiplier

    if( $multiplier = get_post_meta( $variation->get_parent_id(), '_stock_multiplier', true ) {

        // Get stock quantity

        $var_stock_count = (int) $variation->get_stock_quantity();

    

        // if there are 5 or less, disable the variant, could always just set to 0

        return $var_stock_count <= $multiplier ? false : $active;

    }

    return  $active;

}

现在应该可以了。


查看完整回答
反对 回复 2023-07-21
  • 2 回答
  • 0 关注
  • 105 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信