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 7 años por
cybmeta.