Soporte » Guías – Resolución de problemas » No se actualiza el perfil (rol) del usuario en la seccion de usuarios

  • Hola, como estan?

    Basicamente estoy creando un sistema de suscripciones, en el que cuando el usuario compra la suscripcion, se le cambia el rol de usuario en la base de datos.

    Resulta que lo pruebo y me cambia bien el rol, pero viendo en el panel de WordPress, en USUARIOS – TODOS LOS USUARIOS – y busco el usuario, en vez de cambiar de CLIENTE a ORO (un ejemplo de la suscripcion), me cambia de CLIENTE a NINGUNO, siendo que en la base de datos me lo cambió bien, pasó de a:1:{s:8:»customer»;b:1;} a a:1:{s:3:»oro»;b:1;}.
    Esto lo probé en otro sitios de prueba y me funciona perfecto. Por lo que pienso que se debe tratar de conflictos con otro plugin o algo.

    Dejo el codigo que tengo:

    /////////////////////////////////////// CAMBIO DE ROL SI COMPRAN LA SUSCRIPCION ORO ////////////////////////////
    
    add_action( 'init', 'add_oro_customer_role' );
    
    function add_oro_customer_role(){
        	$customer_role = get_role( 'customer' );
        	add_role( 'premium_customer', __( 'Oro', 'woocommerce' ), $customer_role->capabilities );
    }
    
    add_action( 'woocommerce_checkout_order_processed', 'change_user_role_by_product_purchased_oro', 10, 2 );
    
    function change_user_role_by_product_purchased_oro( $order_id, $posted ){
    	$order = new WC_Order( $order_id );
        global $wpdb; 
        $tabla_suscriptores = $wpdb->prefix . 'suscriptores';
        
    
        $products_list = array( '4658' ); 
        
    
    	// Obtiene el email del pedido
    	if( '3.0.0' <= WC()->version ){
    		$billing_email = $order->get_billing_email();
    		
    	} else {
    		$order_meta = get_post_meta( $order_id );
    		$billing_email = $order_meta[ '_billing_email' ][0];
    	}
    	
    
    	// Comprueba si el usuario ya está registrado con ese email
    	if( email_exists( $billing_email ) ) {
    
    		foreach ( $order->get_items() as $product ) {
    
    			if ( in_array( $product[ 'product_id' ], $products_list ) ) {
    			    
    			        // Obtencion de datos de distintas tablas y funciones
                        $user_id = $wpdb->get_results( "SELECT ID FROM wp_users WHERE user_email = '$billing_email'");
                        $user_id_ID = $user_id[0];
                        $array = json_decode(json_encode($user_id_ID), true);
                        $ID_USER = $array["ID"];
                        $USERSDATA = $wpdb->get_results( "SELECT display_name, user_email FROM wp_users WHERE ID = $ID_USER", ARRAY_A);
                        $USERSROL4 = 'Oro';
                        date_default_timezone_set("America/Argentina/Buenos_Aires");
                        $dateNow = date("d-m-Y (H:i:s)");
                            $numeroAño = substr($dateNow, 9, -11);
                            $numeroAñoExp = $numeroAño + 1;
                        $dateExpiration = substr_replace($dateNow, $numeroAñoExp, 9, -11);
                        $montoCupon = '$1000';
                        $numeroCupon = '1/10';
                        //$gastos_y_ahorros = $wpdb->get_results( "SELECT gastado_con_susc, gastado_sin_susc, total_ahorrado FROM wp_suscriptores WHERE ID = $ID_USER", ARRAY_A);
                        
          				
          				$wpdb->update('wp_usermeta', array('meta_value' => 'a:1:{s:3:"oro";b:1;}'), array('user_id' => $ID_USER, 'meta_key' => 'wp_capabilities'));
          				
          				
          				// Inserta los datos en la base de datos de suscriptores
          				$wpdb->insert(
                            $tabla_suscriptores,
                            array(
                                'id_sitio' => $ID_USER,
                                'display_name' => $USERSDATA[0][display_name],
                                'email' => $USERSDATA[0][user_email],
                                'type_susc' => $USERSROL4,
                                'cupon_amount' => $montoCupon,
                                'cupon_number' => $numeroCupon,
                                'created_at' => $dateNow,
                                'cupon_expiration' => $dateExpiration,
                                'recommendations' => '',
                                'recommended_by' => '',
                                'gastado_con_susc' => /* $gastos_y_ahorros[0][gastado_con_susc]*/ '',
                                'gastado_sin_susc' => /*$gastos_y_ahorros[0][gastado_sin_susc]*/ '',
                                'total_ahorrado' => /*$gastos_y_ahorros[0][total_ahorrado]*/ '',
                            )
                        );
                        
                        echo "<p class='exito'> <b>Felicidades! Tu suscripción se realizó con éxito.</b> <p>";
                      
    			}
    		}
       	}	
    }

    El codigo funciona aun asi perfecto aca tambien. Realiza el cambio de rol, y me actualiza la tabla de suscriptores que creé. El problema es solo que como dije, en la seccion de USUARIOS, no se actualiza el rol, y creo que por este motivo es que no me muestra cosas que me deberia mostrar con mi rol.

    Ojala me puedan dar una mano con esto. Saludos

  • El debate ‘No se actualiza el perfil (rol) del usuario en la seccion de usuarios’ está cerrado a nuevas respuestas.