Cambio de Etiquetas del Menú de Administración
He pasado el último día usando el archivo functions.php para personalizar completamente WordPress para los sitios de mis clientes. Me sorprende todo lo que he podido lograr y lo mucho que facilitará las cosas para mis clientes.
He eliminado ciertos elementos del menú para usuarios que no han iniciado sesión como administradores. Lo que espero (y por lo que he leído sé que se puede hacer) es encontrar una manera de renombrar algunos elementos del menú (barra lateral izquierda en el área de administración). Por ejemplo, cambiar Entradas a Artículos.
Si alguien puede proporcionar el código para el archivo functions.php o señalarme en la dirección correcta, ¡lo agradecería enormemente!
Aquí está el proceso para cambiar las etiquetas (en mi ejemplo cambié "posts" por "contactos")
function change_post_menu_label() {
global $menu;
global $submenu;
$menu[5][0] = 'Contactos';
$submenu['edit.php'][5][0] = 'Contactos';
$submenu['edit.php'][10][0] = 'Añadir Contactos';
$submenu['edit.php'][15][0] = 'Estado'; // Cambiar nombre para categorías
$submenu['edit.php'][16][0] = 'Etiquetas'; // Cambiar nombre para tags
echo '';
}
function change_post_object_label() {
global $wp_post_types;
$labels = &$wp_post_types['post']->labels;
$labels->name = 'Contactos';
$labels->singular_name = 'Contacto';
$labels->add_new = 'Añadir Contacto';
$labels->add_new_item = 'Añadir Contacto';
$labels->edit_item = 'Editar Contactos';
$labels->new_item = 'Contacto';
$labels->view_item = 'Ver Contacto';
$labels->search_items = 'Buscar Contactos';
$labels->not_found = 'No se encontraron Contactos';
$labels->not_found_in_trash = 'No hay Contactos en la papelera';
}
add_action( 'init', 'change_post_object_label' );
add_action( 'admin_menu', 'change_post_menu_label' );
Para cambiar el orden del menú, usa este código:
// PERSONALIZAR EL ORDEN DEL MENÚ DE ADMINISTRACIÓN
function custom_menu_order($menu_ord) {
if (!$menu_ord) return true;
return array(
'index.php', // esto representa el enlace del escritorio
'edit.php', //la pestaña de entradas
'upload.php', // el gestor de medios
'edit.php?post_type=page', //la pestaña de páginas
);
}
add_filter('custom_menu_order', 'custom_menu_order');
add_filter('menu_order', 'custom_menu_order');
Tengo código para eliminar elementos, pero es global y no está basado en el nivel de acceso del usuario

¡Esto es excelente, gracias! Ahora solo necesito encontrar una manera de mover un elemento del submenú (por ejemplo, Menús) como un botón del menú principal. ¿Alguna idea sobre eso?

No lo he probado, pero verifica si agregar 'nav-menus.php' al array lo mueve hacia arriba.

Desafortunadamente no. Esta ha sido la parte que me ha estado molestando. Solo quiero poder tener los menús y widgets como sus propios botones para que sea más fácil para los clientes. De todas formas, gracias por intentarlo.

@Norcross Esto es genial, pero ¿es posible adaptarlo para que incluya el dominio de texto con fines de traducción?

@PhillHealey esta función no contiene ningún dato para etiquetado, solo el orden en sí.

@Norcross Por supuesto. Creo que tenía demasiadas tareas en mi cabeza cuando escribí eso. ;-)

Pequeña pista. Creo que es correcto y suficiente devolver true para el hook custom_menu_order
. - add_filter( 'custom_menu_order', '__return_true' );
El orden viene de menu_order
.

Para renombrar el tipo de entrada predeterminado (o cualquier otro), simplemente usa el filtro post_type_labels_{$post_type}
. Para el tipo predeterminado post
será post_type_labels_post
. En el código a continuación se muestra la lista completa de etiquetas (WP 4.7.1
). No es necesario cambiar todo.
add_filter( 'post_type_labels_post', 'news_rename_labels' );
/**
* Renombrar el tipo de entrada predeterminado a Noticias
*
* @param object $labels
* @hooked post_type_labels_post
* @return object $labels
*/
function news_rename_labels( $labels )
{
# Etiquetas
$labels->name = 'Noticias';
$labels->singular_name = 'Noticia';
$labels->add_new = 'Añadir Noticia';
$labels->add_new_item = 'Añadir Noticia';
$labels->edit_item = 'Editar Noticia';
$labels->new_item = 'Nueva Noticia';
$labels->view_item = 'Ver Noticia';
$labels->view_items = 'Ver Noticias';
$labels->search_items = 'Buscar Noticias';
$labels->not_found = 'No se encontraron noticias.';
$labels->not_found_in_trash = 'No hay noticias en la papelera.';
$labels->parent_item_colon = 'Noticia principal'; // No aplica para "post"
$labels->archives = 'Archivo de Noticias';
$labels->attributes = 'Atributos de Noticias';
$labels->insert_into_item = 'Insertar en noticia';
$labels->uploaded_to_this_item = 'Subido a esta noticia';
$labels->featured_image = 'Imagen destacada';
$labels->set_featured_image = 'Establecer imagen destacada';
$labels->remove_featured_image = 'Eliminar imagen destacada';
$labels->use_featured_image = 'Usar como imagen destacada';
$labels->filter_items_list = 'Filtrar lista de noticias';
$labels->items_list_navigation = 'Navegación de lista de noticias';
$labels->items_list = 'Lista de noticias';
# Menú
$labels->menu_name = 'Noticias';
$labels->all_items = 'Todas las Noticias';
$labels->name_admin_bar = 'Noticia';
return $labels;
}
Si deseas soporte para internacionalización, simplemente usa __( $text, $textdomain )
como:
$labels->name = __( 'Noticias', 'textdomain' );
Encontré el filtro en la función: get_post_type_labels()
del archivo wp-includes/post.php
:
/**
* Filtra las etiquetas de un tipo de entrada específico.
*
* La parte dinámica del nombre del hook, `$post_type`, se refiere
* al slug del tipo de entrada.
*
* @since 3.5.0
*
* @see get_post_type_labels() para la lista completa de etiquetas.
*
* @param object $labels Objeto con las etiquetas del tipo de entrada como variables miembro.
*/
$labels = apply_filters( "post_type_labels_{$post_type}", $labels );

