Modifica delle etichette del menu Admin


44

Ho trascorso l'ultimo giorno a utilizzare il file Functions.php per personalizzare completamente WordPress per i siti dei miei clienti. Sono stupito di quanto sono stato in grado di realizzare e di quanto più facile renderà le cose per i miei clienti.

Ho rimosso alcune voci di menu per gli utenti che non hanno effettuato l'accesso come amministratore. Quello che spero (e da quello che ho letto so che può essere fatto) è trovare un modo per rinominare alcune delle voci di menu (barra laterale sinistra nell'area di amministrazione). Ad esempio, modificare Post in articoli.

Se qualcuno può fornire il codice per il file Functions.php o indirizzarmi nella direzione, lo apprezzerei molto!


Forse dovresti dividerlo in due diverse domande: "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,

Risposte:


66

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

function change_post_menu_label() {
    global $menu;
    global $submenu;
    $menu[5][0] = 'Contacts';
    $submenu['edit.php'][5][0] = 'Contacts';
    $submenu['edit.php'][10][0] = 'Add Contacts';
    $submenu['edit.php'][15][0] = 'Status'; // Change name for categories
    $submenu['edit.php'][16][0] = 'Labels'; // Change name for tags
    echo '';
}

function change_post_object_label() {
        global $wp_post_types;
        $labels = &$wp_post_types['post']->labels;
        $labels->name = 'Contacts';
        $labels->singular_name = 'Contact';
        $labels->add_new = 'Add Contact';
        $labels->add_new_item = 'Add Contact';
        $labels->edit_item = 'Edit Contacts';
        $labels->new_item = 'Contact';
        $labels->view_item = 'View Contact';
        $labels->search_items = 'Search Contacts';
        $labels->not_found = 'No Contacts found';
        $labels->not_found_in_trash = 'No Contacts found in Trash';
    }
    add_action( 'init', 'change_post_object_label' );
    add_action( 'admin_menu', 'change_post_menu_label' );

Per modificare l'ordine dei menu, procedere come segue:

// CUSTOMIZE ADMIN MENU ORDER
   function custom_menu_order($menu_ord) {
       if (!$menu_ord) return true;
       return array(
        'index.php', // this represents the dashboard link
        'edit.php', //the posts tab
        'upload.php', // the media manager
        'edit.php?post_type=page', //the posts tab
    );
   }
   add_filter('custom_menu_order', 'custom_menu_order');
   add_filter('menu_order', 'custom_menu_order');

Ho del codice per rimuovere gli oggetti, ma è globale e non basato sul livello di accesso dell'utente


Questo è eccellente grazie! Ora ho solo bisogno di trovare un modo per spostare una voce di sottomenu (es. Menu) come pulsante del menu principale. Qualche idea su questo?
Adam,

Non sono stati testati, ma vedi se l'aggiunta di 'nav-menu.php' all'array lo sposta in alto.
Norcross,

Sfortunatamente no. Questa è stata l'unica parte che mi ha infastidito. Voglio solo essere in grado di avere menu e widget come pulsanti, quindi è più facile per i clienti. Grazie comunque per aver provato
Adam,

@Norcross Questo è fantastico, ma è possibile adattarlo in modo che possa includere il dominio di testo a fini di traduzione?
Phill Healey,

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

8

Per rinominare il tipo di post predefinito (o qualsiasi altro), basta usare il filtro post_type_labels_{$post_type}. Per impostazione predefinita postlo sarà post_type_labels_post. Nel codice seguente è riportato l'elenco completo delle etichette ( WP 4.7.1). Non devi cambiare tutto.

add_filter( 'post_type_labels_post', 'news_rename_labels' );

/**
* Rename default post type to news
*
* @param object $labels
* @hooked post_type_labels_post
* @return object $labels
*/
function news_rename_labels( $labels )
{
    # Labels
    $labels->name = 'News';
    $labels->singular_name = 'News';
    $labels->add_new = 'Add News';
    $labels->add_new_item = 'Add News';
    $labels->edit_item = 'Edit News';
    $labels->new_item = 'New News';
    $labels->view_item = 'View News';
    $labels->view_items = 'View News';
    $labels->search_items = 'Search News';
    $labels->not_found = 'No news found.';
    $labels->not_found_in_trash = 'No news found in Trash.';
    $labels->parent_item_colon = 'Parent news'; // Not for "post"
    $labels->archives = 'News Archives';
    $labels->attributes = 'News Attributes';
    $labels->insert_into_item = 'Insert into news';
    $labels->uploaded_to_this_item = 'Uploaded to this news';
    $labels->featured_image = 'Featured Image';
    $labels->set_featured_image = 'Set featured image';
    $labels->remove_featured_image = 'Remove featured image';
    $labels->use_featured_image = 'Use as featured image';
    $labels->filter_items_list = 'Filter news list';
    $labels->items_list_navigation = 'News list navigation';
    $labels->items_list = 'News list';

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

    return $labels;
}

