WooCommerce:完成订单后更改用户角色

时间:2013-10-30 作者:Rostam

:)

我正在woocommerce中使用wordpress,我想自动化以下步骤。订单完成后,我想将与该订单id关联的用户角色从“customer”更改为“subscriber”。


通过四处搜索,我想我应该能够通过使用钩子函数来完成这一点。php:

add_action( \'woocommerce_order_status_completed\', \'change_role_from_customer_to_subscriber\' );
然后添加函数:

function change_role_from_customer_to_subscriber($order_id){
// code to change role to subscriber
}
在代码中,我想我需要做两件事:1)获取与该订单id关联的用户id 2)将该用户id的角色更改为subscriber


我做了很多尝试,但都没有成功(既没有获得正确的用户id,也没有更改用户id的角色)。因此,任何帮助都将不胜感激!我以前见过两个关于堆栈溢出的相关问题,但遗憾的是,那里的答案对我来说并不适用。我希望有人能帮助我!

非常感谢!:)



编辑:有人帮我解决了问题的第二部分,所以这对我来说是个好消息:)

不幸的是,我还没有弄清楚第一部分:如何获取与订单id关联的用户id。有什么想法吗?

1 个回复
最合适的回答,由SO网友:helgatheviking 整理而成

查看代码有一个非常相关的示例:

function woocommerce_paying_customer( $order_id ) {

    $order = new WC_Order( $order_id );

    if ( $order->user_id > 0 ) {

        $old_spent = absint( get_user_meta( $order->user_id, \'_money_spent\', true ) );
        update_user_meta( $order->user_id, \'_money_spent\', $old_spent + $order->order_total );

        $old_count = absint( get_user_meta( $order->user_id, \'_order_count\', true ) );
        update_user_meta( $order->user_id, \'_order_count\', $old_count + 1 );
    }
}
add_action( \'woocommerce_order_status_completed\', \'woocommerce_paying_customer\' );
这提醒我们$order\\u被传递给woocommerce_order_status_completed 钩从$order\\u id中,可以创建一个新的order对象,并将user\\u id作为属性。

有了这些知识,我认为我们可以修复函数的内部结构,从该用户ID中获取一个新的用户对象,然后删除旧角色,最后应用新角色。

function wpa_120656_convert_paying_customer( $order_id ) {

    $order = new WC_Order( $order_id );

    if ( $order->user_id > 0 ) {
        update_user_meta( $order->user_id, \'paying_customer\', 1 );
        $user = new WP_User( $order->user_id );

        // Remove role
        $user->remove_role( \'customer\' ); 

        // Add role
        $user->add_role( \'subscriber\' );
    }
}
add_action( \'woocommerce_order_status_completed\', \'wpa_120656_convert_paying_customer\' );

结束

相关推荐

Security and Must Use Plugins

从codex article 必须使用插件:只需将文件上载到mu插件目录即可启用,无需登录我觉得这是一个潜在的安全问题。在站点上运行插件中的任何代码之前,必须通过管理面板激活常规插件。我一直认为这是一个明智的安全预防措施,因为攻击者如果能够以某种方式将文件上载到plugins文件夹,则在运行代码之前,还必须访问和修改数据库。这个mu-plugins 文件夹似乎提供了一种简单的方法来避免这种情况。我知道WordPress开发人员比我更了解安全性,所以我想知道是否有人能解释为什么这不是一个安全漏洞。