Modificare le Etichette del Menu di Amministrazione
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!

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

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?

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

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

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

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

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

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
.

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 );

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.

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.

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.

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

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' );

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?
