Is it possible to extend the woocommerce products rest endpoint?
I found a way of extending the endpoint with register_rest_field.
That way i can both extend (add) and/or overwrite (update) an object.
function register_images_field() { register_rest_field( 'product', 'images', array( 'get_callback' => function ( $object ) { $medium_large = wp_get_attachment_image_src( get_post_thumbnail_id( $object['id'] ), 'medium_large' ); $medium_large_url = $medium_large['0']; $large = wp_get_attachment_image_src( get_post_thumbnail_id( $object['id'] ), 'large' ); $large_url = $large['0']; return array( 'medium_large' => $medium_large_url, 'large' => $large_url, ); }, 'update_callback' => null, 'schema' => null, ) ); }
Source: https://developer.wordpress.org/reference/functions/register_rest_field/
Here a way to change prices. Maybe you can use the same process?
## The following goes inside the constructor ##// Simple, grouped and external productsadd_filter('woocommerce_product_get_price', array( $this, 'custom_price' ), 99, 2 );add_filter('woocommerce_product_get_regular_price', array( $this, 'custom_price' ), 99, 2 );// Variations add_filter('woocommerce_product_variation_get_regular_price', array( $this, 'custom_price' ), 99, 2 );add_filter('woocommerce_product_variation_get_price', array( $this, 'custom_price' ), 99, 2 );// Variable (price range)add_filter('woocommerce_variation_prices_price', array( $this, 'custom_variable_price' ), 99, 3 );add_filter('woocommerce_variation_prices_regular_price', array( $this, 'custom_variable_price' ), 99, 3 );// Handling price caching (see explanations at the end)add_filter( 'woocommerce_get_variation_prices_hash', array( $this, 'add_price_multiplier_to_variation_prices_hash' ), 99, 1 );## This goes outside the constructor ##// Utility function to change the prices with a multiplier (number)public function get_price_multiplier() { return 2; // x2 for testing}public function custom_price( $price, $product ) { return $price * get_price_multiplier();}public function custom_variable_price( $price, $variation, $product ) { return $price * get_price_multiplier();}public function add_price_multiplier_to_variation_prices_hash( $hash ) { $hash[] = get_price_multiplier(); return $hash;}