En un artículo anterior habíamos visto cómo usar la REST API de WooCommerce, sin embargo ¿Cómo agregar información adicional a los endpoints que tiene por defecto la API de WooCommerce?, en este artículo veremos cómo realizar esto de manera práctica.
Resultado Final
Al final obtendremos algo similar a lo que se muestra en la siguiente imagen:

Generalidades
En nuestro ejemplo agregaremos información adicional al endpoint de producto que devuelve la API de WooCommerce, sin embargo es posible hacer lo mismo con cualquier Custom Post Type de WooCommerce. El Hook que usaremos será:
woocommerce_rest_prepare_$THIS->POST_TYPE_object
En este hook se puede reemplazar $THIS->POST_TYPE por algún custom post type de WooCommerce como: product, shop_order, shop_coupon
Código para agregar información a un Producto
El siguiente código agrega un campo de marca a la información devuelta por la API de WooCommerce para un producto. La marca se asume que esta almacenada como metadata.
add_filter( 'woocommerce_rest_prepare_product_object', 'wc_rest_api_add_custom_data_to_product', 100, 3 );
function wc_rest_api_add_custom_data_to_product( $response, $object, $request ) {
//Cambiar esta línea de acuerdo a tus necesidades
$response-> data['marca'] = get_post_meta($object-> get_id(), 'marca', true);
return $response;
}
En el código anterior:
- Usamos el Hook woocommerce_rest_prepare_product_object que hace referencia a la función wc_rest_api_add_custom_data_to_product
- La función tiene tres parámetros, uno de los más importantes es la respuesta, a través de la variable $response en donde se pueden agregar elementos adicionales como un array asociativo.
- El otro parámetro $object, es el objeto de producto actual, y en el ejemplo se usa para obtener el ID del producto
- En el ejemplo asumimos que queremos agregar la metadata de marca al producto a través de la función get_post_meta()
Conclusión
Como puedes ver se puede agregar datos adicionales a los endpoints de la API de WooCommerce, a través de un Hook, ya sea para productos, órdenes o cupones.
Tu sitio es genial y el valor que nos entregas no tiene comparación!
Gracias Anthony. Saludos.
tus paginas me han ayudado mucho , pero tengo una pregunta si quiero agregar a la api rest de woocomerce especialmente en pedidos en billing dos campos adicionales que estan en la base de datos . como se podria realizar .Quedo pendiente
Hola Milet
La única variación que veo es obtener los campos de tu base de datos, por lo demás la lógica sería similar a como se detalla en este artículo. Si tus datos estan en la base de datos de WordPress puedes usar las funciones del propio WordPress, revisa este artículo de guia: https://decodecms.com/mostrar-datos-desde-una-tabla-personalizada-de-la-base-de-datos-de-wordpress/
Hola a todos,
A través del API modifico datos de un cliente desde un ERP y uno de los parametros que quiero modificar es el ROL del cliente, pero este es en modo lectura.
¿Como podría personalizar un codigo PHP, al cual le pueda realizar la llamada con los parámetros correspondientes de IdCliente, para asignarle el ROL que le diga?
gracias.
Hola, a través de la API veo que puedes actualizar el usuario y sus roles: https://developer.wordpress.org/rest-api/reference/users/#update-a-user , al menos eso es lo que dice la documentación.
Hola, eres un crack la verdad, te felicito por tu blog lo frecuento mucho, no se si es posible que me ayudes con un requerimiento, el tema es que necesito recuperar el peso del articulo, pero en el endpoint Orders->line_items pero no he logrado conseguirlo, lo he intentado pero no he logrado conseguirlo,
si me puedes dar luces te lo agradezco muchísimo.
Sigan haciendo buen web.
Hola, tal vez los puedas agregar como metadata del ítem de la orden, revisa este código: https://gist.github.com/bekarice/f1ba5b8e2f3c62d82a5cbc100dc3e1ad
Hola amigo muy buena información, quiero que me ayudes en algo estoy usando el endpoint de enlistar todo el detalle de pedidos pero tengo un problema no logro que en el detalle de los producto se muestre los atributos del producto o las etiquetas del producto, te agradezco mucho me des una guía.
Saludos.