更改管理员菜单标签


44

最后一天,我使用functions.php文件为我的客户站点完全自定义了WordPress。我为自己能完成的工作量以及为客户带来的便利程度感到惊讶。

我已为未以管理员身份登录的用户删除了某些菜单项。我希望(从我读过的书中知道可以做到)是找到一种方法来重命名某些菜单项(管理区域的左侧边栏)。例如,将文章更改为文章。

如果有人可以提供functions.php文件的代码或向我指出方向,我将不胜感激!


也许您应该将其分为两个不同的问题:“重命名管理菜单项”“更改管理菜单项的顺序”?这将帮助您获得有关问题的更多视图。
Jan Fabry

Answers:


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这很好,但是是否可以对其进行修改,使其可以包含文本域以进行翻译?
Phill Healey 2014年

@PhillHealey此函数根本不包含任何用于标记的数据,而仅包含订单本身。
2014年

8

要重命名默认帖子类型(或其他任何类型),只需使用filter即可post_type_labels_{$post_type}。默认情况下postpost_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
Norcross的答案在撰写本文时可能是最好的,但这是一种使用本地过滤器完成相同结果的更简洁的方法。
瑞安

2
写完原件后,我同意这个过滤器会更好。
诺克罗斯

3

您可能想看看这个问题

和他们在要点上提到的课程

其中包含您正在寻找的功能

rename_admin_menu_section()

重命名,例如将文章更改为文章

您可以删除外观菜单并为您创建新的首页菜单项


3

我同意。该functions.php文件具有很大的灵活性。我需要一些与functions.php过滤器和此插件结合使用的功能。

据我所知..这个插件可以解决您的两个问题,并且在Multi-Site安装情况下也能很好地工作。希望能有所帮助。


糟糕...抱歉,只是看到了一些关于不想使用插件的信息。绝对有一些方法可以仅通过Functions.php转换选项卡名称和位置。对我来说,在走了这条路之后(试图做到无插件),我认为额外的编码是不值得的……因为该插件使用起来非常容易。对不起,我以前错过了这个标准。
罗斯,

没问题,罗斯,我还是要研究一下。谢谢
亚当

0

诺克罗斯(Norcross)上面的示例是正确的,但是我需要国际化的可能性。如果我有声誉,这将是Norcross的回答下的评论,但由于我没有,因此我将修改后的代码放在此处。“ 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' );

您为什么不建议对其他答案进行编辑?
fuxia

好吧,我还不能发表评论...我还认为,在Norcross确实想要对其进行编辑的情况下,剪切和粘贴可能很有用。
nimmolo
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.