简体   繁体   中英

Conditional custom price suffix for variable products in WooCommerce

I have set the price suffix for all my products in Woocommerce (“per box” in my case). This works for variable products as well as for single products without problems.

Now I want this prefix to change to “per pallet” for some product variations of a product. I've read a lot and tried a lot, but I haven't found a solution yet that could be applied to individual variants of a product. Can anyone help me?

Below is the Code I tried. There are no error messages, but it does not change the price of a specific 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;
}

Many thanks in advance and many greetings keved

You are making it much more complicated that it should be and there are some mistakes:

  • The parent variable product is the $product function argument (variable).
  • You don't need to make a foreach loop, as you are already in it.
  • You are not using: get_post_meta( $variation_ID , '_text_field_date_expire', true );
  • $variation variable is the array of the current variation data ( see here )
  • $variation['variation_id'] is the product variation ID
  • The parent variable product id(if needed) is $product->get_id()

So 2 posible ways:

1) Targeting all the product variations of a specific variable product:

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) Targeting a unique product variations 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;
}

Code goes in function.php file of your active child theme (or active theme). It should better work now, but you will need to complete it to use your custom field .

Related: Adding custom text to the variation price in Woocommerce

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM