Thay đổi nhãn Menu Admin


44

Tôi đã dành ngày cuối cùng bằng cách sử dụng tệp tin.php để tùy chỉnh hoàn toàn WordPress cho các trang web khách hàng của mình. Tôi ngạc nhiên về việc tôi đã có thể hoàn thành được bao nhiêu và mọi thứ sẽ dễ dàng hơn cho khách hàng của tôi.

Tôi đã xóa một số mục menu nhất định cho người dùng chưa đăng nhập với tư cách quản trị viên. Điều tôi đang hy vọng (và từ những gì tôi đã đọc biết có thể thực hiện được) là tìm cách đổi tên một số mục trong menu (thanh bên trái trong khu vực quản trị). Ví dụ thay đổi bài viết thành bài viết.

Nếu bất cứ ai có thể cung cấp mã cho tệp tin.php. Chỉ hướng cho tôi, tôi sẽ đánh giá rất cao nó!


Có lẽ bạn nên chia câu hỏi này thành hai câu hỏi khác nhau: "Đổi tên các mục menu của quản trị viên""Thay đổi thứ tự của các mục menu quản trị viên" ? Điều này sẽ giúp bạn có được nhiều lượt xem hơn cho câu hỏi của bạn.
Jan Fabry

Câu trả lời:


66

Đây là quá trình thay đổi nhãn (tôi đã thay đổi bài đăng thành "danh bạ" trong ví dụ của mình)

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

Để thay đổi thứ tự menu, đi với điều này:

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

Tôi đã có mã để xóa các mục, nhưng nó trên toàn cầu và không dựa trên cấp độ truy cập của người dùng


Điều này là tuyệt vời cảm ơn! Bây giờ tôi chỉ cần tìm cách di chuyển một mục menu phụ (ví dụ: Menu) làm nút menu chính. Bất cứ ý tưởng về điều đó?
Adam

Chưa được thử nghiệm, nhưng hãy xem nếu thêm 'nav-menu.php' vào mảng sẽ di chuyển nó lên.
Norcross

Tiếc là không có. Đây là một phần đã làm tôi khó chịu. Tôi chỉ muốn có thể có các menu và widget là các nút riêng của họ để khách hàng dễ dàng hơn. Cảm ơn bạn mặc dù đã cố gắng
Adam

@Norcross Điều này thật tuyệt, nhưng có thể điều chỉnh nó để nó có thể bao gồm miền văn bản cho mục đích dịch thuật không?
Phill Healey

@PhillHealey chức năng này hoàn toàn không chứa bất kỳ dữ liệu nào để ghi nhãn, thay vào đó, chỉ là thứ tự.
Norcross

8

Để đổi tên loại bài đăng mặc định (hoặc bất kỳ loại nào khác cho vấn đề đó) chỉ cần sử dụng bộ lọc post_type_labels_{$post_type}. Để mặc định postnó sẽ được post_type_labels_post. Trong mã dưới đây là danh sách đầy đủ của nhãn ( WP 4.7.1). Bạn không phải thay đổi mọi thứ.

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

Nếu bạn muốn hỗ trợ quốc tế hóa, chỉ cần sử dụng __( $text, $textdomain )như:

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

Tôi tìm thấy bộ lọc trong chức năng: get_post_type_labels()từ một tập tin 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
Câu trả lời của Norcross có thể là tốt nhất tại thời điểm nó được viết, nhưng đây là một cách tiếp cận sạch hơn sử dụng bộ lọc riêng để thực hiện kết quả tương tự.
Ryan

2
Đã viết bản gốc, tôi đồng ý bộ lọc này tốt hơn nhiều.
Norcross

3

Bạn có thể muốn xem xét câu hỏi này

và lớp học họ đề cập ở đó trên ý chính

chứa các chức năng mà bạn đang tìm kiếm

rename_admin_menu_section()

đổi tên ví dụ thay đổi bài viết thành bài viết

và bạn có thể xóa menu xuất hiện và tạo cho bạn mục menu trên cùng mới cho


3

Tôi đồng ý .. Các functions.phptập tin cho rất nhiều tính linh hoạt. Tôi đã cần một số chức năng tương tự mà bạn đã mô tả với sự kết hợp của các functions.phpbộ lọc và plugin này .

Từ những gì tôi có thể nói .. plugin này sẽ giải quyết cả hai vấn đề của bạn và nó cũng hoạt động tốt trong các tình huống cài đặt Multi-Site. Mong rằng sẽ giúp.


Ooops ... bắn, xin lỗi, chỉ thấy một chút về việc không muốn sử dụng một plugin. Chắc chắn có nhiều cách để dịch các tên và vị trí của tab chỉ với Hàm.php. Đối với tôi, sau khi đi xuống con đường này (cố gắng không có plugin cho việc này) tôi đã quyết định rằng mã hóa bổ sung không đáng giá ... cho rằng plugin đó dễ sử dụng như thế nào. Xin lỗi tôi đã bỏ lỡ tiêu chí đó trước đây.
Ross

Không có vấn đề gì với Ross, dù sao tôi cũng sẽ xem xét nó. Cảm ơn
Adam

0

Ví dụ của Norcross ở trên là đúng, nhưng tôi cần khả năng quốc tế hóa. Nếu tôi có tiếng tăm, đây sẽ là một bình luận dưới câu trả lời của Norcross, nhưng vì tôi không có, tôi sẽ chỉ đặt mã sửa đổi ở đây. 'i18n_context' là một không gian tên tùy ý cho bối cảnh dịch thuật, đây có thể là tên của plugin hoặc chủ đề của bạn chẳng hạn.

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

Tại sao bạn không đề xuất chỉnh sửa cho câu trả lời khác?
fuxia

tôi cũng không thể bình luận ... tôi cũng nghĩ rằng việc cắt và dán có thể hữu ích trong trường hợp Norcross không muốn chỉnh sửa nó.
nimmolo
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.