Modificarea Etichetelor din Meniul Admin în WordPress

12 feb. 2011, 21:32:38
Vizualizări: 94.2K
Voturi: 50

Am petrecut ultima zi lucrând cu fișierul functions.php pentru a personaliza complet WordPress pentru site-urile clienților mei. Sunt uimit de cât de multe am reușit să realizez și cât de mult va ușura lucrurile pentru clienții mei.

Am eliminat anumite elemente de meniu pentru utilizatorii care nu sunt autentificați ca administratori. Ceea ce sper (și din ce am citit știu că se poate face) este să găsesc o metodă de a redenumi unele elemente din meniu (bara laterală stângă în zona de admin). De exemplu, să schimb "Postări" în "Articole".

Dacă cineva poate furniza codul pentru fișierul functions.php sau să mă îndrume în direcția corectă, aș fi foarte recunoscător!

1
Comentarii

Poate ar fi bine să împarți această întrebare în două întrebări diferite: "Redenumirea elementelor din meniul de administrare" și "Modificarea ordinii elementelor din meniul de administrare"? Acest lucru te va ajuta să obții mai multe vizualizări pentru întrebarea ta.

Jan Fabry Jan Fabry
13 feb. 2011 17:39:14
Toate răspunsurile la întrebare 6
8
74

Iată procesul pentru a schimba etichetele (am schimbat postările în "contacte" în exemplul meu)

function change_post_menu_label() {
    global $menu;
    global $submenu;
    $menu[5][0] = 'Contacte';
    $submenu['edit.php'][5][0] = 'Contacte';
    $submenu['edit.php'][10][0] = 'Adaugă Contact';
    $submenu['edit.php'][15][0] = 'Stare'; // Schimbă numele pentru categorii
    $submenu['edit.php'][16][0] = 'Etichete'; // Schimbă numele pentru tag-uri
    echo '';
}

function change_post_object_label() {
        global $wp_post_types;
        $labels = &$wp_post_types['post']->labels;
        $labels->name = 'Contacte';
        $labels->singular_name = 'Contact';
        $labels->add_new = 'Adaugă Contact';
        $labels->add_new_item = 'Adaugă Contact';
        $labels->edit_item = 'Editează Contact';
        $labels->new_item = 'Contact';
        $labels->view_item = 'Vizualizează Contact';
        $labels->search_items = 'Caută Contacte';
        $labels->not_found = 'Nu s-au găsit Contacte';
        $labels->not_found_in_trash = 'Nu s-au găsit Contacte în Coșul de Gunoi';
    }
    add_action( 'init', 'change_post_object_label' );
    add_action( 'admin_menu', 'change_post_menu_label' );

Pentru a schimba ordinea meniului, folosește acest cod:

// PERSONALIZEAZĂ ORDINEA MENIULUI ADMIN
   function custom_menu_order($menu_ord) {
       if (!$menu_ord) return true;
       return array(
        'index.php', // reprezintă link-ul către Panoul de Control
        'edit.php', // fila cu postări
        'upload.php', // managerul de fișiere media
        'edit.php?post_type=page', // fila cu pagini
    );
   }
   add_filter('custom_menu_order', 'custom_menu_order');
   add_filter('menu_order', 'custom_menu_order');

Am cod pentru a elimina elemente, dar este global și nu bazat pe nivelul de acces al utilizatorului

13 feb. 2011 01:59:05
Comentarii

Este excelent, mulțumesc! Acum trebuie doar să găsesc o modalitate de a muta un element de submeniu (de ex. Meniuri) ca buton principal de meniu. Ai vreo idee pentru asta?

Adam Adam
13 feb. 2011 02:18:24

Nu am testat, dar verifică dacă adăugarea 'nav-menus.php' în array îl mută sus.

Norcross Norcross
13 feb. 2011 02:29:40

Din păcate nu. Aceasta a fost partea care m-a deranjat. Vreau doar să pot avea meniurile și widget-urile ca butoane separate pentru a fi mai ușor pentru clienți. Totuși, mulțumesc pentru încercare

Adam Adam
13 feb. 2011 02:33:50

@Norcross Acest lucru este minunat, dar este posibil să-l adaptăm astfel încât să includă domeniul textului pentru scopuri de traducere?

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

