我在Woocommerce 3.X中遇到了一个问题。我(我想)理解这是因为WC_Order不能再直接访问了,但我不确定如何在函数中修复它(我没写过)。
//Admin JS
add_action('admin_enqueue_scripts', 'admin_hooks');
function admin_hooks( $hook ) {
global $woocommerce, $post;
$order = new WC_Order($post->ID);
//to escape # from order id
$order_id = trim(str_replace('#', '', $order->get_order_number()));
$user_id = $order->user_id;
$user_info = get_userdata($user_id);
wp_enqueue_script( 'admin-hooks', get_template_directory_uri(). '/js/admin.hook.js' );
wp_localize_script( 'admin-hooks', 'myTest', $user_info->roles );
}
我尝试将$order = new WC_Order($post->ID);
更改为$order = new wc_get_order( $order_id );
而没有运气,这是有道理的。我可以看到我试图获得帖子ID而不是订单ID,只是不确定如何。正如你所看到的,我只是围绕代码,所以放轻松。我确实看到了this post,但无法解决如何使用我的代码实现的任何输入。
只是提供一些关于该功能的快速反馈,它会在管理订单页面上显示登录用户角色。
答案 0 :(得分:1)
您只能在后端,"发布编辑页面"中获取帖子ID,因此对于订单,它将是"订单编辑页面" (但不是"订单列表页面")。
在您加入 admin_enqueue_scripts
的函数中,您只需要定位订阅编辑页面。
您不需要获取WC_Order对象,对于订单页面,订单ID是帖子ID。
订单中的用户ID是客户ID('客户'用户角色)。
另外,有关信息, $user_info->roles;
是一个数组!
所以正确的代码是:
add_action('admin_enqueue_scripts', 'admin_hooks');
function admin_hooks( $hook ) {
// Targeting only post edit pages
if ( 'post.php' != $hook && ! isset($_GET['post']) && ! $_GET['action'] != 'edit' )
return;
// Get the post ID
$post_id = $_GET['post']; // The post_id
// Get the WP_Post object
$post = get_post($post_id);
// Targeting only Orders
if( $post->post_type != 'shop_order' )
return;
// Get the customer ID (or user ID for customer user role)
$customer_id = get_post_meta( $post_id, '_customer_user', true );
$user_info = get_userdata($customer_id);
$user_roles_array = $user_info->roles; // ==> This is an array !!!
wp_enqueue_script( 'admin-hooks', get_template_directory_uri(). '/js/admin.hook.js' );
wp_localize_script( 'admin-hooks', 'myTest', $user_roles_array );
}
代码放在活动子主题(或主题)的function.php文件中,或者放在任何插件文件中。
我无法测试此代码,因为它涉及其他外部文件。但它应该有用。