Modificare le Etichette del Menu di Amministrazione

12 feb 2011, 21:32:38
Visualizzazioni: 94.2K
Voti: 50

Ho trascorso l'ultimo giorno utilizzando il file functions.php per personalizzare completamente WordPress per i siti dei miei clienti. Sono stupito da quanto sono riuscito a realizzare e da quanto semplificherà le cose per i miei clienti.

Ho rimosso alcune voci di menu per gli utenti che non hanno effettuato l'accesso come amministratori. Quello che spero (e da quello che ho letto so che è possibile) è trovare un modo per rinominare alcune voci del menu (barra laterale nell'area di amministrazione). Ad esempio, cambiare "Post" in "Articoli".

Se qualcuno può fornire il codice per il file functions.php o indicarmi la direzione giusta, ne sarei davvero grato!

1
Commenti

Forse dovresti dividere questa domanda in due domande diverse: "Rinominare le voci del menu admin" e "Cambiare l'ordine delle voci del menu admin"? Questo ti aiuterà a ottenere più visualizzazioni per la tua domanda.

Jan Fabry Jan Fabry
13 feb 2011 17:39:14
Tutte le risposte alla domanda 6
8
74

Ecco il processo per cambiare le etichette (ho cambiato "posts" in "contatti" nel mio esempio)

function change_post_menu_label() {
    global $menu;
    global $submenu;
    $menu[5][0] = 'Contatti';
    $submenu['edit.php'][5][0] = 'Contatti';
    $submenu['edit.php'][10][0] = 'Aggiungi Contatti';
    $submenu['edit.php'][15][0] = 'Stato'; // Cambia nome per le categorie
    $submenu['edit.php'][16][0] = 'Etichette'; // Cambia nome per i tag
    echo '';
}

function change_post_object_label() {
        global $wp_post_types;
        $labels = &$wp_post_types['post']->labels;
        $labels->name = 'Contatti';
        $labels->singular_name = 'Contatto';
        $labels->add_new = 'Aggiungi Contatto';
        $labels->add_new_item = 'Aggiungi Contatto';
        $labels->edit_item = 'Modifica Contatti';
        $labels->new_item = 'Contatto';
        $labels->view_item = 'Visualizza Contatto';
        $labels->search_items = 'Cerca Contatti';
        $labels->not_found = 'Nessun Contatto trovato';
        $labels->not_found_in_trash = 'Nessun Contatto nel cestino';
    }
    add_action( 'init', 'change_post_object_label' );
    add_action( 'admin_menu', 'change_post_menu_label' );

Per cambiare l'ordine del menu, usa questo codice:

// PERSONALIZZA L'ORDINE DEL MENU AMMINISTRATIVO
   function custom_menu_order($menu_ord) {
       if (!$menu_ord) return true;
       return array(
        'index.php', // rappresenta il link alla dashboard
        'edit.php', // la sezione degli articoli
        'upload.php', // il gestore multimediale
        'edit.php?post_type=page', // la sezione delle pagine
    );
   }
   add_filter('custom_menu_order', 'custom_menu_order');
   add_filter('menu_order', 'custom_menu_order');

Ho anche il codice per rimuovere voci, ma è globale e non basato sul livello di accesso dell'utente

13 feb 2011 01:59:05
Commenti

Questo è fantastico, grazie! Ora devo solo trovare un modo per spostare una voce del sottomenu (es. Menu) come pulsante del menu principale. Hai qualche idea al riguardo?

Adam Adam
13 feb 2011 02:18:24

Non l'ho testato, ma prova ad aggiungere 'nav-menus.php' all'array per vedere se lo sposta in alto.

Norcross Norcross
13 feb 2011 02:29:40

Purtroppo no. Questa è l'unica parte che mi ha dato problemi. Vorrei semplicemente poter avere i menu e i widget come pulsanti separati per renderlo più facile ai clienti. Grazie comunque per averci provato

Adam Adam
13 feb 2011 02:33:50

@Norcross È fantastico, ma è possibile adattarlo in modo che includa il text-domain per scopi di traduzione?

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

@PhillHealey questa funzione non contiene alcun dato per l'etichettatura, ma solo l'ordine stesso.

