WooCommerce 中可变产品的条件自定义价格后缀
Conditional custom price suffix for variable products in WooCommerce
我已经在 Woocommerce 中为我的所有产品设置了价格后缀(在我的例子中是“每盒”)。这适用于可变产品以及没有问题的单一产品。
现在,我希望对于产品的某些产品变体,此前缀更改为“每个货盘”。我已经阅读了很多并尝试了很多,但我还没有找到可以应用于产品的各个变体的解决方案。谁能帮帮我?
下面是我试过的代码。没有错误消息,但它不会更改特定 id 的价格。
add_filter('woocommerce_available_variation', 'variation_price_custom_suffix', 10, 3 );
function variation_price_custom_suffix( $variation_data, $product, $variation ) {
$args = array(
'post_parent' => get_the_ID() // get parent post-ID
);
$variations = get_posts( $args );
foreach ( $variations as $variation ) {
// get variation ID
$variation_ID = $variation->ID;
// get variation price
$variation_price = $product_variation->get_price_html();
get_post_meta( $variation_ID , '_text_field_date_expire', true );
}
if($variation_ID == 732) {
$variation_data['price_html'] .= "Text after price";
}
return $variation_data;
}
非常感谢和问候
凯维德
你让它变得比它应该的更复杂,并且有一些错误:
- 父变量 product 是
$product
函数参数(变量)。
- 您不需要创建 foreach 循环,因为您已经在其中了。
- 您没有使用:
get_post_meta( $variation_ID , '_text_field_date_expire', true );
$variation
变量为当前变化数据数组(see here)
$variation['variation_id']
是产品变体 ID
- 父变量产品 ID(如果需要)是
$product->get_id()
所以有 2 种可能的方法:
1) 针对特定变量产品的所有产品变体:
add_filter('woocommerce_available_variation', 'variation_price_custom_suffix', 10, 3 );
function variation_price_custom_suffix( $variation_data, $product, $variation ) {
// For a specific variable product ID (and all its variations)
if( $product->get_id() == 732 ) {
$date_expire = get_post_meta( $product->get_id(), '_text_field_date_expire', true );
$variation_data['price_html'] .= ' ' . __("Text after price");
}
return $variation_data;
}
2) 定位唯一的产品变体 ID:
add_filter('woocommerce_available_variation', 'variation_price_custom_suffix', 10, 3 );
function variation_price_custom_suffix( $variation_data, $product, $variation ) {
// For a specific product variation ID
if( $variation['variation_id'] == 732 ) {
$date_expire = get_post_meta( $variation['variation_id'], '_text_field_date_expire', true );
$variation_data['price_html'] .= ' ' . __("Text after price");
}
return $variation_data;
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。它现在应该可以更好地工作了,但是您需要完成它才能使用您的自定义字段。
相关:
我已经在 Woocommerce 中为我的所有产品设置了价格后缀(在我的例子中是“每盒”)。这适用于可变产品以及没有问题的单一产品。
现在,我希望对于产品的某些产品变体,此前缀更改为“每个货盘”。我已经阅读了很多并尝试了很多,但我还没有找到可以应用于产品的各个变体的解决方案。谁能帮帮我?
下面是我试过的代码。没有错误消息,但它不会更改特定 id 的价格。
add_filter('woocommerce_available_variation', 'variation_price_custom_suffix', 10, 3 );
function variation_price_custom_suffix( $variation_data, $product, $variation ) {
$args = array(
'post_parent' => get_the_ID() // get parent post-ID
);
$variations = get_posts( $args );
foreach ( $variations as $variation ) {
// get variation ID
$variation_ID = $variation->ID;
// get variation price
$variation_price = $product_variation->get_price_html();
get_post_meta( $variation_ID , '_text_field_date_expire', true );
}
if($variation_ID == 732) {
$variation_data['price_html'] .= "Text after price";
}
return $variation_data;
}
非常感谢和问候 凯维德
你让它变得比它应该的更复杂,并且有一些错误:
- 父变量 product 是
$product
函数参数(变量)。 - 您不需要创建 foreach 循环,因为您已经在其中了。
- 您没有使用:
get_post_meta( $variation_ID , '_text_field_date_expire', true );
$variation
变量为当前变化数据数组(see here)$variation['variation_id']
是产品变体 ID- 父变量产品 ID(如果需要)是
$product->get_id()
所以有 2 种可能的方法:
1) 针对特定变量产品的所有产品变体:
add_filter('woocommerce_available_variation', 'variation_price_custom_suffix', 10, 3 );
function variation_price_custom_suffix( $variation_data, $product, $variation ) {
// For a specific variable product ID (and all its variations)
if( $product->get_id() == 732 ) {
$date_expire = get_post_meta( $product->get_id(), '_text_field_date_expire', true );
$variation_data['price_html'] .= ' ' . __("Text after price");
}
return $variation_data;
}
2) 定位唯一的产品变体 ID:
add_filter('woocommerce_available_variation', 'variation_price_custom_suffix', 10, 3 );
function variation_price_custom_suffix( $variation_data, $product, $variation ) {
// For a specific product variation ID
if( $variation['variation_id'] == 732 ) {
$date_expire = get_post_meta( $variation['variation_id'], '_text_field_date_expire', true );
$variation_data['price_html'] .= ' ' . __("Text after price");
}
return $variation_data;
}
代码进入您的活动子主题(或活动主题)的 function.php 文件。它现在应该可以更好地工作了,但是您需要完成它才能使用您的自定义字段。
相关: