我已在 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
函数参数(变量)。get_post_meta( $variation_ID , '_text_field_date_expire', true );
$variation
变量是当前变化数据的数组(参见这里)$variation['variation_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 文件中。现在应该可以更好地工作,但是您需要完成它才能使用您的自定义字段。