我有一个站点运行旧版本的Woo v2.5.5,使用旧版v3 for 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
我的自定义数据不再显示,并且挂钩似乎不起作用。还有其他我可以使用吗?
答案 0 :(得分:2)
WC API确实是一个很棒的工具。在WooCommerce 3.x中将自己的自定义数据添加到WC API车间订单的响应中,仍然可以像使用旧版API一样容易地实现。
WooCommerce具有针对其大多数API响应(see)的这些准备过滤器。请注意,它们的格式为woocommerce_rest_prepare_{$post_type}
,其中$post_type
是帖子类型或分类名称,例如shop_orders
或product_cat
。在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": ""
}
},
}]