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;
}
Thanks to @LoicTheAztec, but one thing I didn't do.. Should I add woocommerce_get_variation_prices_hash
to allow refresh cached prices?