La respuesta de Norcross puede haber sido la mejor en su momento, pero este es un enfoque mucho más limpio que utiliza un filtro nativo para lograr el mismo resultado.

Estoy de acuerdo... El archivo functions.php
ofrece mucha flexibilidad. He necesitado parte de la misma funcionalidad que describes usando una combinación de filtros en functions.php
y este plugin.
Por lo que puedo ver... este plugin resolvería ambos problemas y también funciona bien en instalaciones Multi-Sitio. Espero que te ayude.

Ups... lo siento, acabo de ver la parte sobre no querer usar un plugin. Definitivamente hay formas de traducir los nombres y ubicaciones de las pestañas solo con el Functions.php. Para mí, después de seguir este camino (intentando no usar plugins para esto), decidí que la codificación adicional simplemente no valía la pena... dado lo fácil que era de usar ese plugin. Lamento no haber visto ese requisito antes.

Quizás quieras ver esta pregunta
y la clase que mencionan allí en gist
que contiene las funciones que estás buscando
rename_admin_menu_section()
para renombrar, por ejemplo, cambiar "Posts" a "Artículos"
y puedes eliminar el menú de apariencias y crear tu nuevo elemento de menú principal para

El ejemplo de Norcross anterior es correcto, pero yo necesitaba la posibilidad de internacionalización. Si tuviera la reputación, esto sería un comentario bajo la respuesta de Norcross, pero como no la tengo, simplemente pondré el código modificado aquí. 'i18n_context' es un espacio de nombres arbitrario para el contexto de traducción, podría ser el nombre de tu plugin o tema, por ejemplo.
function change_post_menu_label() {
global $menu;
global $submenu;
$menu[5][0] = __('Contactos', 'i18n_context');
$submenu['edit.php'][5][0] = __('Contactos', 'i18n_context');
$submenu['edit.php'][10][0] = __('Añadir Contactos', 'i18n_context');
$submenu['edit.php'][15][0] = __('Estado', 'i18n_context'); // Cambiar nombre para categorías
$submenu['edit.php'][16][0] = __('Etiquetas', 'i18n_context'); // Cambiar nombre para etiquetas
echo '';
}
function change_post_object_label() {
global $wp_post_types;
$labels = &$wp_post_types['post']->labels;
$labels->name = __('Contactos', 'i18n_context');
$labels->singular_name = __('Contacto', 'i18n_context');
$labels->add_new = __('Añadir Contacto', 'i18n_context');
$labels->add_new_item = __('Añadir Contacto', 'i18n_context');
$labels->edit_item = __('Editar Contactos', 'i18n_context');
$labels->new_item = __('Contacto', 'i18n_context');
$labels->view_item = __('Ver Contacto', 'i18n_context');
$labels->search_items = __('Buscar Contactos', 'i18n_context');
$labels->not_found = __('No se encontraron Contactos', 'i18n_context');
$labels->not_found_in_trash = __('No se encontraron Contactos en la Papelera', 'i18n_context');
}
add_action( 'init', 'change_post_object_label' );
add_action( 'admin_menu', 'change_post_menu_label' );

Sé que llego un poco tarde a esta discusión, pero siento que hay un problema con este enfoque que debe mencionarse.
Cuando alguno de los códigos anteriores se usa junto con WP 6.4.2, el campo del título desaparece en el editor de bloques cuando está en modo edición, lo que hace imposible cambiarlo o incluso verlo.
Como nadie menciona esto en las publicaciones anteriores, supongo que esto es un problema mío o algo cambió en WordPress después de la introducción del editor de bloques.
¿Alguien podría aclarar si esto es un problema real ahora o si tengo algún otro problema que lo esté causando?
