Modification des étiquettes de menus de l'administrateur

41

J'ai passé la dernière journée à utiliser le fichier functions.php pour personnaliser entièrement WordPress pour mes sites clients. Je suis émerveillé par tout ce que j’ai pu accomplir et combien cela facilitera les choses pour mes clients.

J'ai supprimé certains éléments de menu pour les utilisateurs qui ne sont pas connectés en tant qu'administrateur. Ce que j'espère (et d'après ce que j'ai lu, je sais que cela peut être fait) est de trouver un moyen de renommer certains éléments du menu (encadré de gauche dans la zone d'administration). Par exemple, changez les articles en articles.

Si quelqu'un peut fournir le code du fichier functions.php ou m'indiquer la direction, je l'apprécierais beaucoup!

    
posée Adam 12.02.2011 - 20:32

5 réponses

65

Voici le processus pour changer les libellés (j'ai remplacé les posts par "contacts" dans mon exemple)

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

Pour modifier l'ordre du menu, procédez comme suit:

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

J'ai du code pour supprimer des éléments, mais il est global et non basé sur le niveau d'accès de l'utilisateur

    
réponse donnée Norcross 13.02.2011 - 00:59
4

Pour renommer le type de publication par défaut (ou tout autre type), utilisez simplement le filtre post_type_labels_{$post_type} . Pour post par défaut, il s'agira de post_type_labels_post . Dans le code ci-dessous se trouve la liste complète des étiquettes ( WP 4.7.1 ). Vous n'êtes pas obligé de tout changer.

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

Si vous souhaitez une prise en charge de l'internationalisation, utilisez simplement __( $text, $textdomain ) comme:

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

J'ai trouvé le filtre dans la fonction: get_post_type_labels() à partir d'un fichier 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 );
    
réponse donnée Ivan 19.02.2017 - 01:20
3

Vous voudrez peut-être consulter cette question

et la classe mentionnée dans gist

qui contient les fonctions que vous recherchez

rename_admin_menu_section()

pour renommer, par exemple, modifier les publications en articles

et vous pouvez supprimer le menu des apparences et créer votre nouvel élément de menu de la page d'accueil pour

    
réponse donnée Bainternet 12.02.2011 - 23:25
3

Je suis d'accord. Le fichier functions.php donne beaucoup de flexibilité. J'ai eu besoin de certaines des fonctionnalités que vous avez décrites, combinant functions.php filtres et ce plugin .

D'après ce que je peux dire, ce plug-in résoudrait vos deux problèmes et fonctionnera également dans les situations d'installation sur plusieurs sites. J'espère que ça aide.

    
réponse donnée Ross 12.02.2011 - 21:09
0

L'exemple ci-dessus de Norcross est exact, mais j'avais besoin de la possibilité d'internationalisation. Si j'avais la réputation, ce serait un commentaire dans la réponse de Norcross, mais comme ce n'est pas le cas, je vais simplement mettre le code modifié ici. 'i18n_context' est un espace de noms arbitraire pour le contexte de traduction. Il peut s'agir par exemple du nom de votre plugin ou de votre thème.

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' );
    
réponse donnée nimmolo 04.02.2016 - 09:11

Lire d'autres questions sur les étiquettes