php - WooCommerce:如何在订单元数据对象中获取具有自定义 ID 的订单?
问题描述
因为一个项目,我需要你的帮助。我已经搜索了很多,但我找不到解决方案。我正在尝试编辑名为的 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 );
推荐阅读
- sql - PostgreSQL查询:写一个查询返回每组连续数的最大值
- git - git reorder 分支中的提交“就地”而不重新设置
- javascript - 了解 forEach 方法的参数的“必要性”
- regex - 正则表达式查找前导散列后不带空格
- python - 如何为所有独特的数据组合绘制直方图?
- eclipse - 如何在 Gradle 中为 Windows 和 Linux 配置多平台 JFace 项目?
- jmeter - CSV 数据配置 - 避免创建重复的文件夹名称
- vb.net - 如何在 VB 中填充主详细信息组合框?
- r - 用 ggplot 绘制 2 个散点图
- excel - 根据匹配项旁边的单元格中的下拉列表插入值