根据产品变体中的自定义字段设置最大数量
Set max quantity based on a custom field in a Product Variation
我正在尝试根据其中一个自定义字段的值设置变体的最大允许数量。
一切都很好 - 代码在下面工作,但是我希望值是 $quantity = round($quantity/$weight);
而不是 $quantity = round(9/3);
我遇到的问题(过去曾无数次使用其他功能)是我似乎无法提取正确的 'Custom_Field'
数据。我尝试的一切 returns boolean false
或 string 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 );
// …
}
我正在尝试根据其中一个自定义字段的值设置变体的最大允许数量。
一切都很好 - 代码在下面工作,但是我希望值是 $quantity = round($quantity/$weight);
$quantity = round(9/3);
我遇到的问题(过去曾无数次使用其他功能)是我似乎无法提取正确的 'Custom_Field'
数据。我尝试的一切 returns boolean false
或 string 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 );
// …
}