WooCommerce REST API扩展订单响应

10

我希望找到一种方法来扩展 wc-api/vX/orders/ 接口的返回结果。我已经在结账页面添加了多个自定义字段,例如:关联编号、交货日期等。这些元数据保存在订单中(wp_postmeta 表)。但是为什么它们没有随 API 一起返回呢?

通常情况下,您可以使用以下代码扩展 API 响应:

add_action( 'rest_api_init', 'custom_register_api_fields' );

function custom_register_api_fields() {
    register_rest_field( 'shop_order','relation_number',
    array(
        'get_callback'    => 'custom_api_meta_callback',
        'update_callback' => null,
        'schema'          => null,
    )
    );
}

/**
*
* @param array $object Details of current post.
* @param string $field_name Name of field.
* @param WP_REST_Request $request Current request
*
* @return mixed
*/

function custom_api_meta_callback( $object, $field_name, $request ) {
 return get_post_meta( $object[ 'id' ], $field_name, true );
}

但是,当我使用Postman和php库测试响应时,my-website.co/wc-api/v2/orders中的自定义元数据不可见。

是否有一种方法可以为wc-api注册api字段?

谢谢!


嗨,@bas。 我正在尝试更新订单上的自定义字段,并找到了这篇文章。 你试过吗? https://dev59.com/21oV5IYBdhLWcg3wVdk_ - Magnetize
1
是的!这对我有效。 - Bas
太好了,我也通过上面答案中的方法使其工作起来了,在包装器的Github评论中描述了覆盖C#包装器Order类的方法。 :) - Magnetize
答案在这里!https://stackoverflow.com/questions/66987696/error-woocommerce-rest-api-extending-orders-line-items-response - cabral279
2个回答

6
我有同样的需求,在订单响应中添加新值"line_items"。
我正在使用WC API V2。
链接:https://website.com/wp-json/wc/v2/orders
function get_product_order_image( $response, $object, $request ) {
 
    if( empty( $response->data ) )
        return $response;
    $order_pid= $response->data['line_items'][0]['product_id'];
     $l_w_product_meta = get_post_meta($response->data['line_items'][0]['product_id']);
    $order_imgUrl= wp_get_attachment_url( $l_w_product_meta['_thumbnail_id'][0], 'full' );

    $response->data['line_items'][0]['cover_image'] = $order_imgUrl;
 
    return $response;
} 

add_filter( "woocommerce_rest_prepare_shop_order_object", array( $this, "get_product_order_image"), 10, 3 );

结果 封面图像已添加到行项目结果中

希望这能够帮助未来的某个人。


嘿@Shameem,我在各处搜索如何结束纹商务API,而你是我见过的第一个人!我很希望得到你的帮助,请让我知道您是否愿意协助。非常感谢! - kadddeee
@kadddeee 是的,请! - Shameem Ali
感谢您的回复@Shameem。我在这里创建了一个问题https://dev59.com/JrHma4cB1Zd3GeqPLGkz,让我们在那里继续我们的对话!谢谢!我可能会离开一段时间,但很快就会回来! - kadddeee

2

REST API钩子,用于为“line_items”中的订单响应添加新值(产品图片),适用于简单产品可变产品

也可用于多个产品

function get_product_order_image( $response, $object, $request ) {

    if( empty( $response->data ) )
        return $response;
        
    $images = array();
    
    foreach($response->data['line_items'] as $key => $productItems){
        $productID = $productItems['product_id'];
        $variationID = $productItems['variation_id'];
        
        if($variationID == 0){
            $thumbnailID = get_post_meta( $productID, '_thumbnail_id', true);
            $attachment = wp_get_attachment_image_src($thumbnailID, 'woocommerce_thumbnail' );
            $image = $attachment[0];
        }else{
            $variation = new WC_Product_Variation( $variationID );
            $image_id = $variation->get_image_id();
            $attachment = wp_get_attachment_image_src($image_id, 'woocommerce_thumbnail' );
            $image = $attachment[0];
        }
        
        $response->data['line_items'][$key]['image'] = $image;
    
    }     

    return $response;
} 

add_filter( "woocommerce_rest_prepare_shop_order_object", "get_product_order_image", 10, 3 );

请求:

wp-json/wc/v3/orders(订单)

wp-json/wc/v3/orders/XXX(订单编号)

wp-json/wc/v3/orders/?customers=XXX(客户信息)


谢谢...我一直在寻找这个。 - caiser

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接