Alterando os rótulos do menu Admin

44

Passei o último dia usando o arquivo functions.php para personalizar totalmente o WordPress para meus sites clientes. Estou impressionado com o quanto consegui realizar e com o quanto mais fácil isso tornará as coisas para meus clientes.

Eu removi certos itens de menu para usuários que não estão conectados como administrador. O que espero (e pelo que li, sei que pode ser feito) é encontrar uma maneira de renomear alguns dos itens de menu (barra lateral esquerda na área de administração). Por exemplo, altere Postagens para Artigos.

Se alguém puder fornecer o código para o arquivo functions.php ou me indicar a direção, eu apreciaria muito!

Adão
fonte
Talvez você deva dividir isso em duas perguntas diferentes: "Renomeando itens de menu do administrador" e "Alterando a ordem dos itens do menu de administrador" ? Isso ajudará você a obter mais visualizações para sua pergunta.
Jan Fabry

Respostas:

66

Aqui está o processo para alterar os marcadores (mudei as postagens para "contatos" no meu exemplo)

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

Para alterar a ordem dos menus, siga este procedimento:

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

Eu tenho um código para remover itens, mas é global e não é baseado no nível de acesso do usuário

Norcross
fonte
Isso é excelente, obrigado! Agora, só preciso encontrar uma maneira de mover um item do submenu (por exemplo, Menus) como um botão do menu principal. Alguma ideia disso?
Adam
Ainda não testei, mas veja se adicionar 'nav-menus.php' à matriz move-a para cima.
Norcross
Infelizmente não. Esta foi a única parte que me incomodou. Eu só quero que os menus e widgets sejam seus próprios botões, para que seja mais fácil para os clientes. Obrigado embora para tentar
Adam
@ Norcross Isso é ótimo, mas é possível adaptá-lo para que ele possa incluir o domínio de texto para fins de tradução?
precisa
@PhillHealey, esta função não contém nenhum dado para rotular, apenas a própria ordem.
Norcross
8

Para renomear o tipo de postagem padrão (ou qualquer outro), use o filtro post_type_labels_{$post_type}. Por padrão post, será post_type_labels_post. No código abaixo está a lista completa de rótulos ( WP 4.7.1). Você não precisa mudar tudo.

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

Se você deseja suporte à internacionalização, use __( $text, $textdomain )como:

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

Eu encontrei o filtro na função: get_post_type_labels()de um arquivo 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
fonte
2
A resposta de Norcross pode ter sido a melhor no momento em que foi escrita, mas essa é uma abordagem muito mais limpa que usa um filtro nativo para obter o mesmo resultado.
21718 Ryan
2
Depois de escrever o original, concordo que este filtro é muito melhor.
Norcross
3

Você pode querer olhar para esta pergunta

e a classe que eles mencionam lá no essencial

que possui funções que você procura

rename_admin_menu_section()

renomear, por exemplo, alterar postagens para artigos

e você pode remover o menu de aparências e criar o novo item de menu da página superior para

Bainternet
fonte
3

Eu concordo .. O functions.phparquivo oferece muita flexibilidade. Eu precisei de algumas das mesmas funcionalidades que você descreveu com uma combinação de functions.phpfiltros e este plugin .

Pelo que sei, esse plug-in realizaria os dois problemas e também funcionaria bem em situações de instalação em vários sites. Espero que ajude.

Ross
fonte
Opa ... dispara, desculpe, acabei de ver um pouco sobre não querer usar um plugin. Definitivamente, existem maneiras de traduzir os nomes das guias e os canais apenas com o arquivo Functions.php. Para mim, depois de seguir este caminho (tentando não usar plug-ins para isso), decidi que a codificação extra simplesmente não valia a pena ... dada a facilidade de uso do plug-in. Desculpe, eu perdi esse critério antes.
1211 Ross
Não tem problema, Ross, vou analisar de qualquer maneira. Obrigado
Adam
0

O exemplo de Norcross acima está certo, mas eu precisava da possibilidade de internacionalização. Se eu tivesse reputação, isso seria um comentário sob a resposta de Norcross, mas como não tenho, colocarei aqui o código modificado. 'i18n_context' é um espaço de nome arbitrário para o contexto de tradução; pode ser o nome do seu plug-in ou tema, por exemplo.

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' );
nimmolo
fonte
Por que você não sugeriu uma edição para a outra resposta?
fuxia
bem, ainda não posso comentar ... também achei que um recortar e colar poderia ser útil no caso da Norcross querer editá-lo.
Nevenolo