Cuál es el significado del campo wp_capabilities en la tabla wp_usermeta
Soy nuevo en WordPress, en la tabla wp_usermeta
noto que tenemos una fila
meta_key meta_value
wp_capabilities a:1:{s:13:"administrator";b:1;}
Primero, ¿cuál es el significado del meta_value a:1:{s:13:"administrator";b:1;}
, dónde puedo encontrar la explicación exacta de este campo? O quiero saber todo sobre los roles
usuarios
y Capacidades
, ¿dónde puedo obtener esta información?
Segundo, ¿cómo puedo crear nuevos roles a través de la API de WordPress
mediante código?
Gracias de antemano.

El valor de wp_capabilities se guarda como un array serializado, puedes probarlo en tu PHP o para este ejemplo aquí: http://blog.tanist.co.uk/files/unserialize/.
El Código:
a:1:{s:13:"administrator";b:1;}
Significa:
Array
(
[administrator] => 1
)
Lo que indica que el usuario es un administrador.
Puedes añadir nuevos roles a la base de datos ejecutando la función add_role, ¡y solo ejecútala una vez!

Para ser claro, puedes deserializar el array usando la función PHP unserialize
, y el resultado en este caso es array('administrator' => true)
en formato var_export
.

Además de la respuesta de @Krysiek, debes saber que los datos almacenados en las tablas meta, incluidos los metadatos de usuario, a menudo están serializados. Si deseas saber qué representan realmente los datos, puedes usar la función de PHP unserialize para determinar su valor. Por ejemplo, al pasar el valor a:1:{s:13:"administrator";b:1;}
a través de unserialize (y luego hacer un var_dump de los resultados) se obtiene esto:
array(1) {
["administrator"]=>
bool(true)
}
Encontrarás el mismo tipo de entradas en la tabla options
así como en la tabla post_meta
.
Sin embargo, debes evitar escribir directamente en estas tablas. Existen funciones de WordPress que te permiten almacenar y acceder a datos sobre usuarios. Por ejemplo, para leer datos de la tabla de metadatos de usuario, debes usar get_user_meta y para escribir debes usar la función de WordPress update_user_meta. Existen funciones similares para las tablas post_meta y options.

meta_value
es la columna para almacenar el valor del campo meta. Cada meta_field contiene una clave y un valor.
Creo que este artículo del Codex sobre roles y capacidades puede ayudarte: http://codex.wordpress.org/Roles_and_Capabilities
Para añadir roles personalizados deberías usar la función add_role
(http://codex.wordpress.org/Function_Reference/add_role)
Y un ejemplo de uso del Codex:
$result = add_role('basic_contributor', 'Colaborador Básico', array(
'read' => true, // True permite esa capacidad
'edit_posts' => true,
'delete_posts' => false, // Usa false para denegar explícitamente
));
if (null !== $result) {
echo '¡Genial! ¡Nuevo rol creado!';
} else {
echo 'Oh... el rol basic_contributor ya existe.';
}

La clave "wp_capabilities" en la tabla wp_usermeta identifica la representación serializada de un array que identifica los roles de un usuario y cualquier capacidad que se haya añadido a ese usuario con $user->add_cap('my_capability');
. ¡Gracias spaul!
El equipo de WordPress nombró el campo [prefix]_capabilities antes de darse cuenta de que las "capabilities" eran en realidad cosas agrupadas para usuarios que cumplían un rol particular. Cambiar el valor de la clave de [prefix]_capabilities a [prefix]_roles interrumpiría demasiados plugins de terceros además de requerir una gran refactorización en el propio WordPress.
Por esta razón, es seguro decir que la clave de metadatos wp_capabilities contiene roles de usuario y se llamaría wp_roles si no hubiera ya tantas piezas de software útiles que esperan que use el nombre antiguo.
Debido a que este hecho es muy útil para los nuevos entusiastas de WordPress, recomiendo que todos los que tengan algo que decir sobre Roles (o capacidades) de WordPress sean muy claros acerca del hecho de que los roles de usuario se enumeran en un array que está serializado en la tabla usermeta bajo la clave [prefix]_capabilities.

No es cierto. Puedes asignar fácilmente capacidades personalizadas a usuarios específicos llamando a $user->add_cap('my_capability');
y la entrada se leerá como a:2:{s:13:"administrator";b:1;s:13:"my_capability";b:1;}
. El rol de administrador así como otros usuarios administradores en el sitio no tendrán esta capacidad.

En la tabla wp_usermeta
podemos guardar información adicional relacionada con un usuario al crear uno nuevo o actualizar el perfil de un usuario existente.
En la tabla wp_usermeta
hay una columna llamada meta_key
donde podemos guardar valores mediante los cuales podemos obtener
o actualizar
el valor de ese campo, por ejemplo:
add_user_meta( 'user_id', 'meta_key', 'meta_value')
con esta función podemos agregar el valor meta en la tabla que tengameta_key='meta_key'
.get_user_meta('user_id', 'meta_key', true)
usando esta función podemos obtener el valor del usuario que tengameta_key = 'meta_key'
.update_user_meta( 'user_id, 'meta_key', 'meta_value')
con esta función podemos actualizar el valor meta.delete_user_meta( 'user_id', 'meta_key')
usando esto podemos eliminar el valor meta del usuario.Si deseas guardar el campo
Segundo nombre
para los usuarios, guárdalo enwp_usermata
conmeta_key=middle_name
y guarda su valor enmeta_value=valor
usando estas funciones.
Un rol es como una política de acceso dada a un usuario, que solo tiene ese nivel de acceso en el sitio web. Puedes agregar o eliminar un rol.
Las capacidades son como agregar características o restringir un rol. Por ejemplo, hay 2 roles: 'gold-role', 'platinum-role'. Podemos restringir a 'gold-role' para que solo pueda agregar publicaciones pero no publicarlas, mientras que a 'platinum-role' le agregamos la capacidad de publicar. También podemos agregar o eliminar capacidades relacionadas con un rol. Incluso podemos agregar restricciones a los metaboxes de las publicaciones.
Para más información sigue Roles y Capacidades
Puedes agregar un rol y establecer sus capacidades mediante la API de WordPress o puedes usar plugins para hacerlo. En mi opinión, Advanced Access Manager es el mejor plugin para manejar Roles y Capacidades.
