因为一个项目,我需要你的帮助。我已经搜索了很多,但我找不到解决方案。我正在尝试编辑名为的 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 新手,必须学习很多。
如果你想改变这个查询,你可以通过调用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 );
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句