Skip Navigation

[Resolved] Hacer un cambio de Rol después de rellenar un formulario

This is the technical support forum for Toolset - a suite of plugins for developing WordPress sites without writing PHP.

Everyone can read this forum, but only Toolset clients can post in it. Toolset support works 6 days per week, 19 hours per day.

Our next available supporter will start replying to tickets in about 0.69 hours from now. Thank you for your understanding.

This topic contains 4 replies, has 2 voices.

Last updated by Rafael Corts 4 months, 2 weeks ago.

Assigned support staff: Nigel.

Author
Posts
#1662781

Hola Nigel, tengo un membership Site que cuando un usuario hace la acción de rellenar un formulario se le cambia el rol, encontrado este código y me funciona.

/** canvi de rol omplir formulari */
add_action('cred_save_data', 'cred_update_user_role_action',10,2);
function cred_update_user_role_action($post_id, $form_data) {
   
  if ($form_data['id'] == 3050) {
    // get the author ID and corresponding WP_User from the post ID 
    $p = get_post( $post_id );
    $author_id = $p->post_author;
    $u = new WP_User( $author_id );
    // modify the user role to match the selected option
    $u->remove_role( 'subscriber' ); /// adjust role name here if needed
    $u->add_role( 'docent' );
  }
}

La cuestión es que en el momento que el usuario rellena el formulario ID 3050 tiene un rol de subscriptor y pasa a tener un rol de "Docent", Por ahora todo perfecto la cuestión es que necesito cambiar del Rol "docent a "intructor-Doncent" y si realizo el cambio en la función entonces no me lo hace correcto y incluso me deja el usuario sin ningún rol. Los dos Rol son creados del mismo lugar en Acceso control de Toolset.
También he detectado que en el apartado de cada usuario me aparece una nueva sección que se dice: "Competencias adicionales" adjunto imagen.
No se si en el apartado de crear nuevos Roles he de cambiar alguna especificaciones.
Saludos.
Rafa Corts

#1664465

Nigel
Supporter

Languages: English (English ) Spanish (Español )

Timezone: Europe/London (GMT+00:00)

Hola Rafa

¿Quieres decir que has cambiado plan y en lugar de cambiar el rol del usuario desde suscritor a docent quieres cambiar a instructor-docent en este mismo paso?

¿Ó que quieres cambiar desde el rol suscritor al rol docent y luego al rol instructor-docent en otro paso?

No sé por que aparecen todas las entradas en la lista de capacitats, puede ser unos "restos" en el base de datos, me habra falta acceso para echar un vistazo.

Voy a marcar la repuesta siguiente como privada para las credenciales de este sitio.

#1665435

Perdona Nigel el codigo que tengo en la pagina fnctions.php es:

add_action('cred_save_data', 'canvi_de_rol',10,2);
function canvi_de_rol($post_id, $form_data) {
   
  if ($form_data['id'] == 3556) {
    // get the author ID and corresponding WP_User from the post ID 
    $p = get_post( $post_id );
    $author_id = $p->post_author;
    $u = new WP_User( $author_id );
    // modify the user role to match the selected option
    $u->remove_role( 'subscriber' ); /// adjust role name here if needed
    $u->add_role( 'instructor-docent' );
  }
}

Los roles se deben poner en minusculas?
Saludos
Rafa Corts

#1666603

Nigel
Supporter

Languages: English (English ) Spanish (Español )

Timezone: Europe/London (GMT+00:00)

En el base de datos en la tabla wp_options se guarda los roles registrados en la opción "wp_user_roles".

Se parece que el rol Instructor Docent correcto es

    [instructor_docent] => Array
        (
            [name] => Instructor-Docent
            [capabilities] => Array
                (...)
        )

Nota que su nombre es "Instructor-Docent" y el slug es "instructor_docent" (no "intructor-docent").

Entonces debes cambiar la linea

$u->add_role( 'instructor_docent' );

No puedes asignar un rol no existente así (pero resulta que WordPress se añada como "capability") y es por eso que aparecen tales "Competències Addicionals" en el perfíl, se parece que son restos de intentos de asignar roles no existentes.

Puedes desactivar mostrar este sección con el siguiente:

add_filter( 'additional_capabilities_display', '__return_false' );
#1667123

Muchas gracias por resolver el problema Nigel.
Saludos.
Rafa Corts