WooCommerce 中可变产品的有条件自定义价格后缀

问题描述 投票:0回答:1

我已在 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;
}

提前非常感谢和问候 凯维德

php wordpress woocommerce product-variations product-price
1个回答
0
投票

你让它变得更加复杂,并且存在一些错误:

  • 父变量product是
    $product
    函数参数(变量)。
  • 您不需要创建 foreach 循环,因为您已经在其中了。
  • 您没有使用:
    get_post_meta( $variation_ID , '_text_field_date_expire', true );
  • $variation
    变量是当前变化数据的数组(参见这里
  • $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 中的变化价格添加自定义文本

© www.soinside.com 2019 - 2024. All rights reserved.