Зміна міток меню адміністратора


44

Я провів останній день, використовуючи файл function.php, щоб повністю налаштувати WordPress для своїх клієнтських сайтів. Я вражений тим, наскільки мені вдалося виконати і наскільки простіше це зробити для моїх клієнтів.

Я видалив певні пункти меню для користувачів, які не зареєстровані як адміністратор. Я сподіваюся (і з того, що я прочитав, знаю, що це можна зробити) - це знайти спосіб перейменувати деякі елементи меню (ліва бічна панель в області адміністратора). Наприклад, змініть повідомлення на статті.

Якщо хтось може надати код для файлу function.php або вказати мені в напрямку, я б дуже вдячний за це!


Можливо, вам слід розділити це на два різні питання: "Перейменування пунктів меню адміністратора" та "Зміна порядку меню меню адміністратора" ? Це допоможе отримати більше переглядів для вашого питання.
Ян Фабрі

Відповіді:


66

Ось процес зміни міток (я змінив пости на "контакти" у своєму прикладі)

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

Щоб змінити порядок меню, перейдіть до цього:

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

У мене є код для видалення елементів, але він у всьому світі і не заснований на рівні доступу користувача


Це відмінна подяка! Тепер мені просто потрібно знайти спосіб переміщення елемента підменю (наприклад, меню) як основної кнопки меню. Будь-яка ідея з цього приводу?
Адам

Не перевірений, але подивіться, якщо додавання "nav-menus.php" до масиву переміщує його вгору.
Норкросс

На жаль, немає. Це та сама частина, яка мене клопоче. Я просто хочу мати можливість меню та віджетів бути власними кнопками, щоб клієнтам було простіше. Дякую хоча за спробу
Адам,

@Norcross Це чудово, але чи можна адаптувати його так, щоб він міг включати текстовий домен для цілей перекладу?
Філл Хелі

@PhillHealey Ця функція взагалі не містить даних для маркування, скоріше, лише самого замовлення.
Norcross

8

Для перейменування типу публікації за замовчуванням (або будь-якого іншого з цього питання) просто використовуйте filter post_type_labels_{$post_type}. За замовчуванням postце буде post_type_labels_post. У наведеному нижче коді наведений повний список міток ( WP 4.7.1). Не потрібно все змінювати.

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

Якщо ви хочете підтримати інтернаціоналізацію, просто використовуйте __( $text, $textdomain ):

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

Я знайшов фільтр у функції: get_post_type_labels()з файлу 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
Відповідь Норкроса, можливо, була найкращою на той момент, коли вона була написана, але це набагато чистіший підхід, який використовує нативний фільтр для досягнення того ж результату.
Райан

2
Написавши оригінал, я згоден, що цей фільтр набагато краще.
Норкросс

3

Ви можете поглянути на це питання

і клас, який вони там згадують по суті

який містить функції, які ви шукаєте

rename_admin_menu_section()

щоб перейменувати, наприклад, змінити повідомлення на статті

і ви можете видалити меню виступів і створити новий елемент меню верхньої сторінки для


3

Я згоден .. functions.phpФайл надає велику гнучкість. Мені потрібні були ті самі функції, які ви описали за допомогою комбінації functions.phpфільтрів і цього плагіна .

З того, що я можу сказати, цей плагін вирішить обидва ваші проблеми, і він добре працює і в ситуаціях встановлення на декількох сайтах. Сподіваюся, що це допомагає.


Ooops ... стріляйте, вибачте, щойно побачив, що не хочуть використовувати плагін. Однозначно існують способи перекладати назви вкладок та місця розташування лише за допомогою Functions.php. Для мене, попрямувавши вниз по цьому шляху (намагаючись бути без плагінів для цього), я вирішив, що додаткове кодування просто не варто ... враховуючи, наскільки просто цей плагін був у використанні. Вибачте, я раніше пропустив ці критерії.
Росс

Росс жодних проблем, я все одно буду розбиратися в цьому. Спасибі
Адам,

0

Наведений вище приклад Норкроса є правильним, але мені потрібна можливість інтернаціоналізації. Якби у мене була репутація, це був би коментар під відповіддю Норкроса, але оскільки я цього не роблю, я просто поміщу тут модифікований код. 'i18n_context' - це довільна область імен для контексту перекладу, це може бути, наприклад, назва вашого плагіна або тема.

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

Чому ви не запропонували редагувати іншу відповідь?
фуксія

ну я ще не можу коментувати ... також я подумав, що вирізання та вставка можуть бути корисними у випадку, коли Norcross захоче відредагувати його.
nimmolo
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.