Permitir a los miembros tener acceso solo al tipo de publicación personalizada. Permiso para editar solo sus propias publicaciones

29

OK, estoy buscando la mejor manera de atacar esto.

Me siento muy cómodo con PHP y hago tipos de publicaciones personalizadas con metacampos personalizados en WordPress.

Esto es lo que estoy mirando hacer:

  1. El usuario se registra y se establece en el suscriptor de forma predeterminada.
  2. El usuario solicita al administrador que tenga permiso para personalizar el tipo de publicación.
  3. El administrador asigna al usuario otro nombre de permiso como "Propietario de la tienda".
  4. El usuario ahora puede ver el tipo de publicación personalizada y puede hacer una entrada a este tipo de publicación.
  5. El usuario solo puede ver y editar su propia publicación.

Necesito ayuda en lo siguiente:

  1. Cómo crear un nuevo "Rol" llamado "Propietario de la tienda",
  2. Cómo otorgar el permiso correcto a dicho rol para ver y tener acceso al tipo de publicación personalizada.
  3. Solo permita que el usuario vea y edite sus propias publicaciones en este tipo de publicación personalizada.

Idealmente, preferiría que todo se hiciera desde wp-admin, pero supongo que podría necesitar construir un front-end para obtener el control finito que busco.

Cualquier aporte es muy apreciado.

Saludos cordiales

Brady
fuente

Respuestas:

21

Utilice el complemento " Miembros " de Justin Tadlock . Le brinda la capacidad de crear nuevos roles y editar roles existentes, así como agregar capacidades personalizadas. Todo ese trabajo que tendría que hacer puede reducirse a unos pocos clics.

Sé que dijiste en tu comentario sobre la respuesta de ZaMoose que 'estás buscando escribir la funcionalidad yo mismo para que yo tenga control total sobre todo'. Eso es perder todo el punto del software de código abierto. Justin Tadlock lanzó su complemento para que pueda usarlo con precisión para que tenga control total sobre todo.

Si realmente quieres reinventar la rueda, potencialmente desperdiciando cientos de horas de tu tiempo, no puedo detenerte, pero al menos podrías ahorrarte el problema y usar el complemento de Tadlock para aprender cómo hacer lo que quieres.

Una vez que tenga un complemento que haga lo que desea, deberá cambiar el 'map_meta_cap'indicador truey el 'capability_type'indicador en su función de registro de tipo de publicación para que diga algo diferente a 'publicación', 'página' o cualquier otro 'reservado' tipo. A continuación, duplicar todas las funciones relacionadas con los mensajes (por ejemplo edit_posts, edit_others_posts, publish_posts, etc.), utilizando el tipo de capacidad en lugar de los mensajes. Asegúrese de asignar todos estos permisos a los administradores (no podrá ver el tipo de publicación hasta que lo haga), luego cree su rol, imitando las habilidades del rol 'colaborador' para su tipo de publicación.

Por ejemplo, supongamos que su capacidad era de tipo foobars, que se quiere dar a 'los propietarios de tiendas' los edit_foobars, delete_foobarsy readcapacidades. De esa manera, pueden crear sus propios borradores de foobar y eliminar esos borradores, pero debido a que no tienen publish_foobarscapacidades, tienen que enviarlos para su aprobación. Debido a que no tienen edit_published_foobars, todas las modificaciones a un foobar aprobado tienen que ser aprobadas.

John P Bloch
fuente
OK, estoy usando el complemento Miembros ahora para obtener una idea de cómo funcionan los permisos de los miembros. He configurado 'map_meta_cap' => truey 'capability_type' => 'shopowner'en mi tipo de publicación personalizada. He creado un nuevo rol llamado ShopOwnery le he dado las capacidades de lectura, edit_shopowner, delete_shopowner. Establezca un usuario para el rol de ShopOwner e inicie sesión con ese usuario. Ese usuario no puede ver el tipo de publicación personalizada. ¿Me he perdido algo?
Brady
2
cambiar esos a edit_shopownersy delete_shopowners. edit_shopownery delete_shopownerson meta capacidades que nunca se verifican realmente. Se verifican cuando alguien intenta editar o eliminar un elemento específico y terminan verificando cosas como "¿Puede este usuario eliminar este tipo de elementos? ¿Pueden eliminar solo los suyos o los de otros? ¿Pueden eliminar los elementos publicados?" etc.
John P Bloch
No podía entender nada de eso ... pero obtuve la funcionalidad que busco al establecer capacidades en mi tipo de publicación personalizada y crear esas capacidades en el complemento de miembros. Le he otorgado las respuestas ya que su publicación fue la más útil para mí para armar una solución. Gracias
Brady
19

El tipo de publicación de registro tiene un parámetro llamado "capacidades", por lo que puede tener, por ejemplo,

'capability' => 'organize_shop',

http://codex.wordpress.org/Function_Reference/register_post_type

Para crear un nuevo usuario / rol / capacidad, puede usar add_role, add_cap, como ejemplo simple para comenzar:

// Add the role to WordPress list of roles
// Then add the capability 'organize_shop' to the 'shop_owner' role
$role = add_role( 'shop_owner', 'Shop Owner', ['edit_posts' => true]));
$role->add_cap( 'organize_shop' );


// If 'shop_owner' already exists make `$wp_roles` visible then 
// add the capability 'organize_shop' to the 'Show Owner' role
public $wp_roles;
$wp_roles->add_cap( 'shop_owner', 'organize_shop' );
Wyck
fuente
hmm ... estoy un poco confundido ¿cuál es la diferencia entre 2 y 3 líneas? : S ¿No agrega la misma capacidad al rol 'Propietario de la tienda'?
dashaluna
Sí, son lo mismo, pero muestran diferentes maneras de hacerlo, el primero incluye el rol como primer parámetro (Dueño de la tienda), el segundo solo el límite, ya que está usando $ role.
Wyck
3
¿Se supone que debes traducir una capacidad / permiso? eso es __('');
Svetoslav Marinov
@SvetoslavMarinov Edité la respuesta para eliminar la traducción.
MikeSchinkel
@dashaluna Edité la respuesta para aclararla.
MikeSchinkel
1

¿Ha considerado mirar Gravity Forms o TDO Mini Forms para manejar el envío de contenido real? Cada uno tiene una funcionalidad que lo ayudaría a manejar el contenido enviado por el usuario de manera sensata.

ZaMoose
fuente
Gracias por responder, pero estos no son lo que estoy buscando. Principalmente porque estos son complementos. Estoy buscando escribir la funcionalidad yo mismo para tener control total sobre todo.
Brady
0

Una manera más fácil y eficiente de cómo se puede lograr esto mediante la instalación de un complemento llamado "Administrador de acceso avanzado", no tendrá que escribir la funcionalidad, pero aún tendrá un nivel de control decente sobre los usuarios, los roles y lo que pueden hacer. La mayoría de las cosas que desea se pueden lograr con este complemento.

tonto
fuente