Norcross Norcross
12 nov 2014 15:57:08

@Norcross Certo. Penso di avere avuto troppi compiti da gestire nella mia testa quando l'ho scritto. ;-)

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

Piccolo suggerimento. Penso che sia corretto e sufficiente restituire true per l'hook custom_menu_order. - add_filter( 'custom_menu_order', '__return_true' ); L'ordine proviene da menu_order.

bueltge bueltge
30 mar 2015 09:35:49

La risposta di @Ivan qui sotto è migliore poiché utilizza il filtro integrato post_type_labels_{$post_type}, che è più pulito.

Ryan Ryan
20 feb 2018 19:15:34
Mostra i restanti 3 commenti
2
15

Per rinominare il tipo di post predefinito (o qualsiasi altro), basta utilizzare il filtro post_type_labels_{$post_type}. Per il tipo predefinito post sarà post_type_labels_post. Nel codice sottostante è presente l'elenco completo delle etichette (WP 4.7.1). Non è necessario modificare tutto.

add_filter( 'post_type_labels_post', 'news_rename_labels' );

/**
* Rinomina il tipo di post predefinito in news
*
* @param object $labels
* @hooked post_type_labels_post
* @return object $labels
*/
function news_rename_labels( $labels )
{
    # Etichette
    $labels->name = 'News';
    $labels->singular_name = 'News';
    $labels->add_new = 'Aggiungi News';
    $labels->add_new_item = 'Aggiungi News';
    $labels->edit_item = 'Modifica News';
    $labels->new_item = 'Nuova News';
    $labels->view_item = 'Visualizza News';
    $labels->view_items = 'Visualizza News';
    $labels->search_items = 'Cerca News';
    $labels->not_found = 'Nessuna news trovata.';
    $labels->not_found_in_trash = 'Nessuna news trovata nel Cestino.';
    $labels->parent_item_colon = 'News genitore'; // Non per "post"
    $labels->archives = 'Archivio News';
    $labels->attributes = 'Attributi News';
    $labels->insert_into_item = 'Inserisci nella news';
    $labels->uploaded_to_this_item = 'Caricato in questa news';
    $labels->featured_image = 'Immagine in evidenza';
    $labels->set_featured_image = 'Imposta immagine in evidenza';
    $labels->remove_featured_image = 'Rimuovi immagine in evidenza';
    $labels->use_featured_image = 'Usa come immagine in evidenza';
    $labels->filter_items_list = 'Filtra lista news';
    $labels->items_list_navigation = 'Navigazione lista news';
    $labels->items_list = 'Lista news';

    # Menu
    $labels->menu_name = 'News';
    $labels->all_items = 'Tutte le News';
    $labels->name_admin_bar = 'News';

    return $labels;
}

Se desideri il supporto per l'internazionalizzazione, utilizza semplicemente __( $text, $textdomain ) come:

$labels->name = __( 'News', 'textdomain' );

Ho trovato il filtro nella funzione: get_post_type_labels() dal file wp-includes/post.php:

/**
 * Filtra le etichette di un tipo di post specifico.
 *
 * La parte dinamica del nome dell'hook, `$post_type`, si riferisce
 * allo slug del tipo di post.
 *
 * @since 3.5.0
 *
 * @see get_post_type_labels() per l'elenco completo delle etichette.
 *
 * @param object $labels Oggetto con le etichette per il tipo di post come variabili membro.
 */
$labels = apply_filters( "post_type_labels_{$post_type}", $labels );
19 feb 2017 02:20:30
Commenti

La risposta di Norcross potrebbe essere stata la migliore al momento in cui è stata scritta, ma questo è un approccio molto più pulito che utilizza un filtro nativo per ottenere lo stesso risultato.

Ryan Ryan
20 feb 2018 19:18:07

Avendo scritto l'originale, concordo che questo filtro sia molto migliore.

Norcross Norcross
26 nov 2018 02:49:00
2

Concordo... Il file functions.php offre molta flessibilità. Anch'io ho avuto bisogno di funzionalità simili a quelle che hai descritto, combinando filtri in functions.php e questo plugin.

