Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php WooCommerce:如何在order元数据对象中使用自定义ID获取订单?_Php_Arrays_Wordpress_Serialization_Woocommerce - Fatal编程技术网

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_id字段中获取当前登录用户的所有订单,因此无法访问orders元数据对象:

  • (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即可