La capacidad de personalización es clave en WordPress, especialmente para satisfacer las necesidades únicas de los diferentes roles de usuarios.
En este artículo, exploraremos un conjunto de funciones personalizadas diseñadas para potenciar la experiencia de los editores, permitiéndoles gestionar eficientemente sus medios y simplificar la interfaz de administración.
En definitiva, lo que vamos a conseguir con este código es que los editores solo tengan acceso a crear, visualizar, editar y eliminar sus propias entradas de blog, por lo que el editor no verá el contenido del administrador u otros usuarios de la web.
También vamos a limitar la biblioteca de medios para que cada editor pueda subir y utilizar sus propias imágenes sin que tenga que visualizar las de la web o las de otros editores.
Para finalizar, vamos a eliminar todos los elementos del menú lateral de la administración de WordPress que sean irrelevantes para los editores.
1. Permitir al Editor Ver Solo Sus Propias Imágenes
La primera función se centra en mejorar la gestión de medios para los editores:
// Permitir al Editor ver solo sus propias imágenes
function modificar_query_medios_por_editor($wp_query) {
if (is_admin() && current_user_can('editor')) {
$wp_query->set('author', get_current_user_id());
}
}
// Ejecutar la función en el gancho pre_get_posts
add_action('pre_get_posts', 'modificar_query_medios_por_editor');
Lenguaje del código: PHP (php)
Explicación Técnica:
- Función Principal:
modificar_query_medios_por_editorajusta la consulta principal para mostrar solo las imágenes asociadas al editor actual. - Condición: La condición
if (is_admin() && current_user_can('editor'))verifica si el usuario está en el área de administración y tiene el rol de editor. - Acción: Dentro de la condición,
$wp_query->set('author', get_current_user_id());configura la consulta para mostrar solo las imágenes del editor actual.
Explicación Sencilla: Esta función asegura que cuando un editor accede a la sección de medios en WordPress, solo ve las imágenes que ha subido, simplificando la gestión al mostrar únicamente contenido relevante para ese editor.
2. Ocultar Opciones del Menú en el Área de Administración para el Rol de Editor
La segunda parte se enfoca en simplificar el menú de administración para los editores:
// Ocultar opciones del menú en el área de administración para el rol de Editor
function ocultar_opciones_menu_editor() {
if (current_user_can('editor')) {
remove_menu_page('index.php'); // Dashboard
remove_menu_page('upload.php'); // Media
remove_menu_page('edit.php?post_type=page'); // Pages
remove_menu_page('edit-comments.php'); // Comments
remove_menu_page('themes.php'); // Appearance
remove_menu_page('plugins.php'); // Plugins
remove_menu_page('users.php'); // Users
remove_menu_page('tools.php'); // Tools
remove_menu_page('options-general.php'); // Settings
remove_menu_page('edit.php?post_type=product'); // Products
}
}
// Ejecutar la función en el gancho admin_menu
add_action('admin_menu', 'ocultar_opciones_menu_editor');
Lenguaje del código: JavaScript (javascript)
Explicación Técnica:
- Función Principal:
ocultar_opciones_menu_editorelimina opciones específicas del menú de administración para el rol de editor. - Condición:
if (current_user_can('editor'))verifica si el usuario tiene el rol de editor. - Acción: Dentro de la condición,
remove_menu_page('...');elimina páginas específicas del menú para simplificar la interfaz.
Explicación Sencilla: Esta función oculta algunas opciones del menú de administración para los editores, eliminando elementos que podrían no ser relevantes para su trabajo diario y simplificando la interfaz.
3. Filtrar las Entradas en el Administrador para Mostrar Solo las del Editor
La tercera parte se centra en filtrar las entradas en la interfaz de administración:
// Filtrar las entradas en el administrador para mostrar solo las entradas del Editor
function filtrar_entradas_admin($query) {
global $pagenow;
if (is_admin() && $pagenow == 'edit.php' && isset($query->query_vars['post_type']) && $query->query_vars['post_type'] == 'post') {
// Verificar si el usuario es un administrador
if (current_user_can('administrator')) {
return; // No aplicar ninguna restricción si es un administrador
}
// Verificar si el usuario es un editor
if (current_user_can('editor')) {
// Mostrar solo las entradas creadas por el usuario actual (editor)
$query->set('author', get_current_user_id());
}
}
}
// Ejecutar la función en el gancho pre_get_posts
add_action('pre_get_posts', 'filtrar_entradas_admin');
Lenguaje del código: PHP (php)
Explicación Técnica:
- Función Principal:
filtrar_entradas_adminajusta la consulta de las entradas en la interfaz de administración. - Condición: La función verifica si el usuario es un editor y está en la página de edición de entradas.
- Acción: Si es un editor,
$query->set('author', get_current_user_id());asegura que solo se muestren las entradas del editor actual.
Explicación Sencilla: Esta función garantiza que los editores vean solo las entradas que han creado, simplificando la gestión y evitando distracciones con entradas de otros usuarios.
Código Completo:
El siguiente código tienes que copiarlo y pegarlo en el functions.php de tu tema hijo o utilizar un plugin como CODE SNIPPETS.
// Permitir al Editor ver solo sus propias imágenes
function modificar_query_medios_por_editor($wp_query) {
if (is_admin() && current_user_can('editor')) {
$wp_query->set('author', get_current_user_id());
}
}
// Ejecutar la función en el gancho pre_get_posts
add_action('pre_get_posts', 'modificar_query_medios_por_editor');
// Ocultar opciones del menú en el área de administración para el rol de Editor
function ocultar_opciones_menu_editor() {
if (current_user_can('editor')) {
remove_menu_page('index.php'); // Dashboard
remove_menu_page('upload.php'); // Media
remove_menu_page('edit.php?post_type=page'); // Pages
remove_menu_page('edit-comments.php'); // Comments
remove_menu_page('themes.php'); // Appearance
remove_menu_page('plugins.php'); // Plugins
remove_menu_page('users.php'); // Users
remove_menu_page('tools.php'); // Tools
remove_menu_page('options-general.php'); // Settings
remove_menu_page('edit.php?post_type=product'); // Products
}
}
// Ejecutar la función en el gancho admin_menu
add_action('admin_menu', 'ocultar_opciones_menu_editor');
// Filtrar las entradas en el administrador para mostrar solo las entradas del Editor
function filtrar_entradas_admin($query) {
global $pagenow;
if (is_admin() && $pagenow == 'edit.php' && isset($query->query_vars['post_type']) && $query->query_vars['post_type'] == 'post') {
// Verificar si el usuario es un administrador
if (current_user_can('administrator')) {
return; // No aplicar ninguna restricción si es un administrador
}
// Verificar si el usuario es un editor
if (current_user_can('editor')) {
// Mostrar solo las entradas creadas por el usuario actual (editor)
$query->set('author', get_current_user_id());
}
}
}
// Ejecutar la función en el gancho pre_get_posts
add_action('pre_get_posts', 'filtrar_entradas_admin');
Lenguaje del código: PHP (php)
Conclusión: Al implementar estas funciones personalizadas en tu sitio WordPress, los editores podrán gestionar sus medios de manera más eficiente, experimentarán una interfaz de administración más limpia y solo verán las entradas que han creado. La personalización es esencial para mejorar la productividad y la experiencia de los usuarios en WordPress.
Nos vemos en el siguiente tutorial.
Un saludo.




Deja tus opiniones o dudas en los comentarios.