Yönetici Menüsü Etiketlerini Değiştirme


44

Son günümü, WordPress'i istemci sitelerim için tamamen özelleştirmek için functions.php dosyasını kullanarak geçirdim. Ne kadar başarabildiğime ve müşterilerim için işleri ne kadar kolaylaştıracağına şaşırdım.

Yönetici olarak giriş yapmayan kullanıcılar için bazı menü öğelerini kaldırdım. Umduğum şey (ve okuduklarımdan ne yapılabileceğini biliyorum), bazı menü öğelerini yeniden adlandırmanın bir yolunu bulmaktır (yönetici alanında sol kenar çubuğu). Mesela Değişim Makaleler için Mesajlar.

Eğer herhangi bir fonksiyon.php dosyasının kodunu belirtebilir veya beni yönünde işaret edebilirse çok sevinirim!


Belki de bunu iki farklı soruya bölmelisiniz : "Yönetici menüsü öğelerini yeniden adlandırma" ve "Yönetici menüsü öğelerinin sırasını değiştirme" ? Bu, sorunuzla ilgili daha fazla görüş almanıza yardımcı olacaktır.
Jan Fabry

Yanıtlar:


66

Etiketleri değiştirme süreci aşağıdadır (Gönderileri örneğimde "kişiler" olarak değiştirdim)

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

Menü sırasını değiştirmek için bununla gidin:

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

Öğeleri kaldırmak için kodum var, ancak genel olarak ve kullanıcı erişim düzeyine bağlı değil


Bu mükemmel, teşekkürler! Şimdi ana menü butonu olarak bir alt menü öğesini (örn. Menüler) hareket ettirmenin bir yolunu bulmaya ihtiyacım var. Bunun hakkında bir fikrin var mı?
Adam,

Test edilmedi, ancak diziye 'nav-menus.php' eklenmesinin onu yukarı taşıdığını kontrol edin.
Norcross

Ne yazık ki hayır. Bu beni rahatsız eden kısımdı. Sadece menülerin ve widget'ların kendi düğmeleri olmasını sağlamak istiyorum, böylece müşteriler için kolaylaşıyor. Denediğiniz için teşekkür ederim
Adam

@Norcross Bu harika, ancak çeviri amacıyla metin alanını içerebilecek şekilde uyarlamak mümkün mü?
Phill Healey

@PhillHealey bu fonksiyon etiketleme için veri içermez, sadece siparişin kendisidir.
Norcross

8

Varsayılan gönderi türünü (veya bu konuda başka herhangi bir şeyi) yeniden adlandırmak için sadece filtreyi kullanın post_type_labels_{$post_type}. Varsayılan postolarak olacak post_type_labels_post. Aşağıdaki kodda etiketlerin tam listesi ( WP 4.7.1). Her şeyi değiştirmek zorunda değilsin.

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

Uluslararasılaştırma desteği istiyorsanız, sadece şunu kullanın __( $text, $textdomain ):

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

Filtreyi işlevinde buldum: get_post_type_labels()bir dosyadan 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'un cevabı yazıldığı tarihte en iyisi olmuş olabilir, ancak bu aynı sonucu elde etmek için doğal bir filtre kullanan çok daha temiz bir yaklaşım.
Ryan,

2
Orijinali yazdıktan sonra, bu filtrenin çok daha iyi olduğuna katılıyorum.
Norcross

3

Bu soruya bakmak isteyebilirsiniz

ve orada söyledikleri sınıf özünde

aradığınız işlevleri içeren

rename_admin_menu_section()

Örnek değişikliği yeniden adlandırmak için Makaleler için Gönderiler

ve görünüm menüsünü kaldırabilir ve size yeni üst sayfa menü öğesi oluşturabilirsiniz.


3

Katılıyorum .. functions.phpDosya çok fazla esneklik veriyor. Bir functions.phpfiltre ve bu eklenti kombinasyonu ile tanımladığınız aynı fonksiyonelliklere ihtiyacım vardı .

Söyleyebileceğim kadarıyla ... bu eklenti her iki sorununuzu da yerine getirecek ve Çok Siteli kurulum durumlarında da iyi çalışacaktır. Umarım yardımcı olur.


Maalesef ... ateş et, özür dilerim, biraz eklenti kullanmak istemediğine bakın. Sekme adlarını ve yerleşimlerini sadece Functions.php ile çevirmeye devam etmenin kesinlikle bir yolu vardır. Benim için, bu yoldan aşağıya indikten sonra (bunun için eklenti kullanmaya çalışıyorum), bu eklentinin kullanımının ne kadar kolay olduğu göz önüne alındığında, ekstra kodlamanın buna değmeyeceğine karar verdim. Üzgünüm, bu kriterleri daha önce kaçırdım.
Ross,

Sorun değil Ross, ben yine de içine bakacağım. Teşekkürler
Adam

0

Norcross'un yukarıdaki örneği tam açık, ancak uluslararasılaşma olasılığına ihtiyacım vardı. Şöhretim olsaydı, Norcross'un cevabı altında bu bir yorum olurdu, fakat yapmadığım için sadece değiştirilen kodu buraya koyacağım. 'i18n_context', çeviri bağlamı için isteğe bağlı bir ad alanıdır, bu örneğin eklentinizin veya temanızın adı olabilir.

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

Neden diğer cevaba bir düzenleme önermediniz?
fuxia

Henüz yorum yapamam ... ayrıca Norcross'un düzenlemek istediği durumda bir kes ve yapıştır uygulamasının faydalı olabileceğini düşündüm.
nimmolo
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.