Aujourd’hui je vous propose (enfin) plusieurs choses pour modifier l’administration de WordPress : les entrées dans le menu, les widgets du tableau de bord, votre logo dans le header, un texte personnalisé dans le footer, la page de login, etc. A peu près tout ce que j’ai pu réunir au fil de mes flâneries recherches sur le net.
Je vous prie déjà de m’excuser car je n’ai pas relevé toutes les sources des modifications qui ne sont pas de moi :s
Tous les codes suivants sont à mettre dans le fichier functions.php de votre thème.
Modifier la page de login
On commence par du facile :
Cocher « se souvenir de moi » par défaut
12345
function sf_check_rememberme(){
global $rememberme;
$rememberme = 1;
}
add_action("login_form", "sf_check_rememberme");
Modifier le lien du titre
Par défaut, WordPress propose le titre de la page login sous cette forme :
123
<h1>
<a href="http://wordpress.org/" title="Propulsé par WordPress">Mon Site</a>
</h1>
Voici comment modifier les attributs title et href du lien :
12
add_filter('login_headertitle', create_function(false,"return 'Mon Site';"));
add_filter('login_headerurl', create_function(false,"return 'http://www.mon-site.com';"));
Je trouve ce tweak pas vraiment utile puisque nous disposons déjà d’un lien vers notre site en haut, mais face à un client, il ne comprendra peut-être pas pourquoi ce lien en plein milieu renvoie vers un autre que le sien.
Ajouter une favicon, une icône pour iPhone/iPad/iMachin, placer son logo
Une favicon est une petite icône de 16px x 16px au format .ico qui s’affiche dans l’onglet de notre navigateur ou devant la barre d’adresse :
Pour la créer, je vous conseille le site iConvert que j’utilise depuis longtemps. Il suffit de lui fournir une icône en .png ou .jpg par exemple, et il se charge du reste (sur le site, aller dans les options et choisir « Convert to ico icons (Windows) »).
Avez-vous remarqué que sur son iPhone/iPad/iMachin on peut ajouter un raccourcis vers un site directement sur le springboard? Pour cela il suffit d’aller sur le site en question avec Safari Mobile, cliquer sur le bouton du milieu dans le menu du bas (avec une flèche), puis « Ajouter à l’écran d’accueil ».
En l’absence d’icône prévue par le site, Safari Mobile va faire une capture d’écran du site et en faire une icône. Pour avoir une belle icône à la place, il suffit de prévoir une image et placer une balise dans le head de votre site. Il semble qu’une image en 129px x 129px soit la meilleure dimension pour tenir compte à la fois des appareils non-retina, des appareils retina et de l’iPad. Par habitude je rajoute toujours des coins arrondis mais c’est inutile puisque iOS va se charger de le faire au moment de l’enregistrement du raccourcis.
Si l’on place la favicon et l’icône iOS à la racine du site, et le logo de votre site dans le dossier « images » de votre thème, voilà ce que ça donne :
01020304050607080910111213
function sf_login_head() {
$blog_url = get_bloginfo('url');
echo '<link rel="shortcut icon" href="'.$blog_url.'/favicon.ico" />';
echo '<link rel="apple-touch-icon" href="'.$blog_url.'/apple-touch-icon.png"/>';
echo "
<style type='text/css'>
body.login #login h1 a {
background: transparent url('".get_bloginfo('template_url')."/images/logo-login.png') center top no-repeat;
}
</style>
";
}
add_action("login_head", "sf_login_head");
Vous pouvez également adapter la taille du lien du titre aux dimensions de votre logo bien sûr.
A noter que iOS va rajouter un reflet sur votre icône (comme sur la capture plus haut). Pour avoir une icône « plate » sans ce reflet, il faut remplacer rel="apple-touch-icon"
par rel="apple-touch-icon-precomposed"
.
Administration : favicon, icône pour iPhone/iPad/iMachin, logo et autres fioritures
Comme pour la page de login, nous pouvons ajouter une favicon, une icône pour les iBidules et mettre notre logo. Bien sûr, adaptez la taille du logo à votre image.
Ensuite, je ne sais pas pour vous mais depuis que Firefox est passé à la version 4, l’onglet « Tableau de bord » du menu est passé sur 2 lignes (une histoire de taille de typo?). De même, j’ai 1 ou 2 plugins qui créent un onglet de menu sur 2 lignes car leur titre est trop long (même avant FF4). Donc, nous allons augmenter la largeur du menu de 10px.
123456789
function sf_admin_head() {
$blog_url = get_bloginfo('url');
$templ_url = get_bloginfo('template_url');
echo '<link rel="shortcut icon" href="'.$blog_url.'/favicon.ico" />';
echo '<link rel="apple-touch-icon" href="'.$blog_url.'/apple-touch-icon.png"/>';
echo '<style type="text/css">#header-logo{background-image:url('.$templ_url.'/images/logo-admin.png)!important;width:62px!important;height:36px!important;margin:7px 0 0 185px!important;}'
.'#adminmenu{margin:15px 5px 15px -170px;width:155px;}</style>';
}
add_action('admin_head', 'sf_admin_head');
Modifier le footer
On peut également remplacer la phrase et les liens du footer. Pour ma part, je préfère laisser les crédits pour WordPress et rajouter une petite phrase de remerciements.
1234
function remove_footer_admin () {
echo 'Merci d'avoir fait appel à <a href="http://www.mon-site-perso.fr">moi</a> pour votre site. | <a href="http://www.wordpress-fr.net/">WordPress</a> | <a href="http://codex.wordpress.org/fr:Accueil">Documentation</a> | <a href="http://www.wordpress-fr.net/support/">Forums d'entraide</a>';
}
add_filter('admin_footer_text', 'remove_footer_admin');
Les phrases de crédits ont été modifiées dans WordPress 3.2, je répercute donc cette modification ici.
1234
function remove_footer_admin () {
echo '<span id="footer-thankyou">Merci d'avoir fait appel à <a href="http://www.mon-site-perso.fr">Moi</a> pour votre site, et de faire de <a href="http://www.wordpress-fr.net/">WordPress</a> votre outil de création.</span> • <a href="http://codex.wordpress.org/fr:Accueil">Documentation en français</a> • <a href="'.admin_url('freedoms.php').'">Libertés</a> • <a href="http://www.wordpress-fr.net/support/">Forums d’entraide</a> • <a href="'.admin_url('credits.php').'">Crédits</a>';
}
add_filter('admin_footer_text', 'remove_footer_admin');
Ajouter un widget sur le dashboard
Il y a deux widgets que je rajoute tout le temps, ce sont des pense-bête. L’un d’eux me rappelle les plugins à ne pas mettre à jour si je les ai trop modifiés, ou si je n’ai fait qu’une ou deux légères modifications, il va me rappeler les manips. Celui-ci ne sera visible que par moi, il faudra donc faire une vérification avec current_user_can('update_core')
.
Le second me rappellera à quoi servent précisément les tailles d’images, par exemple la taille medium sert sur telle page pour une galerie de partenaires. Ce widget pourra être visible par toute personne connectée à l’administration.
010203040506070809101112
function no_update_widget() {
echo '<p><b>Contact Form 7 :</b> remettre le ajax-loader.gif à chaque màj</p>';
}
function images_widget() {
echo '<p><b>Images Partenaires :</b> 129x129px.</p>';
}
function sf_dashboard_widgets() {
if ( current_user_can('update_core') )
wp_add_dashboard_widget('custom_help_widget1', 'Modifications et plugins à ne pas mettre à jour', 'no_update_widget');
wp_add_dashboard_widget('custom_help_widget2', 'Images', 'images_widget');
}
add_action('wp_dashboard_setup', 'sf_dashboard_widgets');
La fonction wp_add_dashboard_widget() sur le codex.
Supprimer des widgets du dashboard
Avec ceci vous devriez supprimer tous les widgets par défaut du dashboard.
0102030405060708091011
function disable_default_dashboard_widgets() {
remove_meta_box('dashboard_right_now', 'dashboard', 'core');
remove_meta_box('dashboard_recent_comments', 'dashboard', 'core');
remove_meta_box('dashboard_incoming_links', 'dashboard', 'core');
remove_meta_box('dashboard_plugins', 'dashboard', 'core');
remove_meta_box('dashboard_quick_press', 'dashboard', 'core');
remove_meta_box('dashboard_recent_drafts', 'dashboard', 'core');
remove_meta_box('dashboard_primary', 'dashboard', 'core'); // Autres news WordPress
remove_meta_box('dashboard_secondary', 'dashboard', 'core'); // News WordPress
}
add_action('admin_menu', 'disable_default_dashboard_widgets');
A noter que cela supprime aussi les cases à cocher dans le panneau « Options à l’écran » en haut de page.
Nous pouvons aussi supprimer des widgets installés par les plugins. Nous pouvons également désactiver tous ces widgets en fonction des personnes :
010203040506070809101112
if (!current_user_can('manage_options')) {
remove_meta_box('id-du-widget', 'dashboard', 'normal');
}</pre>
Là nous avons désactivé un widget pour les non-administrateurs.
Concernant les widgets de plugins, il nous faut trouver son "id". Pour cela, une petite fonction très pratique :
<pre lang="php" line="1">function list_active_dashboard_widgets() {
global $wp_meta_boxes;
foreach (array_keys($wp_meta_boxes['dashboard']['normal']['core']) as $name) {
echo '<div>' . $name . '</div>';
}
}
add_action('wp_dashboard_setup', 'list_active_dashboard_widgets');
Ceci listera dans un coin les widgets actifs. Fonction à supprimer une fois terminé.
Source [en].
Ajouter vos custom post types dans le module « Aujourd’hui »
Imaginons que vous ayez crée un type de post « portfolio », vous pouvez le rajouter dans le module « Aujourd’hui » du dashboard.
010203040506070809101112131415161718192021222324
function portfolio_in_today() {
$types = 'portfolio';
if (!post_type_exists(''.$types.'')) { return; }
$num_posts = wp_count_posts( ''.$types.'' );
$nbr_ = 'Projet';
$nbr_s = 'Projets';
$num = number_format_i18n( $num_posts->publish );
$text = _n('' . $nbr_ . '', '' . $nbr_s . '', intval($num_posts->publish) );
if ( current_user_can( 'edit_posts' ) ) {
$num = "<a href='edit.php?post_type=$types'>$num</a>";
$text = "<a href='edit.php?post_type=$types'>$text</a>";
}
echo '<tr><td class="first b">' . $num . '</td><td class="t">' . $text . '</td></tr>';
if ($num_posts->pending > 0) {
$num = number_format_i18n( $num_posts->pending );
$text = _n( 'En attente', 'En attentes', intval($num_posts->pending) );
if ( current_user_can( 'edit_posts' ) ) {
$num = "<a href='edit.php?post_status=pending&post_type=$types'>$num</a>";
$text = "<a class='waiting' href='edit.php?post_status=pending&post_type=$types'>$text</a>";
}
echo '<tr><td class="first b">' . $num . '</td><td class="t">' . $text . '</td></tr>';
}
}
add_action('right_now_content_table_end', 'portfolio_in_today');
Supprimer des items inutiles dans le module « Aujourd’hui »
A l’inverse, nous pouvons masquer des items dans le module « Aujourd’hui ». Si par exemple il n’est pas possible de poster de commentaires sur votre site, ou si vous n’utilisez que des pages et non des posts, autant les masquer.
Je n’ai pas trouvé le moyen de les supprimer, en revanche on va tricher et les masquer avec du css. Nous retrouvons donc le même système que pour changer le logo de l’administration et élargir le menu. Du coup, plutôt que de créer un autre filtre, nous allons reprendre le premier filtre et rajouter une ligne dans la balise <style>
.
01020304050607080910
function sf_admin_head() {
$blog_url = get_bloginfo('url');
$templ_url = get_bloginfo('template_url');
echo '<link rel="shortcut icon" href="'.$blog_url.'/favicon.ico" />';
echo '<link rel="apple-touch-icon" href="'.$blog_url.'/apple-touch-icon.png"/>';
echo '<style type="text/css">#header-logo{background-image:url('.$templ_url.'/images/logo-admin.png)!important;width:62px!important;height:36px!important;margin:7px 0 0 185px!important;}'
.'#adminmenu{margin:15px 5px 15px -170px;width:155px;}'
.'.table_discussion,.b.b-posts,.t.posts,.b.b-cats,.t.cats,.b.b-tags,.t.tags{display:none;}</style>';
}
add_action('admin_head', 'sf_admin_head');
.table_discussion
: commentaires,
.b.b-posts,.t.posts
: posts,
.b.b-pages,.t.pages
: pages,
.b.b-cats,.t.cats
: catégories,
.b.b-tags,.t.tags
: mots clés.
Modifier le menu déroulant des actions favorites
En haut à droite de votre page administration, vous avez un menu déroulant pour Ajouter un nouvel article, un nouveau lien, aller aux commentaires, etc.
Dans cet exemple nous allons supprimer « Nouvel article », « Brouillons », « Commentaires », ajouter « Nouveau lien », ajouter « Nouveau Projet » (custom post type portfolio), et renommer « Envoyer » peu parlant par « Nouveau Medium ».
01020304050607080910
function custom_favorite_actions($actions) {
unset($actions['post-new.php']); // Nouvel article
unset($actions['edit.php?post_status=draft']); // Brouillon article
unset($actions['edit-comments.php']); // Commentaires
$actions['link-add.php'] = array(__('Nouveau Lien'), 'manage_links');
$actions['post-new.php?post_type=portfolio'] = array(__('Nouveau Projet'), 'edit_pages');
$actions['media-new.php'][0] = 'Nouveau Medium';
return $actions;
}
add_filter('favorite_actions', 'custom_favorite_actions');
Si l’on regarde d’un peu plus près $actions['link-add.php'] = array(__('Nouveau Lien'), 'manage_links');
, link-add.php
est l’url de la page de destination du lien, Nouveau Lien
est le titre du lien, manage_links
est la capability pour pouvoir accéder à la page de destination (ainsi, le lien ne s’affichera pas si l’utilisateur n’a pas les droits nécessaires). Voir mon article précédant sur les capabilities et les rôles.
Supprimer le « Update Nag » pour les non-administrateurs
Les non-administrateurs n’ont que faire des mises à jours, autant ne pas polluer leur interface :
123
if (!current_user_can('update_plugins')) {
add_action('admin_init', create_function(false,"remove_action('admin_notices', 'update_nag', 3);"));
}
Supprimer des colonnes dans les listes de pages/articles/média
Sur les pages qui listent tous vos articles, toutes vos pages, etc, il y a peut-être des informations non-nécessaires, par exemple le nombre de commentaires s’ils sont désactivés sur votre site, ou le nom de l’auteur s’il n’y en a qu’un. Supprimons donc définitivement ces informations qui font perdre de la place :
123456789
function custom_post_page_columns($defaults) {
unset($defaults['author']); // Auteur
unset($defaults['comments']); // Commentaires
unset($defaults['date']); // Date
return $defaults;
}
add_filter('manage_posts_columns', 'custom_post_page_columns');
add_filter('manage_pages_columns', 'custom_post_page_columns');
add_filter('manage_media_columns', 'custom_post_page_columns');
L’éditeur visuel ou HTML
Mettre l’éditeur HTML par défaut
1
add_filter( 'wp_default_editor', create_function('', 'return "html";') );
Mettre l’éditeur visuel par défaut
1
add_filter( 'wp_default_editor', create_function('', 'return "tinymce";') );
Source identique à la précédente.
Supprimer l’éditeur visuel
1
add_filter ( 'user_can_richedit' , create_function ( '$a' , 'return false;' ) , 50 );
Empêcher l’éditeur visuel de faire sa sauce avec les balises
12
remove_filter('the_content', 'wpautop');
remove_filter('the_excerpt', 'wpautop');
NOTA : si vous avez installé le plugin Tiny MCE advanced, il faut aussi aller dans le fichier wp-content/plugins/tinymce-advanced/tinymce-advanced.php. Actuellement à la ligne 215, commenter $c = wpautop($c);
Autoriser les shortcodes dans l’excerpt
1
add_filter( 'the_excerpt', 'do_shortcode', 11 );
Supprimer la barre d’administration
Il s’agit du menu aussi appelé « admin bar », nouvellement venu avec WordPress 3.1. Voir mon précédent billet sur la modification de ce menu.
123456789
add_filter( 'show_admin_bar', '__return_false' );
function sf_hide_admin_bar_settings() { ?>
<style type="text/css">.show-admin-bar{display:none}</style>
<?php }
function sf_disable_admin_bar() {
add_filter( 'show_admin_bar', '__return_false' );
add_action( 'admin_print_scripts-profile.php', 'sf_hide_admin_bar_settings' );
}
add_action( 'init', 'sf_disable_admin_bar' , 9 );
Supprimer des meta boxes et autres sous l’éditeur de posts/pages
Sur la page de création d’un nouvel article, ou d’une nouvelle page, il y a des boites qui peuvent ne jamais servir. Dans cet exemple nous allons supprimer définitivement la boite « meta box », la liste des commentaires, et la boite « Discussion » (autoriser les commentaires ou les pings) dans la page « Nouvelle page » :
123456
function remove_extra_meta_boxes() {
remove_meta_box( 'postcustom' , 'page' , 'normal' );
remove_meta_box( 'commentsdiv' , 'page' , 'normal' );
remove_meta_box( 'commentstatusdiv' , 'page' , 'normal' );
}
add_action( 'admin_menu' , 'remove_extra_meta_boxes' );
Pour les autres boites, il suffit de trouver l’id html de la boite. Exemple pour la boite « Discussion » : <div id="commentstatusdiv" class="postbox">
Ajouter ou supprimer des liens dans le menu d’administration
Supprimer les liens d’origine
Avec ceci, nous supprimons tous les liens d’origine du menu. A vous de modifier la variable $restricted
en fonction de vos besoins :
01020304050607080910111213
function remove_admin_menus() {
global $menu;
$restricted = array( __('Dashboard'), __('Posts'), __('Media'), __('Links'), __('Pages'), __('Appearance'), __('Tools'), __('Users'), __('Settings'), __('Comments'), __('Plugins'));
end ($menu);
while (prev($menu)) {
$value = explode(' ',$menu[key($menu)][0]);
if(in_array($value[0] != NULL?$value[0]:"" , $restricted)) {
unset($menu[key($menu)]);
}
}
}
add_action('admin_menu', 'remove_admin_menus');
On pourrait aussi tenir compte de l’utilisateur connecté :
3456
if ( !current_user_can('update_core') )
$restricted = array( __('Posts'),__('Comments'), __('Plugins'),__('Tools'), 'Contact');
else
$restricted = array( __('Posts'),__('Comments'), 'Contact');
Pour faire des choses un peu plus poussées, nous auront besoin de deux variables utilisées par WordPress : $menu
et $submenu
. En effet, WordPress stocke le contenu du menu et des sous-menu dans ces deux variables de type Array().
Une technique pour les afficher temporairement dans le pied de l’administration (comme pour le pied de page personnalisé vu précédemment) :
0102030405060708091011
function custom_footer_admin () {
if(is_admin()) {
global $menu;
global $submenu;
echo 'Menu :<br/>';
print_r($menu);
echo '<br/>Sous-menus :<br/>';
print_r($submenu);
}
}
add_filter('admin_footer_text', 'custom_footer_admin');
Une fois tout ceci affiché, autant le copier et le coller dans un éditeur de texte afin de mieux voir ce qu’il s’y passe avec une indentation adéquate.
Nous avons donc ceci :
$menu[2]
: Tableau de bord,
$menu[4]
: Séparateur,
$menu[5]
: Articles,
$menu[10]
: Médias,
$menu[15]
: Liens,
$menu[20]
: Pages,
$menu[21]
: Votre custom post type (en fait ça dépend de la façon dont votre post type est déclaré),
$menu[25]
: Commentaires,
$menu[59]
: Séparateur,
$menu[60]
: Apparence,
$menu[65]
: Extensions,
$menu[70]
: Utilisateurs,
$menu[75]
: Outils,
$menu[80]
: Réglages,
$menu[99]
: Séparateur « vide »,
$menu[100]
: Les plugins commencent ici.
Pour chaque item on aura :
$menu[x] => Array ( [0] => Titre [1] => capability [2] => url (upload.php par exemple) [3] => Titre de la page (vide pour les items par défaut) [4] => Classes CSS [5] => id CSS [6] => url de l'icône de menu ('div' pour les icônes par défaut) )
Pour les sous-menus :
$submenu['index.php']
: Tableau de bord,
$submenu['edit.php']
: Articles,
$submenu['upload.php']
: Médias,
$submenu['link-manager.php']
: Liens,
$submenu['edit.php?post_type=page']
: Pages,
$submenu['edit.php?post_type=mon-custom-type']
: Votre custom post type,
$submenu[edit-comments.php']
: Commentaires,
$submenu['themes.php']
: Apparence,
$submenu['plugins.php']
: Extensions,
$submenu['users.php']
: Utilisateurs,
$submenu['tools.php']
: Outils,
$submenu['options-general.php']
: Réglages.
Ainsi nous pouvons même nous passer de la fonction précédente puisque pour supprimer un item du menu il suffit de faire :
123456
function custom_admin_menu() {
global $menu;
unset($menu[5]); // Articles
unset($menu[25]); // Commentaires
}
add_action('admin_menu', 'custom_admin_menu', 11);
Autre exemple, un petit tweak qui me plait bien : vous avez remarqué que les séparateurs du menu sont composés d’un trait horizontal et de flèches à gauche. Sauf le dernier, celui entre « Réglages » et les plugins. Alors donnons lui la même allure. Les deux premiers séparateurs apparaissent comme ceci dans la variable $menu
:
$menu[4] => Array ( [0] => [1] => read [2] => separator1 [3] => [4] => wp-menu-separator )
$menu[59] => Array ( [0] => [1] => read [2] => separator2 [3] => [4] => wp-menu-separator )
Alors que le dernier séparateur apparait comme ceci :
[99] => Array ( [0] => [1] => read [2] => separator-last [3] => [4] => wp-menu-separator-last )
Il suffit alors d’insérer dans notre fonction custom_admin_menu()
ceci :
1
$menu[99] = array( 1 => 'read', 2 => 'separator3', 4 => 'wp-menu-separator' );
Un autre exemple, disons que vous vous serviez des liens pour afficher les partenaires de votre site, alors changeons le titre du lien dans le menu :
6
$menu[15][0] = 'Partenaires';
Autre idée, remplacer le lien « Apparences » et son sous-menu par un lien « Menus », histoire de ne laisser qu’un accès vers la gestion des menus du site :
1234567
function custom_admin_menu() {
global $menu;
global $submenu;
unset($submenu['themes.php']); // Supprime les sous-menus de "Apparence"
$menu[60] = array( 0 => 'Menus', 1 => 'edit_theme_options', 2 => 'nav-menus.php', 4 => 'menu-top menu-icon-appearance', 5 => 'menu-appearance', 6 => 'div' ); // Change le menu "Apparence" en "Menus"
}
add_action('admin_menu', 'custom_admin_menu', 11);
Supprimer un item de sous-menu
Avec WordPress 3.1, est arrivée une fonction très pratique : remove_submenu_page() [en].
Exemple pour supprimer le plugin Secure WP du sous-menu de « Réglages » : (toujours à mettre dans notre fonction custom_admin_menu()
)
12
if(function_exists('remove_submenu_page'))
remove_submenu_page( 'options-general.php', 'secure-wordpress.php' );
Les menus et sous-menus des plugins
Là, c’est toujours compliqué de manipuler les items crées par les plugins, car tous les développeurs ne les créent pas de la même manière, le plus dur étant de les supprimer ou d’empêcher leur création. Tout ce que je peux faire, c’est vous donner quelques exemples au cas par cas (on reste toujours dans notre fonction custom_admin_menu). En général, il faut aller voir directement dans le plugin pour trouver une solution.
Exemple 1 :
Le plugin Contact Form 7, supprimer son sous-menu inutile et lui rajouter une icône particulière.
Tout d’abord, on peut supprimer l’item de Contact Form 7 avec la toute première fonction qu’on a vu pour supprimer les items par défaut, il suffit de rajouter ‘Contact’ dans la variable $restricted
:
array( __('Posts'),__('Comments'), __('Plugins'),__('Tools'), 'Contact');
12345
$templ_url = get_bloginfo('template_directory');
if ( function_exists( 'wpcf7_admin_management_page' ) ) {
unset($submenu['wpcf7']); // Supprime le sous-menu de Contact Form 7
add_menu_page( __( 'Contact Form 7', 'wpcf7' ), __( 'Contact', 'wpcf7' ), WPCF7_ADMIN_READ_CAPABILITY, 'wpcf7', 'wpcf7_admin_management_page', $templ_url.'/images/admin/contact.png' ); // Rajoute Contact Form 7 et sa nouvelle icône
}
Exemple 2 :
Le plugin Time Machine, il arrive en sous-menu de « Réglages », on va le mettre en tant que menu et lui rajouter une icône particulière.
123
$templ_url = get_bloginfo('template_directory');
if ( function_exists( 'wpTimeMachine_init' ) )
add_menu_page( 'wp Time Machine', 'wp Time Machine', 'edit_others_pages', 'wpTimeMachineCore.php', 'wpTimeMachine_init', $templ_url.'/images/admin/wptm.png' ); // Ajoute "Time Machine"
Exemple 3 :
Le plugin BackWPup, il arrive aussi en sous-menu de « Réglages », on va également le mettre en tant que menu et lui rajouter une icône particulière.
12345
$templ_url = get_bloginfo('template_directory');
if ( function_exists( 'backwpup_options_page' ) ) {
$hook = add_menu_page( __('BackWPup','backwpup'), __('BackWPup','backwpup'), 'edit_others_pages', 'BackWPup', 'backwpup_options_page', $templ_url.'/images/admin/wptm.png' ); // Ajoute BackWPup
add_action('load-'.$hook, 'backwpup_options_load');
}
Exemple 4 :
Le plugin WP-ban, juste pour lui ajouter une icône, on va devoir le supprimer du menu et le rajouter.
1234567
function custom_admin_menu() {
$templ_url = get_bloginfo('template_directory');
if ( function_exists( 'ban_menu' ) )
add_menu_page( __('Ban', 'wp-ban'), __('Ban', 'wp-ban'), 'manage_options', 'wp-ban/ban-options.php', '', $templ_url.'/images/admin/ban.png' ); // Ajoute "WP-ban"
}
add_action('admin_menu', 'custom_admin_menu', 11);
remove_action('admin_menu', 'ban_menu'); // On empêche le plugin de créer son menu
Vous voyez, à chaque fois la méthode diffère légèrement.
Ajouter une page « Tous les réglages »
Il est possible d’ajouter une page cachée de WordPress, permettant de voir tous les réglages du site et des plugins. Une fois le code ajouté, aller dans « Réglages » -> « Tous les réglages » pour y accéder. La page n’est accessible qu’aux administrateurs, et cachée aux autres utilisateurs.
1234
function custom_admin_menu() {
add_options_page(__('All Settings'), __('All Settings'), 'administrator', 'options.php');
}
add_action('admin_menu', 'custom_admin_menu');
Source : wpmayor.com.
Modifier le dropdown d’aide
Sur toutes les pages de l’administration de WordPress, il y a un bouton d’aide en haut à droite qui permet de déplier un panneau comportant des informations concernant la page actuelle. Voici comment modifier le contenu du panneau :
01020304050607080910
add_action('load-page-new.php','custom_help_page');
add_action('load-page.php','custom_help_page');
function custom_help_page() {
add_filter('contextual_help','custom_page_help');
}
function custom_page_help($help) {
// echo $help; // Décommenter cette ligne si vous souhaitez garder l'aide originale et y ajouter la votre
echo "<h5>Aide personnalisée</h5>";
echo "<p>Votre code HTML ici.</p>";
}
L’exemple ci-dessus modifie l’aide de la page « Nouvelle page » et peut être appliqué à n’importe quelle autre section.
Source : sixrevisions.com via wpbeginner.com.
Ajouter un avertissement en haut de page
Il s’agit d’un avertissement qui apparaitra en haut des pages désirées.
123456
add_action( 'admin_notices', 'sf_admin_notice' );
function sf_admin_notice(){
global $current_screen;
if ( $current_screen->parent_base == 'options-general' )
echo '<div class="updated"><p>Attention - Changer des réglages sur ces pages peut causer des problèmes au design du site!</p></div>';
}
Dans l’exemple ci-dessus, l’avertissement est affiché sur les pages de réglages.
Il est intéressant de noter les classes employées :
– « updated » affichera l’avertissement au-dessous du titre de la page, sur fond jaune.
– « error » affichera l’avertissement au-dessous du titre de la page, sur fond rouge.
– si aucune classe n’est précisée, l’avertissement s’affichera au-dessus du titre de la page, sans fond particulier, sans mise en forme particulière du texte.
Source : wpbeginner.com (attention, il y a une erreur dans leur code).
Conclusion
Il me reste encore quelques tours dans mon sac mais ce billet déjà bien assez long non? Le reste viendra plus tard ;) De plus, je pense que tout ceci répondra à la plupart de vos besoins, il y a déjà suffisamment de quoi faire.
Comme d’habitude, n’hésitez pas à me laisser vos remarques en commentaires.
See ya!
Commentaires
Commentaire de ZIED.
Bonjour;
j’ai besoin d’ajouter un menu dans la partie admin
exemple : http://data.imagup.com/10/1129876118.jpg
j’ai essaye de suivre votre tuto mais j’ai pas compris ou je vais placer mon code (add_menu_page ……) pour ajouter le menu dans quel fichier
merci d’avance
Commentaire de Greg.
Bonjour.
C’est dans le fichier functions.php de votre thème, c’est à dire « wp-content/theme/votre-theme-machin/functions.php »
Commentaire de ZIED.
Merci Bein Greg
Commentaire de cedric.charles.
Bonjour Greg :) !
D’abord je voulais te remercier pour tes conseils, j’ai réussi mon projet de fin d’étude avec 17/20, en grande partie grâce à toi ;) !
Ensuite, je reviens vers toi pour une ou deux questions…
Pour un autre site, j’ai créé un custom post type appelé « Produits ». Pour le moment, j’ai un menu « Travail du bois ». J’aimerais avoir un sous-menu « Nos produits » qui listerait mes posts de type « Produits » (le custom post type) et que lorsque je clique sur ce sous-menu, le menu parent soit actif. Le listing de mes posts se ferait suivant un template particulier « produit.php », qui afficherait seulement le titre de chaque post et une photo. Lorsque l’utilisateur cliquera sur le titre, une nouvelle page s’affichera, montrant uniquement le produit seul avec son contenu suivant le template « single-produit.php ». Le menu « Travail du bois » devra toujours être actif.
A la base, j’avais créé une page « Nos produits », qui était liée à « produit.php ». Je l’avais mise en sous-menu de « Travail du bois ». Cela fonctionnait bien mais je n’arrivait pas à dire à WordPress que quand je cliquais sur le titre d’un produit de la liste, il devait afficher ce produit suivant « single-produit.php ».
J’ai donc changé d’optique et supprimé cette page. J’ai ajouté un lien vers « monsite.com/produits/ » (lien vers mon custom post type) en sous-menu de « Travail du bois ». J’ai ensuite spécifié à WordPress qu’il devait utilisé « produit.php » et « single-produit.php » pour les post de type custom post type « Produits ».
0102030405060708091011121314151617181920212223242526
Cela fonctionne bien sauf que lorsque j’affiche un seul produit, le menu « Travail du bois » n’est plus actif et que l’url est du type « monsite.com/produits » alors que j’aimerais avoir « monsite.com/travail-du-bois/produis »…
J’espère que tu pourras m’éclairer…
A bientôt,
Cédric
Commentaire de Greg.
Salut. Congrats! o/
Bon, ton histoire n’est pas simple, à cause du premier item de menu « travail du bois ».
Si j’ai bien compris tu veux :
Mais avec seulement « Travail du bois » et « Nos produits » dans le menu.
Voyons ce qu’on a actuellement :
Travail du bois et Nos produits sont de type « page »,
Chaque produit est de type « produit »,
Travail du bois et Nos produits sont dans le menu, les produits ne le sont pas.
Pour que chaque chainon soit actif dans le menu, il doit y avoir un lien de parenté entre eux : que soit une parenté dans le menu (mais les produits ne sont pas dans le menu), soit une parenté de type page / sous-page (hors un post type ne peut pas être parent avec un post type différent (page / produit). En gros, il n’y a rien dans la base de données qui relie tout le monde ensemble :/
Idée à tester :
Passer ta page « Nos produits » en post type « produit »,
Lui affecter ton template produit.php (en le renommant single-nos-produits.php, ça sera le plus simple et rapide à mon avis, au moins pour le test),
Mettre tous tes produits en enfant de « Nos produits ».
Ainsi, tes produits sont des enfants de « Nos produits », et « Nos produits » est un enfant de « Travail du bois » dans le menu.
A priori ça peut marcher.
La solution n’est pas parfaite mais elle nécessite peu de bidouille (et tu m’a donné une idée de plugin ;) ).
A +
Commentaire de TefDesign.
Salut à toi.
Vraiment un super site avec pleins de ressources ! C’est un bon site à mettre en favori ;)
J’aurais une question : Modification de l’aide c’est ce que je cherchais mais voilà, je voudrais cibler seulement mon custom_post_type. Si je fais avec load-post-new, j’aurais l’aide sur toutes les nouveaux articles ou pages ou custom page que je vais créer. Mais moi je ne souhaite que sur la page custom_post_type.
As-tu une idée ?
Merci à toi :)
Encore bravo !
A+
Tef
Commentaire de Greg.
Salut (et merci ;) ).
Ceci devrait répondre à ton interrogation :
123
A+
Commentaire de TefDesign.
Hello !
Merci à toi :) Si j’ai bien compris, cela devrait être comme ça :
if ( isset($_GET('post_type')) && $_GET('post_type') == 'products' ) {
add_action('load-page-new.php','custom_help_page');
add_action('load-page.php','custom_help_page');
function custom_help_page() {
add_filter('contextual_help','custom_page_help');
}
function custom_page_help($help) {
//echo $help;
echo "Ici mon titre";
echo " Et là mon aide";
}
}
Mais cela plante mon administration ! Je vais chercher un peu de mon côté mais si t’as une (autre !) idée ;)
En tout cas merci à toi :)
A+
Tef
Commentaire de TefDesign.
Pour info, je viens de remplacer ta ligne par celle-ci mais ne fonctionne pas mais je n’ai plus le plantage de l’admin :
if (get_post_type() == "products" ) {
Commentaire de Greg.
Aïe, erreur de ma part! Pour les $_GET ce ne sont pas des parenthèses mais des crochets (désolé!) :
010203040506070809101112
EDIT :
Si jamais rien ne s’affiche, essaies comme ça plutôt :
010203040506070809101112
A noter que ça ne s’affichera que sur la page pour créer un nouveau post.
Commentaire de TefDesign.
Ne t’excuses pas j’aurais pu le voir aussi :P C’est trop tôt encore pour que mon cerveau ce mette en place (pourquoi ma fille me laisse pas dormir encore un peu…)
D’ailleurs ca ne pouvait pas fonctionner car c’est un custom post type et j’avais mis load-page.php :P
Avec post ça va mieux !!
Ta ligne fonctionne je te remercie ;)
Je vais pouvoir me servir de cette méthode fare une doc pour les clients lorsque je livrerais les sites sous WordPress :)
Si tu as un jour besoin d’aide en WordPress, même si je pense que tu en connais mieux que moi, n’hésites pas ! Je suis juste Intégrateur Web mais on ne sait jamais :) J’ai quelques connaissances en WordPress et je dois refaire mon site d’ailleurs.
A+
Tef
Commentaire de Littlebuzz.
Merci pour tout ces trucs, j’ai longtemps cherché et j’ai la quasi tout ce que je voulais :)
Un seul problème persiste … je souhaite virer « Images à la une » quand on ecrit un nouveau post, mais
remove_meta_box( ‘postimagediv’ , ‘post’ , ‘normal’ );
ne donne rien.
Commentaire de Greg.
Salut.
Ceci devrait aider :
1234
Cette box est en effet un peu plus capricieuse que les autres :)
Commentaire de Cedric charles.
Remove_post_support pourrait aider egalement :) !
Commentaire de Greg.
remove_post_type_support plutôt ;)