Da quello che ho visto... questo plugin risolverebbe entrambi i tuoi problemi e funziona bene anche in installazioni Multi-Site. Spero ti sia utile.

12 feb 2011 22:09:36
Commenti

Ops... accidenti, scusa, ho appena visto la parte riguardante il non voler utilizzare un plugin. Ci sono sicuramente modi per tradurre i nomi delle schede e il loro posizionamento utilizzando solo il Functions.php. Per me, dopo aver intrapreso questa strada (cercando di evitare i plugin per questo) ho deciso che il codice extra semplicemente non ne valeva la pena...vista la facilità d'uso di quel plugin. Scusa se ho mancato questo criterio prima.

Ross Ross
12 feb 2011 22:11:50

Nessun problema Ross, darò comunque un'occhiata. Grazie

Adam Adam
13 feb 2011 02:34:13
0

Potresti voler dare un'occhiata a questa domanda

e alla classe menzionata lì su gist

che contiene le funzioni che stai cercando

rename_admin_menu_section()

per rinominare ad esempio cambiare "Articoli" al posto di "Post"

e puoi rimuovere il menu Aspetto e creare il tuo nuovo elemento di menu principale per

13 feb 2011 00:25:36
2

L'esempio di Norcross sopra è perfetto, ma avevo bisogno della possibilità di internazionalizzazione. Se avessi la reputazione necessaria, questo sarebbe un commento sotto la risposta di Norcross, ma visto che non ce l'ho, inserirò qui il codice modificato. 'i18n_context' è uno spazio dei nomi arbitrario per il contesto di traduzione, potrebbe essere ad esempio il nome del tuo plugin o tema.

function change_post_menu_label() {
  global $menu;
  global $submenu;
  $menu[5][0] = __('Contatti', 'i18n_context');
  $submenu['edit.php'][5][0] = __('Contatti', 'i18n_context');
  $submenu['edit.php'][10][0] = __('Aggiungi Contatti', 'i18n_context');
  $submenu['edit.php'][15][0] = __('Stato', 'i18n_context'); // Cambia nome per le categorie
  $submenu['edit.php'][16][0] = __('Etichette', 'i18n_context'); // Cambia nome per i tag
  echo '';
}

function change_post_object_label() {
  global $wp_post_types;
  $labels = &$wp_post_types['post']->labels;
  $labels->name = __('Contatti', 'i18n_context');
  $labels->singular_name = __('Contatto', 'i18n_context');
  $labels->add_new = __('Aggiungi Contatto', 'i18n_context');
  $labels->add_new_item = __('Aggiungi Contatto', 'i18n_context');
  $labels->edit_item = __('Modifica Contatti', 'i18n_context');
  $labels->new_item = __('Contatto', 'i18n_context');
  $labels->view_item = __('Visualizza Contatto', 'i18n_context');
  $labels->search_items = __('Cerca Contatti', 'i18n_context');
  $labels->not_found = __('Nessun Contatto trovato', 'i18n_context');
  $labels->not_found_in_trash = __('Nessun Contatto trovato nel Cestino', 'i18n_context');
}
add_action( 'init', 'change_post_object_label' );
add_action( 'admin_menu', 'change_post_menu_label' );
4 feb 2016 10:11:04
Commenti

Perché non hai suggerito una modifica all'altra risposta?

fuxia fuxia
4 feb 2016 10:35:38

beh, non posso ancora commentare... inoltre ho pensato che un copia e incolla potesse essere utile nel caso in cui Norcross volesse modificarla.

nimmolo nimmolo
5 feb 2016 12:16:04
0

So che sono un po' in ritardo a questa festa, ma sento che c'è un problema con questo approccio che deve essere discusso.

Quando uno dei codici sopra viene utilizzato insieme a WP 6.4.2, il campo del titolo scompare nell'editor a blocchi quando in modalità modifica, rendendo impossibile cambiarlo o persino vederlo.

Dato che nessuno menziona questo nei post più vecchi sopra, immagino che sia o un problema mio o che qualcosa sia cambiato in WordPress dopo l'introduzione dell'editor a blocchi.

Qualcuno può per favore chiarire se questo è effettivamente un problema ora o se ho qualche altro problema che lo causa?

25 gen 2024 10:51:03