¿Es posible dejar que un colaborador cambie el autor de sus propias publicaciones? Me doy cuenta de que esto los bloqueará efectivamente de la publicación, eso es lo que quiero. Quiero que puedan cambiar el autor una vez que hayan terminado de editar.
capabilities
Michael Rogers
fuente
fuente
Respuestas:
Estoy agregando una segunda respuesta porque mi primer enfoque fue rechazado y este no recibió la atención adecuada.
La idea es crear metacuadros personalizados que enumeren todos los usuarios y cambien el autor en
save_post
gancho. De esta manera, no te metas con las capacidades de los usuarios y el cambio de autor ocurre cuando las publicaciones ya están guardadas. Además, el beneficio adicional es que puede controlar la lista de usuarios que están disponibles en el menú desplegable de autor. Pasos a seguir:Registrar meta box:
Crear marcado para su meta box:
Conéctate
save_post
para guardar datos y anular al autor:NOTA Recuerde agregar un campo nonce y verificarlo al guardar el mensaje. También puede considerar usar otros ganchos en lugar de
save_post
, es decir ,pre_post_update
owp_insert_post_data
, para procesar datos en el guardado inicial de la publicación.¡Espero que ayude!
fuente
Trampas:
Aunque es posible permitir que un autor (o colaborador) asigne a otro autor a su propia publicación usando el
user_has_cap
enlace de filtro y algún CÓDIGO relacionado, este enfoque en sí mismo es fundamentalmente defectuoso . Entonces, incluso si toma todas las medidas de seguridad necesarias, sigue siendo una vulnerabilidad porque rompe la arquitectura de capacidad por completo.Permíteme darte un escenario de ejemplo: digamos que un usuario con rol de autor tiene una intención menos que honorable y hace que otro autor tenga muchas publicaciones (tal vez usando un script). ¡La próxima vez que el autor de destino inicie sesión, verá todas esas publicaciones en su nombre! ¡Esto continuará ya que el otro autor no tiene forma de detenerlo! Por lo tanto, debemos encontrar un enfoque alternativo que no tenga este defecto.
Un mejor enfoque:
Si el cambio de autor es una característica necesaria, entonces un mejor enfoque es involucrar al otro autor (o un usuario con mayor poder como otros editores o administradores) en el proceso de cambio de autor, de modo que el autor iniciador no pueda enviar spam autor de destino.
Para lograr eso, dejaremos que el autor inicial elija el autor de destino del editor, pero no cambiaremos el autor de la publicación directamente. En cambio, en el momento del cambio de autor, guardaremos una meta de publicación personalizada que guardará la identificación del autor de destino. Luego, dentro del panel de administración, tendremos un submenú de publicaciones, donde aparecerán todas las publicaciones con la solicitud de cambio de autor. Solo el autor de destino y los usuarios con
edit_others_post
capacidad (como editores, administradores, etc.) tendrán acceso a esta IU de solicitud de cambio de autor. Desde la interfaz de usuario, el usuario con acceso adecuado aprobará el cambio y solo entonces sucederá el cambio de autor final.¿Qué les sucede a las publicaciones mientras están en la cola de aprobación?
La implementación del CÓDIGO puede variar según el requisito, sin embargo, sin ninguna otra implementación del CÓDIGO, los autores iniciadores podrán modificar la publicación o incluso revertir la solicitud de cambio de autor dentro de la ventana del proceso de aprobación. Se bloquearán la publicación tan pronto como se apruebe la solicitud de cambio de autor.
fuente
El cuadro desplegable del autor solo se mostrará cuando el usuario tenga la
edit_others_posts
capacidad. Sin embargo, no desea dar esta capacidad a los autores de forma predeterminada, por razones obvias. La solución es dar esta capacidad solo en circunstancias específicas, es decir, cuando está editando una de sus propias publicaciones. Debido a que la capacidad está escrita en la base de datos, también debe asegurarse de que se elimine en cualquier otra página.Esta es una cuestión de tiempo preciso. Desea cambiar la capacidad después de que WP haya decidido que el contribuyente tiene derecho a editar la publicación, pero antes de que
post.php
se genere el formulario de la página de edición ( ). Un gancho adecuado esadmin_init
.Me gusta esto:
No he probado el código, por lo que puede tener errores, pero se entiende la idea.
fuente
Traté de lograr lo que necesita filtrando las capacidades meta del contribuyente y parece funcionar bien. Todo lo que hago aquí es agregar la
edit_others_posts
capacidad para los contribuyentes cuando WordPress lo solicita.Sin embargo, diría que es una solución un poco extraña para mí y no estoy seguro de si es completamente segura. Por lo que he comprobado después de poner mi filtro en
functions.php
WordPress, no permite a los contribuyentes editar las publicaciones de otros usuarios en otros contextos que el que usted solicitó. Parece estar bien, pero no podemos verificar explícitamente si el usuario actual es el autor de la publicación editada actualmente (no podría guardar la publicación como un usuario diferente si esa verificación condicional se agregara a la función). me preocupa.fuente
edit_others_posts
capacidad esencialmente les permitirá editar las publicaciones de otros. También podemos hacer que el autor sea un editor, eso es probablemente mejor que darle una mayor capacidad. La segunda solución es una posibilidad, pero necesita más trabajo, en mi humilde opinión.edit_others_posts
permitir siempre editar las publicaciones de otros usuarios. Pruebe el código de mi respuesta, incluso con el filtro en su lugar, la verificación de capacidadif ( ! current_user_can( 'edit_post', $post_id ) )
en github.com/WordPress/WordPress/blob/… todavía devuelve falso. Una vez más, estoy de acuerdo en que no es la solución segura como se menciona en mi respuesta, pero pensé que vale la pena mencionarlo ya que realmente funciona. (perdón por dos comentarios seguidos, no encajé en el límite de caracteres)En primer lugar, instale el complemento Editor de roles de usuario ( https://wordpress.org/plugins/user-role-editor/ ).
En segundo lugar, con el complemento, cree una nueva función llamada Administrador de correos, por ejemplo:
Después de crear el nuevo rol, podrá editar sus capacidades. Ahora, es el momento en que resuelve su problema, pero debe decidir entre dos opciones:
(no te preocupes por el rol de contribuidor, todavía)
Primero:
edit_others_posts
ypublish_posts
.Segundo:
edit_others_posts
.Después de decidir, haga clic en "Actualizar". Su nueva función ahora debe tener la
read
capacidad más la (s) que eligió.Ahora, vaya a la página de perfil de usuario de su colaborador y, al final de la página, asigne roles adicionales (función Editor de roles de usuario):
Ahora, cada usuario que sea Colaborador y Administrador de publicaciones podrá cambiar el autor de la publicación de publicaciones no publicadas. Y dependiendo de su elección anterior, el usuario también puede publicar publicaciones, y si lo hacen, ya no podrán editar la publicación.
¡¡¡IMPORTANTE!!!
Y solo para el registro, por defecto WordPress solo permite la
edit_others_posts
capacidad de cambiar el autor de la publicación. Ver https://github.com/WordPress/WordPress/blob/master/wp-admin/includes/class-wp-posts-list-table.php línea 1483.fuente