http://www.felix-girault.fr/html/une-page-doptions-pour-votre-theme-wordpress/ http://codex.wordpress.org/Adding_Administration_Menus
Par défaut ces pages ne sont modifiables que par un utilisateur administrateur. Les autres ont un message “Alors, on triche ?” quand ils tentent de valider leurs mises à jour. Pour éviter ça il faut utiliser le code suivant :
// Modify capability function my_page_capability( $capability ) { return 'edit_others_posts';// Pour un éditeur } add_filter( 'option_page_capability_my_theme', 'my_page_capability' );
functions.php :
// ----------------------------------------------------------------------------- // Ajout d'une page d'options pour la langue // À l'initialisation de l'administration on informe WordPress des options de notre thème add_action( 'admin_init', 'myThemeRegisterSettings' ); function myThemeRegisterSettings( ) { register_setting( 'my_theme', 'language' ); } // la fonction myThemeAdminMenu( ) sera exécutée // quand WordPress mettra en place le menu d'admin add_action( 'admin_menu', 'myThemeAdminMenu' ); function myThemeAdminMenu( ) { add_menu_page( 'Options du thème', // le titre de la page 'Langue', // le nom de la page dans le menu d'admin 'administrator', // le rôle d'utilisateur requis pour voir cette page 'my-theme-page', // un identifiant unique de la page 'myThemeSettingsPage' // le nom d'une fonction qui affichera la page ); } function myThemeSettingsPage( ) { ?> <div class="wrap"> <h2>Options du thème</h2> <form method="post" action="options.php"> <?php // cette fonction ajoute plusieurs champs cachés au formulaire // pour vous faciliter le travail. // elle prend en paramètre le nom du groupe d'options // que nous avons défini plus haut. settings_fields( 'my_theme' ); ?> <table class="form-table"> <tr valign="top"> <th scope="row"><label for="language">Langue du thème</label></th> <td> <select name="language"> <option value="fr"<?php if(get_option('language') == 'fr'){ echo ' selected'; } ?>>Français</option> <option value="en"<?php if(get_option('language') == 'en'){ echo ' selected'; } ?>>English</option> <option value="cn"<?php if(get_option('language') == 'cn'){ echo ' selected'; } ?>>中国</option> <option value="ru"<?php if(get_option('language') == 'ru'){ echo ' selected'; } ?>>русский</option> </select> </td> </tr> </table> <p class="submit"> <input type="submit" class="button-primary" value="Mettre à jour" /> </p> </form> </div> <?php } /* Fonction pour afficher le texte suivant la langue du thème * Sert principalement pour la navigation */ function uniPrintText($fr, $en, $cn, $ru) { if(get_option('language') == 'fr'){ echo $fr; } if(get_option('language') == 'en'){ echo $en; } if(get_option('language') == 'cn'){ echo $cn; } if(get_option('language') == 'ru'){ echo $ru; } }
Page avec éditeur WYSIWYG