web-dev-qa-db-fra.com

Changer les étiquettes du menu Admin

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é de voir à quel point j'ai pu accomplir et à quel point 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!

42
Adam

Voici le processus pour changer les étiquettes (j'ai changé les messages en "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 changer l'ordre du menu, allez avec ceci:

// 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

66
Norcross

Pour renommer le type de publication par défaut (ou toute autre question), utilisez simplement le filtre post_type_labels_{$post_type}. Pour post par défaut, ce sera 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 );
7
Ivan

Vous voudrez peut-être regarder cette question

et la classe mentionnée ici/ Gist

qui détient des fonctions que vous recherchez

rename_admin_menu_section()

renommer par exemple modifier Posts en Articles

et vous pouvez supprimer le menu des apparences et vous créer un nouvel élément de menu de page supérieure pour

3
Bainternet

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 avec une combinaison de filtres functions.php et ce plugin .

À ce que je sache, ce plugin résoudrait vos problèmes et fonctionnera également dans les situations d’installation multisite. J'espère que cela pourra aider.

3
Ross

L'exemple ci-dessus de Norcross est juste, 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 du nom de votre plugin ou de votre thème par exemple.

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