การเปลี่ยนป้ายเมนูผู้ดูแลระบบ


44

ฉันใช้เวลาทั้งวันในการใช้ไฟล์ functions.php เพื่อปรับแต่ง WordPress สำหรับเว็บไซต์ลูกค้าของฉัน ฉันประหลาดใจที่ฉันสามารถทำสำเร็จได้มากเพียงใดและจะทำให้สิ่งต่างๆให้ลูกค้าของฉันง่ายขึ้นได้อย่างไร

ฉันได้ลบรายการเมนูบางรายการสำหรับผู้ใช้ที่ไม่ได้เข้าสู่ระบบในฐานะผู้ดูแลระบบ สิ่งที่ฉันหวัง (และจากสิ่งที่ฉันได้อ่านรู้ว่ามันสามารถทำได้) คือการหาวิธีที่จะเปลี่ยนชื่อบางรายการเมนู (แถบด้านข้างซ้ายในพื้นที่ผู้ดูแลระบบ) ตัวอย่างเช่นเปลี่ยนกระทู้เป็นบทความ

หากใครสามารถจัดหารหัสสำหรับไฟล์ functions.php หรือชี้ฉันไปในทิศทางที่ฉันจะขอบคุณมันมาก!


บางทีคุณควรแบ่งคำถามนี้ออกเป็นสองคำถาม: "การเปลี่ยนชื่อรายการเมนูผู้ดูแลระบบ"และ"การเปลี่ยนลำดับของรายการเมนูผู้ดูแลระบบ"หรือไม่ วิธีนี้จะช่วยให้คุณได้รับมุมมองเพิ่มเติมสำหรับคำถามของคุณ
Jan Fabry

คำตอบ:


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-menu.php' ลงในอาร์เรย์จะเลื่อนขึ้นหรือไม่
Norcross

น่าเสียดายที่ไม่มี นี่เป็นส่วนหนึ่งที่หลอกฉัน ฉันแค่อยากจะมีเมนูและวิดเจ็ตเป็นปุ่มของตัวเองดังนั้นมันจึงง่ายสำหรับลูกค้า ขอบคุณสำหรับการพยายาม
Adam

@Norcross นี่ยอดเยี่ยม แต่เป็นไปได้หรือไม่ที่จะปรับเปลี่ยนเพื่อให้สามารถรวมโดเมนข้อความเพื่อการแปลได้
Phill Healey

@PhillHealey ฟังก์ชั่นนี้ไม่มีข้อมูลใด ๆ สำหรับการติดฉลากเลยเพียงแค่สั่งซื้อเอง
Norcross

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
คำตอบของ Norcross อาจเป็นคำตอบที่ดีที่สุดในขณะที่เขียน แต่นี่เป็นวิธีที่สะอาดกว่าที่ใช้ตัวกรองดั้งเดิมเพื่อให้ได้ผลลัพธ์เดียวกัน
Ryan

2
เมื่อเขียนต้นฉบับแล้วฉันเห็นด้วยตัวกรองนี้จะดีกว่ามาก
Norcross

3

คุณอาจต้องการดูคำถามนี้

และชั้นเรียนที่พวกเขาพูดถึงนั่นคือส่วนสำคัญ

ซึ่งมีฟังก์ชั่นที่คุณกำลังมองหา

rename_admin_menu_section()

เพื่อเปลี่ยนชื่อเช่นเปลี่ยนกระทู้เป็นบทความ

และคุณสามารถลบเมนูที่ปรากฏและสร้างรายการเมนูหน้าบนสุดใหม่ให้กับคุณ


3

ฉันเห็นด้วย .. functions.phpไฟล์มีความยืดหยุ่นมาก ฉันต้องการฟังก์ชั่นเดียวกับที่คุณอธิบายด้วยfunctions.phpตัวกรองและปลั๊กอินนี้

จากสิ่งที่ฉันบอกได้ .. ปลั๊กอินนี้จะทำให้ทั้งสองประเด็นของคุณประสบความสำเร็จและทำงานได้ดีในสถานการณ์การติดตั้งแบบหลายไซต์เช่นกัน หวังว่าจะช่วย


อุ๊ปส์ ... ยิงขอโทษเพิ่งเห็นว่าไม่อยากใช้ปลั๊กอิน มีวิธีที่แน่นอนในการแปลชื่อแท็บและตำแหน่งโดยใช้ Function.php สำหรับฉันหลังจากมุ่งหน้าลงเส้นทางนี้ (พยายามเป็นปลั๊กอินฟรีสำหรับสิ่งนี้) ฉันตัดสินใจว่าการเข้ารหัสพิเศษไม่คุ้มค่า ... เนื่องจากวิธีการที่ปลั๊กอินใช้งานง่าย ขออภัยฉันพลาดเกณฑ์ดังกล่าวมาก่อน
Ross

ไม่มีปัญหารอสส์ฉันจะไปดูมันต่อไป ขอบคุณ
อดัม

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.