根据产品变体中的自定义字段设置最大数量

Set max quantity based on a custom field in a Product Variation

我正在尝试根据其中一个自定义字段的值设置变体的最大允许数量。

一切都很好 - 代码在下面工作,但是我希望值是 $quantity = round($quantity/$weight);

而不是 $quantity = round(9/3);

我遇到的问题(过去曾无数次使用其他功能)是我似乎无法提取正确的 'Custom_Field' 数据。我尝试的一切 returns boolean falsestring Length(0)。当我执行 var_dump($variation_ID) 时,我得到了大量数据,但我的自定义字段不存在。

这很奇怪,因为数据是在我拥有的其他功能中提取的 - 但在这种情况下不是,我不明白为什么。

// On single product pages
    add_filter( 'woocommerce_available_variation', 'customizing_available_variation', 10, 3  );
    function customizing_available_variation( $args, $product_id, $variation_id ) {


    $product = wc_get_product ( $product_id );
    $weight = get_post_meta( $variation_ID, 'custom_field', true );

    $product_stock = $product_id->get_stock_quantity();
    var_dump($variation_id);

    $quantity = round(9/3);

    if( is_woocommerce() ){
        $args['max_qty'] = $quantity;
    }

    return $args;
}

woocommerce_available_variation passes three arguments, the third one being a WC_Product_Variation(这就是为什么您在 var_dump-ing 时会获得大量数据)。

您已将第三个参数命名为 $variation_id,这可能导致您将其视为 post/product ID。

意思是,您正试图将 WC_Product_Variation 作为 id 传递给 get_post_meta():

$weight = get_post_meta( $variation_ID, 'custom_field', true );

您也对第二个参数(这是产品,而不是产品 ID)做同样的事情。

您只需获取变体 ID 并将其传递即可:

/**
 * Customize available variation
 *
 * @param array $args
 * @param WC_Product_Variable $product
 * @param WC_Product_Variation $variation
 */
function customizing_available_variation( $args, $product, $variation ) {
    $weight = get_post_meta( $variation->get_id(), 'custom_field', true );
    // …
}