@PhillHealey această funcție nu conține nicio dată pentru etichetare, ci doar comanda în sine.

Norcross Norcross
12 nov. 2014 15:57:08

@Norcross Desigur. Cred că aveam prea multe sarcini în minte când am scris asta. ;-)

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

Mic indiciu. Cred că este corect și suficient să returnăm true pentru hook-ul custom_menu_order. - add_filter( 'custom_menu_order', '__return_true' ); Ordinea vine din menu_order.

bueltge bueltge
30 mar. 2015 09:35:49

Răspunsul lui @Ivan de mai jos este mai bun deoarece folosește filtrul încorporat post_type_labels_{$post_type}, care este mai elegant.

Ryan Ryan
20 feb. 2018 19:15:34
Arată celelalte 3 comentarii
2
15

Pentru a redenumi tipul de postare implicit (sau oricare altul) folosește filtrul post_type_labels_{$post_type}. Pentru postarea implicită post va fi post_type_labels_post. În codul de mai jos este lista completă de etichete (WP 4.7.1). Nu este necesar să modifici tot.

add_filter( 'post_type_labels_post', 'news_rename_labels' );

/**
* Redenumește tipul de postare implicit în știri
*
* @param object $labels
* @hooked post_type_labels_post
* @return object $labels
*/
function news_rename_labels( $labels )
{
    # Etichete
    $labels->name = 'Știri';
    $labels->singular_name = 'Știre';
    $labels->add_new = 'Adaugă știre';
    $labels->add_new_item = 'Adaugă știre';
    $labels->edit_item = 'Editează știrea';
    $labels->new_item = 'Știre nouă';
    $labels->view_item = 'Vezi știrea';
    $labels->view_items = 'Vezi știrile';
    $labels->search_items = 'Caută știri';
    $labels->not_found = 'Nu s-au găsit știri.';
    $labels->not_found_in_trash = 'Nu există știri în Coșul de gunoi.';
    $labels->parent_item_colon = 'Știre părinte'; // Nu pentru "post"
    $labels->archives = 'Arhive știri';
    $labels->attributes = 'Atribute știri';
    $labels->insert_into_item = 'Inserează în știre';
    $labels->uploaded_to_this_item = 'Încărcat la această știre';
    $labels->featured_image = 'Imagine reprezentativă';
    $labels->set_featured_image = 'Setează imagine reprezentativă';
    $labels->remove_featured_image = 'Șterge imagine reprezentativă';
    $labels->use_featured_image = 'Folosește ca imagine reprezentativă';
    $labels->filter_items_list = 'Filtrează lista de știri';
    $labels->items_list_navigation = 'Navigare listă știri';
    $labels->items_list = 'Listă știri';

    # Meniu
    $labels->menu_name = 'Știri';
    $labels->all_items = 'Toate știrile';
    $labels->name_admin_bar = 'Știre';

    return $labels;
}

Dacă dorești suport pentru internaționalizare, folosește __( $text, $textdomain ) astfel:

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

Am găsit filtrul în funcția: get_post_type_labels() din fișierul wp-includes/post.php:

/**
 * Filtrează etichetele unui tip specific de postare.
 *
 * Porțiunea dinamică a numelui hook-ului, `$post_type`, se referă la
 * slug-ul tipului de postare.
 *
 * @since 3.5.0
 *
 * @see get_post_type_labels() pentru lista completă de etichete.
 *
 * @param object $labels Obiect cu etichetele pentru tipul de postare ca variabile membre.
 */
$labels = apply_filters( "post_type_labels_{$post_type}", $labels );
19 feb. 2017 02:20:30
Comentarii

Răspunsul lui Norcross poate a fost cel mai bun la momentul scrierii, dar aceasta este o abordare mult mai curată care folosește un filtru nativ pentru a obține același rezultat.

Ryan Ryan
20 feb. 2018 19:18:07

Fiind autorul originalului, sunt de acord că acest filtru este mult mai bun.

Norcross Norcross
26 nov. 2018 02:49:00
2

Sunt de acord... Fișierul functions.php oferă multă flexibilitate. Am avut nevoie de o funcționalitate similară cu cea pe care ai descris-o, folosind o combinație de filtre în functions.php și acest plugin.

