Mengubah Label Menu Admin

44

Saya telah menghabiskan hari terakhir menggunakan file functions.php untuk sepenuhnya menyesuaikan WordPress untuk situs klien saya. Saya kagum pada seberapa banyak yang telah saya capai dan betapa lebih mudahnya hal itu bagi klien saya.

Saya telah menghapus item menu tertentu untuk pengguna yang tidak masuk sebagai admin. Apa yang saya harapkan (dan dari apa yang telah saya baca, bisa dilakukan) adalah menemukan cara untuk mengubah nama beberapa item menu (bilah sisi kiri di area admin). Misalnya mengubah Posting ke Artikel.

Kalau ada yang bisa menyediakan kode untuk file functions.php atau arahkan saya ke arah saya akan sangat menghargainya!

Adam
sumber
Mungkin Anda harus membaginya menjadi dua pertanyaan berbeda: "Mengganti nama item menu admin" dan "Mengubah urutan item menu admin" ? Ini akan membantu Anda mendapatkan lebih banyak tampilan untuk pertanyaan Anda.
Jan Fabry

Jawaban:

66

Inilah proses untuk mengubah label (Saya mengubah posting menjadi "kontak" dalam contoh saya)

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

Untuk mengubah urutan menu, lanjutkan dengan ini:

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

Saya punya kode untuk menghapus item, tetapi ini bersifat global dan tidak berdasarkan pada tingkat akses pengguna

Norcross
sumber
Ini sangat bagus, terima kasih! Sekarang saya hanya perlu menemukan cara untuk memindahkan item sub menu (mis. Menu) sebagai tombol menu utama. Ada ide tentang itu?
Adam
Belum diuji, tetapi lihat apakah menambahkan 'nav-menus.php' ke array akan memindahkannya.
Norcross
Sayangnya tidak ada. Ini adalah satu bagian yang menggangguku. Saya hanya ingin dapat memiliki menu dan widget menjadi tombol mereka sendiri sehingga lebih mudah bagi klien. Terima kasih telah mencoba
Adam
@Norcross Ini hebat, tetapi apakah mungkin untuk mengadaptasinya sehingga dapat memasukkan teks-domain untuk keperluan terjemahan?
Phill Healey
@PhillHealey fungsi ini tidak mengandung data apa pun untuk pelabelan, melainkan hanya urutan itu sendiri.
Norcross
8

Untuk mengganti nama jenis posting default (atau yang lainnya dalam hal ini) cukup gunakan filter post_type_labels_{$post_type}. Untuk standarnya postadalah post_type_labels_post. Dalam kode di bawah ini adalah daftar lengkap label ( WP 4.7.1). Anda tidak harus mengubah segalanya.

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

Jika Anda ingin dukungan internasionalisasi, gunakan saja __( $text, $textdomain )seperti:

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

Saya menemukan fungsi filter: get_post_type_labels()dari file 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 );
Ivan
sumber
2
Jawaban Norcross mungkin yang terbaik pada saat itu ditulis, tetapi ini adalah pendekatan yang jauh lebih bersih yang menggunakan filter asli untuk mencapai hasil yang sama.
Ryan
2
Setelah menulis yang asli, saya setuju filter ini jauh lebih baik.
Norcross
3

Anda mungkin ingin melihat pertanyaan ini

dan kelas yang mereka sebutkan di sana tentang intisari

yang menyimpan fungsi yang Anda cari

rename_admin_menu_section()

untuk mengubah nama misalnya mengubah Posting ke Artikel

dan Anda dapat menghapus menu tampilan dan membuat item menu halaman atas baru untuk Anda

Bainternet
sumber
3

Saya setuju .. functions.phpFile ini memberikan banyak fleksibilitas. Saya membutuhkan beberapa fungsi yang sama dengan yang Anda gambarkan dengan kombinasi functions.phpfilter dan plugin ini .

Dari apa yang saya tahu .. plugin ini akan menyelesaikan kedua masalah Anda dan bekerja dengan baik di situasi instalasi Multi-Situs juga. Semoga itu bisa membantu.

Ross
sumber
Ooops ... tembak, maaf, hanya melihat sedikit tentang tidak ingin menggunakan plugin. Pasti ada cara untuk menerjemahkan nama tab dan penempatan hanya dengan Functions.php. Bagi saya, setelah menuju jalan ini (mencoba menjadi plugin gratis untuk ini) saya memutuskan bahwa pengkodean tambahan tidak layak ... mengingat betapa mudahnya plugin itu digunakan. Maaf saya melewatkan kriteria itu sebelumnya.
Ross
Tidak masalah Ross, aku akan memeriksanya. Terima kasih
Adam
0

Contoh Norcross di atas tepat, tetapi saya membutuhkan kemungkinan internasionalisasi. Jika saya memiliki reputasi, ini akan menjadi komentar di bawah jawaban Norcross, tetapi karena saya tidak melakukannya, saya hanya akan meletakkan kode yang dimodifikasi di sini. 'i18n_context' adalah namespace yang berubah-ubah untuk konteks terjemahan, ini bisa berupa nama plugin atau tema Anda misalnya.

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' );
nimolo
sumber
Mengapa Anda tidak menyarankan suntingan ke jawaban lain?
fuxia
baik saya belum bisa berkomentar ... juga saya pikir cut and paste bisa berguna jika Norcross ingin mengeditnya.
nimmolo