관리 메뉴 레이블 변경


44

나는 마지막 날에 클라이언트 사이트에 맞게 WordPress를 완전히 사용자 정의하기 위해 functions.php 파일을 사용했습니다. 나는 내가 성취 할 수 있었던 일과 그것이 내 고객을 위해 일을 얼마나 쉽게 할 수 있는지에 놀랐다.

관리자로 로그인하지 않은 사용자의 특정 메뉴 항목을 제거했습니다. 내가 바라는 것은 (그리고 내가 읽은 것에서 수행 할 수 있음을 알고있는 것) 일부 메뉴 항목의 이름을 바꿀 수있는 방법을 찾는 것입니다 (관리자 영역의 왼쪽 사이드 바). 예를 들어 게시물을 기사로 변경하십시오.

누구나 functions.php 파일의 코드를 제공하거나 방향을 알려 주시면 대단히 감사하겠습니다!


어쩌면 당신은 두 가지 질문에이를 분할한다 : "관리자 메뉴 항목 이름 변경""관리자 메뉴 항목의 순서를 변경" ? 이렇게하면 질문에 대한 더 많은 견해를 얻을 수 있습니다.
Jan Fabry 2019

답변:


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

항목을 제거하는 코드가 있지만 전 세계적으로 사용자 액세스 수준을 기반으로하지 않습니다.


감사합니다! 이제 하위 메뉴 항목 (예 : 메뉴)을 기본 메뉴 버튼으로 이동하는 방법을 찾아야합니다. 그것에 대한 아이디어가 있습니까?
Adam

테스트하지는 않았지만 'nav-menus.php'를 배열에 추가하면 위로 이동하는지 확인하십시오.
Norcross

불행하게도. 이것은 나를 괴롭힌 한 부분이었습니다. 메뉴와 위젯을 자체 버튼으로 사용하여 클라이언트가 쉽게 사용할 수 있기를 원합니다. 시도해 주셔서 감사합니다
Adam

@Norcross 이것은 훌륭하지만 번역 목적으로 텍스트 도메인을 포함 할 수 있도록 조정할 수 있습니까?
필 힐리

@PhillHealey이 함수에는 레이블링에 대한 데이터가 전혀 없으며 주문 자체 만 포함됩니다.
Norcross

8

기본 게시물 유형 (또는 그 문제에 대한 다른 게시물)의 이름을 바꾸려면 filter를 사용하십시오 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필터 와이 플러그인 의 조합으로 설명한 것과 동일한 기능이 필요했습니다 .

내가 알 수있는 것에서.이 플러그인은 두 가지 문제를 모두 해결하며 다중 사이트 설치 상황에서도 잘 작동합니다. 희망이 도움이됩니다.


죄송합니다 ... 죄송합니다. 플러그인을 사용하고 싶지 않은 것에 대해 조금 보았습니다. Functions.php만으로 탭 이름과 위치를 번역 할 수있는 방법이 있습니다. 나를 위해,이 길을 향한 후 (이 플러그인을 사용하지 않으려 고 시도) 여분의 코딩은 가치가 없다고 결정했습니다. 전에 그 기준을 놓친 것은 죄송합니다.
Ross

문제 없어요 로스, 어쨌든 살펴 보겠습니다. 감사합니다
Adam

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.