Skip to content
Advertisement

Is it possible to extend the woocommerce products rest endpoint?

Is there a way to extend the products-object in the woocommerce rest api /wp-json/wc/v3/products, in a non-destructive way, so plugins that uses that endpoint, doesn’t break.

I’ve currently tried create my own rest endpoint to replicate the object, but that is now missing alot of data ofc.

I’ve also tried something like this, but it didn’t seem to work.

add_filter( 'woocommerce_rest_prepare_product', 'wc_rest_api_add_custom_data_to_product', 90, 2 );
function wc_rest_api_add_custom_data_to_product( $response, $post ) {

  // retrieve a custom field and add it to API response
  $response->data['your_new_key'] = get_post_meta( $post->ID, '_your_custom_filed_key', true );

  return $response;

}

Source: https://francescocarlucci.com/woocommerce/woocommerce-api-custom-data-default-endpoints/

Any help in this regard would be much appreciated.

Advertisement

Answer

I found a way of extending the endpoint with register_rest_field.

That way I can both extend (add) and 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/

User contributions licensed under: CC BY-SA
2 People found this is helpful
Advertisement