Soporte » WordPress Avanzado » Capacidades personalizadas

  • Resuelto codigoneo

    (@codigoneo)


    Hola, estoy aprendiendo a crear plugins y he añadido una opción al menú «escritorio» de wordpress donde pondré las características de mi plugin. El caso es que quiero crear un rol que pueda acceder al «escritorio» pero que solo pueda ver las opciones de mi plugin, no quiero que vea «entradas», ni «páginas», ni opciones de wordpress ni nada, solo las opciones de mi plugin.

    He buscado, pero no veo nada por ningún lado. Solo he conseguido aprender a asociar capacidades ya existentes a los roles, pero ninguna parece valerme.

Viendo 4 respuestas - de la 1 a la 4 (de un total de 4)
  • Moderador josearcos

    (@josearcos)

    Hola @codigoneo, gracias por publicar en los foros. Aquí tienes un listado con los roles y capacidades que puedes asignar o quitar en WordPress: https://codex.wordpress.org/Roles_and_Capabilities

    Para el caso, tendrías que seguir estos pasos:

    1. Crear un rol de usuarios

    
    function rol_de_usuario()
    {
        add_role(
            'rol_de_mi_plugin',
            'Rol de Mi Plugin',
            [
                'read'         => false, // Con esta línea le impides leer las entradas y páginas
            ]
        );
    }
    add_action('init', 'rol_de_usuario');
    

    2. Añadir una nueva capacidad.

    
    function nueva_capacidad() 
    {
        $role = get_role( 'rol_de_mi_plugin' );
    
        $role->add_cap( 'ver_mi_plugin', true );
    }
    add_action( 'init', 'nueva_capacidad' );
    

    3. Finalmente en la página de tu plugin usar la función «current_user_can()» y la capacidad nueva que has añadido para permitir acceso o no.

    Más info aquí: https://developer.wordpress.org/plugins/users/roles-and-capabilities/#adding-capabilities

    Saludos.

    Yo lo que haría sería asignar el role «Subscriber» a los usuarios, así no pueden ver nada en el backend, salvo su perfil y el dashboard (quitar el acceso al dashboard es coser y cantar, y también hay plugins para hacer eso específicamente, por ejemplo).

    Luego, al role subscriber le añades una capacidad asociada a tu plugin.

    // Asignar capacidades al activar el plugin
    register_activation_hook( __FILE__, function () {
    	
        $subscriber = get_role('subscriber');
        $subscriber->add_cap( 'my_cap' );
    	
        // Puede que necesites realizar el paso
        // anterior con cada role que sea oportuno
    
    } );
    
    // Al desactivar el plugin, eliminar las capacidades
    // que se asignaron durante la activación
    register_deactivation_hook( __FILE__, function () {
    
        $subscriber = get_role('subscriber');
        $subscriber->remove_cap( 'my_cap' );
    	
        // Puede que necesites realizar el paso
        // anterior con cada role que sea oportuno
       
    } );

    Luego, en tu plugin, compruebas current_user_can('my_cap'); donde sea necesario y listo. También puedes utilizar esa capacidad en funciones propias de WordPress. Por ejemplo, si utilizas el Options API para crear la página de opciones:

    add_options_page( $page_title, $menu_title, 'my_cap', $menu_slug, $function);

    Y ya WordPress se encarga de hacer las comprobaciones.

    Si quieres con un role personalizado:

    // Definir rol y asignar capacidades al activar el plugin
    register_activation_hook( __FILE__, function () {
    	
        add_role( 'custom_role', 'Custom Role', [ 'my_cap' => true ] );
    
    } );
    
    // Al desactivar el plugin, eliminar las capacidades
    // y roles que se asignaron durante la activación
    register_deactivation_hook( __FILE__, function () {
    
        remove_role( 'custom_role' );
       
    } );

    Si utilizas un role propio, tendrás que asignar ese role al usuario durante el registro. Aquí ya hay varias técnicas, no sabría decirte cual sería la apropiada para tu caso sin saber algo más.

    Hint: Recuerda añadir roles y capacidades solo una vez, casi siempre será en register_activation_hook. Una vez hecho se guarda en la base de datos y no necesitas hacerlo en cada init. Luego acuerdate de quitar el role y las capacidades asociadas cuando desactives el plugin, en register_deactivation_hook.

    • Esta respuesta fue modificada hace 3 años, 9 meses por cybmeta.
    Iniciador del debate codigoneo

    (@codigoneo)

    Gracias chicos, en la documentación sobre roles y capacidades de wordpress no quedaba del todo claro como hacerlo. Creo que lo he entendido perfectamente, lo aplicaré y cuando lo tenga os comentaré que tal me ha ido si no me olvido.

    Iniciador del debate codigoneo

    (@codigoneo)

    Efectivamente lo había entendido bien.

    function plugin_activate() {
    	add_role( 'rol_nuevo', _( 'Rol nuevo' ), array( 'read' => true, 'my_cap' => true));
    }
    register_activation_hook( __FILE__, 'plugin_activate' );
    
    function plugin_desactivate() {
    	remove_role('rol_nuevo');
    }
    register_deactivation_hook( __FILE__, 'plugin_desactivate' );

    Como veis, la clave es darle permisos «read» (como al subscriber) con lo que conseguimos que pueda acceder al dashboard. Sin ese permiso ningún usuario puede ver el dashboard. Eso no queda claro en el codex. A partir de hay le doy permisos para mi plugin. De ese modo puede ver las opciones que ofrece mi plugin en el panel de control.

    Muchas gracias a ambos!

    • Esta respuesta fue modificada hace 3 años, 9 meses por codigoneo.
Viendo 4 respuestas - de la 1 a la 4 (de un total de 4)
  • El debate ‘Capacidades personalizadas’ está cerrado a nuevas respuestas.