Modificarea Etichetelor din Meniul Admin în WordPress
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!

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

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?

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

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

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

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

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

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
.

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

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.

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ă.

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.

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

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

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