Permitir que un miembro tenga acceso únicamente a tipos de contenido personalizados. Permiso para editar solo sus propias publicaciones
OK, estoy buscando la mejor manera de abordar esto.
Me siento muy cómodo con PHP y creando tipos de contenido personalizados con campos meta personalizados en WordPress.
Esto es lo que quiero hacer:
- El usuario se registra y se establece como suscriptor por defecto.
- El usuario solicita al administrador tener permiso para el tipo de contenido personalizado.
- El administrador asigna al usuario otro nombre de permiso como "Propietario de Tienda".
- El usuario ahora puede ver el tipo de contenido personalizado y puede hacer una entrada en este tipo de contenido.
- El usuario solo puede ver y editar sus propias publicaciones.
Necesito ayuda con lo siguiente:
- Cómo crear un nuevo "Rol" llamado "Propietario de Tienda",
- Cómo dar el permiso correcto a dicho rol para que solo vea y tenga acceso al tipo de contenido personalizado.
- Permitir que el usuario solo vea y edite sus propias publicaciones en este tipo de contenido personalizado.
Idealmente preferiría que todo esto se hiciera desde el wp-admin pero supongo que podría necesitar construir un front-end para obtener el control preciso que busco.
Cualquier aporte es muy apreciado.
Saludos cordiales
Utiliza el plugin "Members" de Justin Tadlock. Te proporciona la capacidad de crear nuevos roles y editar roles existentes, así como añadir capacidades personalizadas. Todo ese trabajo que tendrías que hacer puede reducirse a unos pocos clics.
Sé que mencionaste en tu comentario a la respuesta de ZaMoose que estás "buscando escribir la funcionalidad yo mismo para tener control total sobre todo". Eso pierde por completo el punto del software de código abierto. Justin Tadlock publicó su plugin precisamente para que lo uses y así TENGAS control total sobre todo.
Si realmente 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 plugin de Tadlock para aprender cómo hacer lo que deseas.
Una vez que tengas un plugin que haga lo que necesitas, deberás cambiar la bandera 'map_meta_cap'
a true
y la bandera 'capability_type'
en tu función de registro del tipo de contenido para que diga algo diferente a 'post', 'page' o cualquier otro tipo 'reservado'. Luego, duplica todas las capacidades relacionadas con los posts (por ejemplo, edit_posts
, edit_others_posts
, publish_posts
, etc.), usando tu tipo de capacidad en lugar de posts. Asegúrate de asignar todos estos permisos a los administradores (no podrás ver el tipo de contenido hasta que hagas esto), luego crea tu rol, imitando las habilidades del rol 'colaborador' para tu tipo de contenido.
Por ejemplo, si tu tipo de capacidad fuera foobars
, querrías dar a los 'dueños de tienda' las capacidades edit_foobars
, delete_foobars
y read
. De esa manera pueden crear sus propios borradores de foobars y eliminar esos borradores, pero como no tienen capacidades publish_foobars
, tienen que enviarlos para aprobación. Como no tienen edit_published_foobars
, todas las modificaciones a un foobar aprobado deben ser aprobadas.

OK, estoy usando el plugin Members ahora para entender cómo funcionan los permisos de miembros. He configurado 'map_meta_cap' => true
y 'capability_type' => 'shopowner'
en mi tipo de contenido personalizado. He creado un nuevo rol llamado ShopOwner
y le he dado las capacidades de read, edit_shopowner, delete_shopowner. Asigné un usuario al rol de ShopOwner e inicié sesión con ese usuario. Ese usuario no puede ver el tipo de contenido personalizado. ¿Me he perdido algo?

cámbialos a edit_shopowners
y delete_shopowners
. edit_shopowner
y delete_shopowner
son capacidades meta que en realidad nunca se verifican. 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 también los de otros? ¿Pueden eliminar elementos publicados?" etc.

No pude entenderlo bien... pero conseguí la funcionalidad que buscaba configurando las capacidades en mi tipo de contenido personalizado y creando esas capacidades en el plugin Members. Te he otorgado las respuestas ya que tu publicación fue la más útil para armar una solución. Gracias

El registro de tipo de publicación tiene un parámetro llamado "capabilities" que puedes utilizar, por ejemplo:
'capability' => 'organize_shop',
http://codex.wordpress.org/Function_Reference/register_post_type
Para crear un nuevo usuario/rol/capacidad puedes usar add_role, add_cap. Aquí un ejemplo simple para comenzar:
// Añadir el rol a la lista de roles de WordPress
// Luego añadir la capacidad 'organize_shop' al rol 'shop_owner'
$role = add_role( 'shop_owner', 'Dueño de Tienda', ['edit_posts' => true]));
$role->add_cap( 'organize_shop' );
// Si 'shop_owner' ya existe, hacer `$wp_roles` visible y luego
// añadir la capacidad 'organize_shop' al rol 'Dueño de Tienda'
public $wp_roles;
$wp_roles->add_cap( 'shop_owner', 'organize_shop' );

hmm... estoy un poco confundido, ¿cuál es la diferencia entre las líneas 2 y 3? :S ¿No añaden la misma capacidad al rol 'Shop Owner'?

Sí, son lo mismo pero muestran diferentes formas de hacerlo, la primera incluye el rol como primer parámetro (Shop Owner), la segunda solo la capacidad ya que está usando $role.

¿Se supone que debes traducir una capacidad/permiso? eso es __('');

¿Has considerado mirar Gravity Forms o TDO Mini Forms para manejar el envío de contenido? Cada uno tiene funcionalidades que te llevarían bastante lejos en el manejo sensato de contenido enviado por usuarios.

Una forma más sencilla y eficiente de lograr esto es instalando un plugin llamado "Advanced Access Manager". No tendrás que escribir la funcionalidad, pero aún así tendrás un buen nivel de control sobre los usuarios, roles y lo que pueden hacer. La mayoría de las cosas que necesitas se pueden lograr con este plugin.

Sé que es un caso bastante particular, pero me costó una hora resolverlo.
Tenía el plugin: WP Custom Admin Interface activado, donde puedes personalizar el menú de administración para usuarios específicos. Si registras un tipo de publicación personalizada después de haber activado y personalizado el menú, entonces hay un botón en 'Custom Admin Interface' >> 'Admin Menu' que se llama 'Add newly added menu items'. Luego presiona 'Guardar' después de eso, y si el punto del menú es accesible para ese tipo de usuario, entonces funcionará después de eso.
