gpt4 book ai didi

Woocommerce REST API v2 : Issue with adding custom data to orders

转载 作者:行者123 更新时间:2023-12-02 03:40:14 25 4
gpt4 key购买 nike

我有一个网站运行旧版本的 Woo v2.5.5,使用旧版 v3 作为 API。我能够使用 woocommerce_api_order_response 操作将数据添加到订单中。

类似于:

add_action( 'woocommerce_api_order_response', 'add_testing_api_function', 10, 1 );
function add_testing_api_function( $order_data ) {
$order_data['foo'] = "testing";
return $order_data;
}

这在旧的 API 链接上工作得很好:

https://example.com/wc-api/v3/orders?consumer_key=KEY&consumer_secret=SECRET

但是,我需要更新到 Woo v3.3+ 并且 REST API 的服务器启动方式为:

https://example.com/wp-json/wc/v2/orders?consumer_key=KEY&consumer_secret=SECRET

我的自定义数据不再出现,并且该 Hook 似乎不起作用。还有其他我可以使用的吗?

最佳答案

WC API 确实是一个很棒的工具。在 WooCommerce 3.x 中将您自己的自定义数据添加到 WC API 商店订单响应中,仍然可以像使用旧版 API 一样轻松地实现。

WooCommerce 为大多数 API 响应 ( see ) 准备了这些过滤器。请注意,它们的格式为 woocommerce_rest_prepare_{$post_type},其中 $post_type 是帖子类型或分类名称,例如 shop_orders产品猫。在 WooCommerce 2.7+ 中,其中一些过滤器还具有 _object 后缀。

只要我们的目的是向订单添加自定义数据,正确使用的过滤器就是 woocommerce_rest_prepare_shop_order_object,其中 shop_order 是我们的 {$post_type} 后面是 _object 后缀(如上所述)。

以下函数有条件地获取用户元数据并返回用户的社交个人资料的头像网址(如果可用)。

/**
* Add custom data to WC API shop order response
* Overriding "$object" here with $order so it's easier to access its properties
*/
function my_wc_rest_prepare_order( $response, $order, $request ) {

if( empty( $response->data ) )
return $response;

$order_id = $order->get_id();

// Get an instance of the WC_Order object
$order = wc_get_order($order_id);

// Get the user ID from WC_Order methods
$user_id = $order->get_customer_id(); // $order->get_user_id(); // or $order->get_customer_id();

// check for WooCommerce Social Login User Avatar
if( class_exists( 'WC_Social_Login' ) ) {

$fb_avatar = get_user_meta( $user_id, '_wc_social_login_facebook_profile_image', true );
$gplus_avatar = get_user_meta( $user_id, '_wc_social_login_google_profile_image', true );

}

$social_data = array();
$avatar_url = array();

$customer_picture = array(
'default' => get_avatar_url( $user_id ),
'facebook' => ( $fb_avatar ) ? esc_url( $fb_avatar ) : '',
'google' => ( $gplus_avatar ) ? esc_url( $gplus_avatar ) : ''
);

$response->data['social_data']['avatar_url'] = $customer_picture;

return $response;
}
add_filter( 'woocommerce_rest_prepare_shop_order_object', 'my_wc_rest_prepare_order', 10, 3 );

结果:

[{
"social_data": {
"avatar_url": {
"default": "https://secure.gravatar.com/avatar/6e27402273b47316097247a2057492f8?s=96&d=mm&r=g",
"facebook": "https://graph.facebook.com/2028542057604385/picture?width=150&height=150",
"google": ""
}
},
}]

关于Woocommerce REST API v2 : Issue with adding custom data to orders,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48895252/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com