Изменение меток меню администратора

44

Я провел последний день, используя файл functions.php, чтобы полностью настроить WordPress для своих клиентских сайтов. Я поражен тем, как много я смог достичь и насколько легче это будет делать для моих клиентов.

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

Если кто-нибудь может предоставить код для файла functions.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');

У меня есть код для удаления элементов, но он глобально и не зависит от уровня доступа пользователя

Norcross
источник
Это отлично, спасибо! Теперь мне просто нужно найти способ перемещения элемента подменю (например, меню) в качестве кнопки главного меню. Есть идеи по этому поводу?
Адам
Не проверял, но посмотрите, перемещает ли его вверх в файл nav-menus.php.
Норкросс
К сожалению нет. Это была та часть, которая беспокоила меня. Я просто хочу, чтобы меню и виджеты были их собственными кнопками, чтобы клиентам было проще. Спасибо за то, что пытаетесь
Адам
@Norcross Это здорово, но можно ли адаптировать его так, чтобы оно включало текстовый домен для целей перевода?
Фил Хили
@PhillHealey эта функция вообще не содержит никаких данных для маркировки, а только сам порядок.
Норкросс
8

Чтобы переименовать тип сообщения по умолчанию (или любой другой в этом отношении), просто используйте фильтр 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()

например переименовать изменить сообщения в статьи

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

Bainternet
источник
3

Я согласен .. functions.phpФайл дает большую гибкость. Мне нужна была та же функциональность, которую вы описали с помощью комбинации functions.phpфильтров и этого плагина .

Из того, что я могу сказать ... этот плагин решит обе ваши проблемы, и он хорошо работает в ситуациях установки нескольких сайтов. Надеюсь, это поможет.

Росс
источник
Упс ... стреляйте, извините, только что увидели, что не хотите использовать плагин. Определенно есть способы перевести названия вкладок и мест размещения только с помощью 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' );
nimmolo
источник
Почему вы не предложили изменить другой ответ?
Fuxia
ну, я пока не могу комментировать ... также я подумал, что вырезка и вставка могут быть полезны в случае, если Норкросс захочет его отредактировать.
nimmolo