Php WooCommerce:如何在order元数据对象中使用自定义ID获取订单?
因为一个项目,我需要你的帮助。我找了很多,但找不到解决办法。 我正在尝试编辑一个名为Php WooCommerce:如何在order元数据对象中使用自定义ID获取订单?,php,arrays,wordpress,serialization,woocommerce,Php,Arrays,Wordpress,Serialization,Woocommerce,因为一个项目,我需要你的帮助。我找了很多,但找不到解决办法。 我正在尝试编辑一个名为 woocommerce\u账户\u订单 我已经添加了字段 我的客户识别码 由于我需要在mycustom_id字段中获取当前登录用户的所有订单,因此无法访问orders元数据对象: (mycustom\u id=当前用户\u id()) 对客户的检查应保留。我只需要添加另一个当前用户id检查 这应该保持原样: “客户”=>获取当前用户id() 。这是我的无效代码段: func
- woocommerce\u账户\u订单
我已经添加了字段
- 我的客户识别码
- (mycustom\u id=当前用户\u id())
对
客户的检查应保留。我只需要添加另一个当前用户id
检查
这应该保持原样:
-
“客户”=>获取当前用户id()
。这是我的无效代码段:
function woocommerce_account_orders( $current_page ) {
$current_page = empty( $current_page ) ? 1 : absint( $current_page );
$customer_orders = wc_get_orders( apply_filters( 'woocommerce_my_account_my_orders_query', array(
'customer' => get_current_user_id(),
'mycustom_id' => get_current_user_id(),
'page' => $current_page,
'paginate' => true,
) ) );
wc_get_template(
'myaccount/orders.php',
array(
'current_page' => absint( $current_page ),
'customer_orders' => $customer_orders,
'has_orders' => 0 < $customer_orders->total,
)
);
}
谢谢你的帮助。我已经尝试了很多,但我是PHP新手,必须学习很多。如果您想更改此查询,您可以通过调用woocommerce\u my\u account\u my\u orders\u query
过滤器来完成,而不是修改核心函数,这样您就可以实现以下所需的功能:
add_filter( 'woocommerce_my_account_my_orders_query', 'modify_my_order_query', 10, 1 );
function modify_my_order_query( $q ) {
$q['customer'] = [ 1, 3 ]; // you customers ids here
return $q;
}
function give_permissions( $allcaps, $cap, $args ) {
$user = 3; //user id
if ( $cap[0] == 'view_order' ) {
$allcaps[ $cap[0] ] = true;
}
return ( $allcaps );
}
add_filter( 'user_has_cap', 'give_permissions', 10, 3 );
但上述功能将仅在列表中显示订单,如果客户单击该订单查看详细信息,他将收到一条错误消息,因为他没有查看订单的权限,您需要修改查看订单的功能
例如,您可以授予ID为1的用户查看用户ID为3的订单的权限,如下所示:
add_filter( 'woocommerce_my_account_my_orders_query', 'modify_my_order_query', 10, 1 );
function modify_my_order_query( $q ) {
$q['customer'] = [ 1, 3 ]; // you customers ids here
return $q;
}
function give_permissions( $allcaps, $cap, $args ) {
$user = 3; //user id
if ( $cap[0] == 'view_order' ) {
$allcaps[ $cap[0] ] = true;
}
return ( $allcaps );
}
add_filter( 'user_has_cap', 'give_permissions', 10, 3 );
没有人能帮助我吗?这太疯狂了吗/关键是我需要实现一个“共享订单”功能,所以如果我的自定义id设置为其他用户,他也应该看到来自原始客户的订单。这就是为什么我实现了自定义字段来保存第二个用户的id。您的函数只是返回客户1和客户3的所有订单,对吗?所以这对我不起作用:/正因为如此,我需要用我的自定义id以这种方式修改原始函数。@Johnny97如果你将你的客户id存储在数据库中,你可以将自定义客户id与get\u current\u user\u id
合并。上面的想法是给你一个提示,告诉你如何开始实现你的目标以及我应该如何设置一个订单有2个客户ID?我的意思是,检查每个订单中的参数是否更容易?我将第二个客户id保存为每个订单中的订单元字段。例如,订单A由用户1购买,我想向用户2显示此订单,我将2设置为我的自定义字段。因此,我需要更改获取订单的函数,以检查此字段是否有值。如果这是真的,我也必须向客户2显示订单。在这种情况下,您不需要合并,因为您已经将它们存储为数组,您只需使用get_post_meta函数从数据库中获取这些id即可