0

我正在尝试根据其自定义字段之一的值设置变体的最大数量限额。

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

我遇到的问题(过去曾多次使用其他功能)是我似乎无法终生提取正确的'Custom_Field'数据。我尝试的一切都返回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;
}
4

1 回答 1

0

woocommerce_available_variation传递三个参数,第三个参数是 a WC_Product_Variation(这就是为什么你在var_dump-ing 时得到大量数据的原因)。

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

意思是,您正在尝试将 aWC_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 );
    // …
}
于 2020-04-12T03:19:56.343 回答