How to update woocommerce sale price with custom product attribute value?

Rate this post

I’m trying to update the meta “Sale price” with the custom product attribute “value” named “Cost_price” for every product (simple & variable). This custom product attribute is API connected with other site and It will change the value (price) once a week, so the code should be able to change prices in “sale price” when the products custom attribute is updated.

add_filter( 'woocommerce_product_variation_get_price', 'conditional_product_sale_price', 10, 2 );
add_filter( 'woocommerce_product_get_sale_price', 'conditional_product_sale_price', 10, 2 );
add_filter( 'woocommerce_product_variation_get_sale_price', 'conditional_product_sale_price', 10, 2 );

add_filter( 'woocommerce_variation_prices_sale_price', 'conditional_product_sale_price', 10, 2 );

global $product;
$new_price = array_shift( wc_get_product_terms( $product->id, 'pa_cost_price', array( 'fields' => 'names' ) ) );

function conditional_product_sale_price($price, $product) {
    if( is_admin() ) return $price;
            $price = $new_price;
if( !empty($sale_price) ){
    update_post_meta( $product_id, '_sale_price', $new_price );
    return $price;

I look for different variations here, but didn’t able to find anything that works. Does anyone know what I’m doing wrong? P.S I’m a total noob for this.



I was looking for an answer in the last two days and find really good posts here about woocommerce custom code variations. Finally, I found the right code for my problem.

I used a custom field instead of a custom product attribute, because I don’t know how to “get custom product attribute value” to this code. This solution suits me as well.

add_filter('woocommerce_product_get_price', 'custom_cost_price', 10, 2); 
    add_filter('woocommerce_product_get_regular_price', 'custom_cost_price', 10, 2 );
    // Variations
    add_filter('woocommerce_product_variation_get_regular_price', 'custom_cost_price', 10, 2 );
    add_filter('woocommerce_product_variation_get_price', 'custom_cost_price', 10, 2 );
    function custom_cost_price( $price, $product ) {
        if( $product->get_meta('_costprice') );
            $price = $product->get_meta('_costprice');
        return $price;
    add_filter('woocommerce_variation_prices_price', 'custom_variable_cost_price', 99, 3 );
    add_filter('woocommerce_variation_prices_regular_price', 'custom_variable_cost_price', 99, 3 );
    function custom_variable_cost_price( $price, $variation, $product ) {
        // Delete product cached price  (if needed)
        // wc_delete_product_transients($variation->get_id());
         if( $product->get_meta('_costprice') );
            $price = $product->get_meta('_costprice');
        return $price;

Leave a Reply

Your email address will not be published.

Back to top button