Cambio de Etiquetas del Menú de Administración

12 feb 2011, 21:32:38
Vistas: 94.2K
Votos: 50

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!

1
Comentarios

Tal vez deberías dividir esto en dos preguntas diferentes: "Cambiar el nombre de los elementos del menú de administración" y "Cambiar el orden de los elementos del menú de administración"? Esto te ayudará a obtener más vistas para tu pregunta.

Jan Fabry Jan Fabry
13 feb 2011 17:39:14
Todas las respuestas a la pregunta 6
8
74

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

13 feb 2011 01:59:05
Comentarios

¡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?

Adam Adam
13 feb 2011 02:18:24

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

Norcross Norcross
13 feb 2011 02:29:40

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.

Adam Adam
13 feb 2011 02:33:50

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

Phill Healey Phill Healey
12 nov 2014 11:37:41

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

Norcross Norcross
12 nov 2014 15:57:08

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

Phill Healey Phill Healey
13 nov 2014 17:06:31

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.

bueltge bueltge
30 mar 2015 09:35:49

La respuesta de @Ivan a continuación es mejor ya que utiliza el filtro incorporado post_type_labels_{$post_type}, lo cual es más limpio.

Ryan Ryan
20 feb 2018 19:15:34
Mostrar los 3 comentarios restantes
2
15

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 );
19 feb 2017 02:20:30
Comentarios

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.

Ryan Ryan
20 feb 2018 19:18:07

Como autor del original, estoy de acuerdo en que este filtro es mucho mejor.

Norcross Norcross
26 nov 2018 02:49:00
2

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.

12 feb 2011 22:09:36
Comentarios

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.

Ross Ross
12 feb 2011 22:11:50

No hay problema Ross, de todos modos voy a investigarlo. Gracias

Adam Adam
13 feb 2011 02:34:13
0

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

13 feb 2011 00:25:36
2

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' );
4 feb 2016 10:11:04
Comentarios

¿Por qué no sugiriste una edición a la otra respuesta?

fuxia fuxia
4 feb 2016 10:35:38

Bueno, aún no puedo comentar... también pensé que un copiar y pegar podría ser útil en caso de que Norcross quiera editarlo.

nimmolo nimmolo
5 feb 2016 12:16:04
0

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?

25 ene 2024 10:51:03