Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/268.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/wordpress/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中购买产品后更改用户角色_Php_Wordpress_Woocommerce_Product_User Roles - Fatal编程技术网

Php 在WooCommerce中购买产品后更改用户角色

Php 在WooCommerce中购买产品后更改用户角色,php,wordpress,woocommerce,product,user-roles,Php,Wordpress,Woocommerce,Product,User Roles,我有一个需要建立两个计划(付费)在我的网站上。如果用户购买黄金计划,则应创建一个用户(角色)黄金,并在旅行套餐上给他20%的折扣。如果用户购买白金,wp应为该客户创建“白金”用户角色。现在我在网上找到了代码,但它不起作用: add_action( 'woocommerce_order_status_completed', 'wpglorify_change_role_on_purchase' ); function wpglorify_change_role_on_p

我有一个需要建立两个计划(付费)在我的网站上。如果用户购买黄金计划,则应创建一个用户(角色)黄金,并在旅行套餐上给他20%的折扣。如果用户购买白金,wp应为该客户创建“白金”用户角色。现在我在网上找到了代码,但它不起作用:

    add_action( 'woocommerce_order_status_completed', 
    'wpglorify_change_role_on_purchase' );

    function wpglorify_change_role_on_purchase( $order_id ) {

    // get order object and items
    $order = new WC_Order( $order_id );
    $items = $order->get_items();

    $product_id = 85; // that's a specific product ID

    foreach ( $items as $item ) {

            if( $product_id == $item['product_id'] && $order->user_id ) {
                $user = new WP_User( $order->user_id );

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

                // Add role
                $user->add_role( 'gold' );
            }

    }

    $product_id = 86; // that's a specific product ID

    foreach ( $items as $item ) {

            if( $product_id == $item['product_id'] && $order->user_id ) {
               $user = new WP_User( $order->user_id );

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

                // Add role
                $user->add_role( 'platinum' );
            }

    }
现在我已经将这段代码放在当前活动(子)主题的function.php文件中,但当我测试它并购买产品wordpress时,它会继续创建“客户”用户。
我的代码有问题吗?

已更新

您的代码已经过时,并且有一些错误。请尝试以下操作,该操作将在订单完成时根据购买的产品更改用户角色(“已完成”状态):

代码进入活动子主题(或活动主题)的function.php文件。现在应该可以了


更新:当您使用以下代码自动完成订单时:

add_action( 'woocommerce_thankyou', 'custom_woocommerce_auto_complete_order' );
function custom_woocommerce_auto_complete_order( $order_id ) { 
    if ( ! $order_id ) { 
        return; 
    } 
    $order = wc_get_order( $order_id ); 
    $order->update_status( 'completed' ); 
}
您可以在其中包含基于特定产品的用户角色更改。因此,请尝试以下代码将替换现有函数:

add_action( 'woocommerce_thankyou', 'custom_woocommerce_auto_complete_order' );
function custom_woocommerce_auto_complete_order( $order_id ) { 
    if ( ! $order_id ) { 
        return; 
    } 

    // Get an instance of the WC_Order Object
    $order = wc_get_order( $order_id ); 

    // Only for logged in "customer" user role
    if ( current_user_can( 'customer' ) ) {
        $gold_product_id      = 85; // specific product ID for "gold" user role
        $platinium_product_id = 86; // specific product ID for "platinium" user role


        $user_id = $order->get_customer_id(); // The user Id

        // Get the WP_User Object
        $wp_user = new WP_User( $user_id );

        foreach ( $order->get_items() as $item ) {

            // For "gold" user role
            if ( $gold_product_id == $item->get_product_id() && $order->get_user_id() > 0 ) {
                $user->remove_role( 'customer' ); // Remove 'customer' user role
                $user->add_role( 'gold' ); // Add 'gold' user role
            }

            // For "platinum" user role
            elseif ( $platinium_product_id == $item->get_product_id() && $order->get_user_id() > 0 ) {
                $user->remove_role( 'customer' ); // Remove 'customer' user role
                $user->add_role( 'platinum' ); // Add 'platinum' user role
            }
        }
    }
    $order->update_status( 'completed' ); 
}

代码进入活动子主题(或活动主题)的function.php文件。这也应该可以,将两个功能合并为一个。

谢谢您的回答。我尝试了代码,但系统仍然将新用户注册为“客户”,而不是按所需的角色注册。我用“会员”插件创建了用户角色“黄金”和“白金”。还有什么可能出错?我正在使用此代码自动完成订单:/***自动完成所有WooCommerce订单。*/添加动作('woocommerce'u Thankyu'、'custom'woocommerce'u auto'u complete'u order');函数custom_woocmerce_auto_complete_order('order_id){if(!$order_id){return;}$order=wc_get_order('order_id);$order->update_status('completed');}@Jessica217对不起,我的代码中有一些错误……我已经更新了答案,还添加了第二个选项。试试看,我希望它能起作用。再次感谢。不幸的是,由于某种原因,它不起作用。WP只以“客户”的身份注册黄金和白金用户的新购买@Jessica217我不能做更多,因为我不能真正测试它。
add_action( 'woocommerce_thankyou', 'custom_woocommerce_auto_complete_order' );
function custom_woocommerce_auto_complete_order( $order_id ) { 
    if ( ! $order_id ) { 
        return; 
    } 

    // Get an instance of the WC_Order Object
    $order = wc_get_order( $order_id ); 

    // Only for logged in "customer" user role
    if ( current_user_can( 'customer' ) ) {
        $gold_product_id      = 85; // specific product ID for "gold" user role
        $platinium_product_id = 86; // specific product ID for "platinium" user role


        $user_id = $order->get_customer_id(); // The user Id

        // Get the WP_User Object
        $wp_user = new WP_User( $user_id );

        foreach ( $order->get_items() as $item ) {

            // For "gold" user role
            if ( $gold_product_id == $item->get_product_id() && $order->get_user_id() > 0 ) {
                $user->remove_role( 'customer' ); // Remove 'customer' user role
                $user->add_role( 'gold' ); // Add 'gold' user role
            }

            // For "platinum" user role
            elseif ( $platinium_product_id == $item->get_product_id() && $order->get_user_id() > 0 ) {
                $user->remove_role( 'customer' ); // Remove 'customer' user role
                $user->add_role( 'platinum' ); // Add 'platinum' user role
            }
        }
    }
    $order->update_status( 'completed' ); 
}