由于一个项目,我需要您的帮助。我已经搜索了很多,但是找不到解决方案。 我正在尝试编辑一个名为WooCommerce的函数
woocommerce_account_orders
我已经添加了字段
mycustom_id
到订单元数据对象,因为我需要在mycustom_id字段中获取所有具有当前登录用户的订单:
(mycustom_id = current_user_id())
customer
的支票应保留。我只需要添加其他current_user_id
支票。
这真是令人振奋的住宿:
'客户'=> get_current_user_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,
)
);
}
该方法位于:https://docs.woocommerce.com/wc-apidocs/source-function-woocommerce_account_orders.html#2465-2486
如何将这种功能像过滤器一样聪明地添加到函数中,以及如何以正确的方式将自定义参数传递给函数?我将参数另存为order_meta属性:
[5] => WC_Meta_Data Object (
[current_data:protected] => Array (
[id] => 3477
[key] => mycustom_id
[value] => 2
)
感谢您的帮助。我已经尝试了很多,但是我是PHP的新手,所以必须学习很多东西。
答案 0 :(得分:1)
如果您想更改此查询,则可以通过调用woocommerce_my_account_my_orders_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;
}
但是上面的此功能将仅在列表中显示订单,并且如果客户单击该订单以查看详细信息,则由于他没有查看订单的权限,您将收到一条错误消息,您需要进行修改view_order
功能
例如,您可以授予ID 1的用户查看用户ID 3订单的权限,如下所示:
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 );