Me sorprendió descubrir que add_role () modifica la base de datos y falla si el rol ya existe. Aquí hay dos implicaciones, una primera más seria que la otra: 1) si está en desarrollo y actualiza su código add_role, primero debe eliminar remove_role () 2) una vez que lo tiene correcto, nunca debería tener que ejecutar ese código de nuevo.
Por lo general, he estado poniendo mi add_role () dentro de un gancho de acción wp_loaded. Y como estoy en desarrollo, también agregué un remove_role () antes de mi add_role, así puedo estar seguro de que si modifico mi lista de mayúsculas, surtirá efecto.
Pero claramente esto se está ejecutando cada vez que se accede a una página del blog. De acuerdo, podría ponerlo en una acción solo para administradores, o podría crear una página de complemento tal vez en Usuarios o Herramientas, donde este rol se puede crear una vez. Supongo que espero que haya una solución más simple y elegante.
No me imagino que haya un tipo de acción run_once ¿existe?
¿O es la mejor práctica simplemente agregar el rol y luego usar add_cap () varias veces? E incluso entonces imagino que add_cap está accediendo a la base de datos.
Solo pensando en términos de la mejor manera de reducir el acceso innecesario a db. ¿Cuáles son tus mejores prácticas?
fuente
remove_role()
función antesadd_role()
me ayudó.Respuestas:
Las funciones y capacidades de los usuarios se guardan en la base de datos, por lo que una vez que las haya usado, las
add_role()
guardará y luego WordPress sabrá esa función al igual que las funciones integradas.Ahora, si observa la función
add_role()
más específicamente en la línea 141 , verá que solo guarda el rol y las capacidades en la base de datos si var$use_db
se establece en verdadero (que él es por defecto) para que pueda simplemente cambiarlo antes de llamar a suadd_role()
función y el rol no se guardará.tratar:
Actualizar:
Si está en un entorno de prueba / desarrollo, no veo inconvenientes, pero si está en un entorno en vivo, ahorrará el tiempo necesario para crear ese rol en cada carga.
En cuanto a las mejores prácticas, ejecute una vez, si en un complemento debe usar
register_activation_hook
y para cualquier otra cosa, uso una función condicional simple y personalizada:fuente
run_once
aumenta demasiado las operaciones de la base de datos de lectura / escritura en cada carga de página. Por favor no uses esto.