¿En qué acción debo conectarme al agregar roles y capacidades?

10

Voy a usar add_role () y $ role-> add_cap () para configurar un nuevo rol personalizado y adjuntar una nueva capacidad a los roles existentes.

Me pregunto cuál es el mejor lugar para hacer esto. Obviamente, puedo hacerlo directamente dentro de functions.php y terminar con eso. ¿Pero es esta la mejor práctica? ¿Solo necesito hacer esto en admin_init? o debería hacerlo en init?

No estoy completamente seguro de cuáles son las mejores prácticas en torno al uso de ganchos de acción de inicio en lugar de simplemente soltar una llamada de función directa dentro de functions.php.

¡Gracias por tu contribución!

Tom Auger
fuente

Respuestas:

10

Al agregar un rol y capacidades, solo necesita ejecutar el código una vez, ya que los roles y capacidades se guardan en la base de datos cuando se usan add_roleo ->add_capfunciones, así como Andy dijo que puede usar after_setup_themepara este tipo de acción, pero agregue algún tipo de verificación para que solo se ejecuta una vez, como register_activation_hook o usando opciones:

add_action('after_setup_theme','my_add_role_function');

function my_add_role_function(){
    $roles_set = get_option('my_roles_are_set');
    if(!$roles_set){
        add_role('my_role', 'my_roleUser', array(
            'read' => true, // True allows that capability, False specifically removes it.
            'edit_posts' => true,
            'delete_posts' => true,
            'upload_files' => true 
        ));
        update_option('my_roles_are_set',true);
    }
}
Bainternet
fuente
Gracias por esto. ¿Es cierto que add_role o add_cap SIEMPRE aprovecha la base de datos? Cuando busqué en el código fuente, parecía que este no era siempre el caso, es decir: en la mayoría de los métodos de WP_Roles, hay una comprobación de if ($ this-> use_db), lo que me hace pensar que existe la posibilidad de que los roles podría no estar siempre almacenado en la base de datos.
Tom Auger
Además, en lugar de establecer un marcador con opciones, lo que no me parece particularmente escalable, ¿no hay una manera de simplemente preguntar si se ha creado el rol? De lo contrario, ¿qué daño haría redefinir el rol si ya está allí? ¿Conseguirías un rol duplicado o simplemente lo ignorarías? Mirando de nuevo las capacidades.php, veo esto en add_role: if (isset ($ this-> roles [$ role])) return; lo que parece indicar que no duplicará el rol, por lo que no se hace daño.
Tom Auger
No estoy seguro de lo que quieres decir, pero el defualt está $use_db = true;en la clase WP_Roles. y en cuanto a establecer una bandera usando las opciones, es un ejemplo que puede usar, register_activation_hookpero la idea es que su código solo se ejecute una vez y así se ahorrará el tiempo de excitación.
Bainternet
Nunca he visto esto, pero me parece que podría tener sentido incluir los cambios de roles en un complemento y luego aprovechar los ganchos de activación / desactivación para activar los cambios solo una vez. ¿Alguien ha ido por esa ruta?
mrwweb
@mrwweb que también debería funcionar bien
Bainternet
7

Para complementos, he tenido éxito usando plugins_loadedesto. Para los temas, lo usaría after_setup_theme.

Andy
fuente