Se vuoi il supporto per l'internazionalizzazione, usa __( $text, $textdomain )come:

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

Ho trovato il filtro in funzione: get_post_type_labels()da un file wp-includes/post.php:

/**
 * Filter the labels of a specific post type.
 *
 * The dynamic portion of the hook name, `$post_type`, refers to
 * the post type slug.
 *
 * @since 3.5.0
 *
 * @see get_post_type_labels() for the full list of labels.
 *
 * @param object $labels Object with labels for the post type as member variables.
 */
$labels = apply_filters( "post_type_labels_{$post_type}", $labels );

2
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,

2
Dopo aver scritto l'originale, sono d'accordo che questo filtro è molto meglio.
Norcross,

3

Potresti voler guardare questa domanda

e la classe che citano lì in sostanza

che contiene le funzioni che stai cercando

rename_admin_menu_section()

per rinominare ad esempio cambiare Post in Articoli

e puoi rimuovere il menu degli aspetti e creare la nuova voce di menu della pagina principale per


3

Sono d'accordo .. Il functions.phpfile offre molta flessibilità. Ho avuto bisogno delle stesse funzionalità che hai descritto con una combinazione di functions.phpfiltri e questo plugin .

Da quello che posso dire ... questo plugin risolverà entrambi i tuoi problemi e funziona bene anche in situazioni di installazione su più siti. Spero che sia d'aiuto.


Ooops ... spara, scusa, ho appena visto il non voler usare un plugin. Esistono sicuramente modi per tradurre i nomi delle schede e i posizionamenti con il solo Function.php. Per me, dopo aver seguito questo percorso (cercando di essere privo di plug-in per questo) ho deciso che la codifica extra non ne valeva la pena ... vista la facilità con cui quel plug-in doveva essere utilizzato. Mi dispiace che ho perso quei criteri prima.
Ross,

Nessun problema, Ross, lo esaminerò comunque. Grazie
Adam,

0

L'esempio di Norcross sopra è giusto, ma avevo bisogno della possibilità di internazionalizzazione. Se avessi la reputazione, questo sarebbe un commento sotto la risposta di Norcross, ma poiché non lo faccio, inserirò qui il codice modificato. 'i18n_context' è uno spazio dei nomi arbitrario per il contesto di traduzione, ad esempio questo potrebbe essere il nome del plugin o del tema.

function change_post_menu_label() {
  global $menu;
  global $submenu;
  $menu[5][0] = __('Contacts', 'i18n_context');
  $submenu['edit.php'][5][0] = __('Contacts', 'i18n_context');
  $submenu['edit.php'][10][0] = __('Add Contacts', 'i18n_context');
  $submenu['edit.php'][15][0] = __('Status', 'i18n_context'); // Change name for categories
  $submenu['edit.php'][16][0] = __('Labels', 'i18n_context'); // Change name for tags
  echo '';
}

function change_post_object_label() {
  global $wp_post_types;
  $labels = &$wp_post_types['post']->labels;
  $labels->name = __('Contacts', 'i18n_context');
  $labels->singular_name = __('Contact', 'i18n_context');
  $labels->add_new = __('Add Contact', 'i18n_context');
  $labels->add_new_item = __('Add Contact', 'i18n_context');
  $labels->edit_item = __('Edit Contacts', 'i18n_context');
  $labels->new_item = __('Contact', 'i18n_context');
  $labels->view_item = __('View Contact', 'i18n_context');
  $labels->search_items = __('Search Contacts', 'i18n_context');
  $labels->not_found = __('No Contacts found', 'i18n_context');
  $labels->not_found_in_trash = __('No Contacts found in Trash', 'i18n_context');
}
add_action( 'init', 'change_post_object_label' );
add_action( 'admin_menu', 'change_post_menu_label' );

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

bene non posso ancora commentare ... inoltre ho pensato che un taglia e incolla potesse essere utile nel caso in cui Norcross volesse modificarlo.
nimmolo,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.