Din câte am văzut... acest plugin ar rezolva ambele probleme menționate de tine și funcționează bine și în configurații Multi-Site. Sper că te ajută.

12 feb. 2011 22:09:36
Comentarii

Ups... scuze, tocmai am văzut partea despre faptul că nu vrei să folosești un plugin. Există cu siguranță modalități de a traduce numele și poziționarea filelor doar cu Functions.php. Pentru mine, după ce am explorat această cale (încercând să evit plugin-urile pentru asta), am decis că codul suplimentar nu merita efortul... având în vedere cât de ușor era de folosit acel plugin. Îmi pare rău că am ratat acest criteriu inițial.

Ross Ross
12 feb. 2011 22:11:50

Nicio problemă Ross, oricum o să mă uit la această variantă. Mulțumesc

Adam Adam
13 feb. 2011 02:34:13
0

Poate doriți să consultați această întrebare

și clasa menționată acolo pe gist

care conține funcțiile pe care le căutați

rename_admin_menu_section()

pentru a redenumi, de exemplu, să schimbați "Postări" în "Articole"

și puteți elimina meniul "Aspect" și puteți crea un nou element de meniu principal pentru

13 feb. 2011 00:25:36
2

Exemplul lui Norcross de mai sus este corect, dar eu aveam nevoie de posibilitatea internaționalizării. Dacă aș fi avut reputația necesară, acesta ar fi fost un comentariu sub răspunsul lui Norcross, dar din moment ce nu am, voi pune pur și simplu codul modificat aici. 'i18n_context' este un spațiu de nume arbitrar pentru contextul traducerii, acesta ar putea fi numele plugin-ului sau temei tale, de exemplu.

function change_post_menu_label() {
  global $menu;
  global $submenu;
  $menu[5][0] = __('Contacte', 'i18n_context');
  $submenu['edit.php'][5][0] = __('Contacte', 'i18n_context');
  $submenu['edit.php'][10][0] = __('Adaugă Contacte', 'i18n_context');
  $submenu['edit.php'][15][0] = __('Stare', 'i18n_context'); // Schimbă numele pentru categorii
  $submenu['edit.php'][16][0] = __('Etichete', 'i18n_context'); // Schimbă numele pentru tag-uri
  echo '';
}

function change_post_object_label() {
  global $wp_post_types;
  $labels = &$wp_post_types['post']->labels;
  $labels->name = __('Contacte', 'i18n_context');
  $labels->singular_name = __('Contact', 'i18n_context');
  $labels->add_new = __('Adaugă Contact', 'i18n_context');
  $labels->add_new_item = __('Adaugă Contact', 'i18n_context');
  $labels->edit_item = __('Editează Contacte', 'i18n_context');
  $labels->new_item = __('Contact', 'i18n_context');
  $labels->view_item = __('Vezi Contact', 'i18n_context');
  $labels->search_items = __('Caută Contacte', 'i18n_context');
  $labels->not_found = __('Niciun Contact găsit', 'i18n_context');
  $labels->not_found_in_trash = __('Niciun Contact găsit în Coșul de Gunoi', 'i18n_context');
}
add_action( 'init', 'change_post_object_label' );
add_action( 'admin_menu', 'change_post_menu_label' );
4 feb. 2016 10:11:04
Comentarii

De ce nu ai sugerat o editare pentru celălalt răspuns?

fuxia fuxia
4 feb. 2016 10:35:38

ei bine, încă nu pot comenta... de asemenea, am crezut că un copy-paste ar putea fi util în cazul în care Norcross dorește să-l editeze.

nimmolo nimmolo
5 feb. 2016 12:16:04
0

Știu că am întârziat la petrecere, dar simt că există o problemă cu această abordare care trebuie menționată.

Când oricare dintre codurile de mai sus sunt utilizate împreună cu WP 6.4.2, câmpul de titlu dispare în editorul de blocuri în modul de editare, făcând imposibilă schimbarea sau chiar vizualizarea acestuia.

Deoarece nimeni nu menționează acest lucru în postările mai vechi de mai sus, presupun că aceasta este fie o problemă de-a mea, fie ceva s-a schimbat în WordPress după introducerea editorului de blocuri.

Poate cineva să clarifice dacă aceasta este o problemă reală acum sau am eu altă problemă care cauzează acest lucru?

25 ian. 2024 10:51:03