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
Cliquez pour afficher ⇲
Cliquez pour masquer ⇱
<?php
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="annonce">Annonce</label></th>
</tr>
<tr valign="top">
<td><input type="checkbox" name="afficher-annonce" value="Afficher"<?php if(get_option('afficher-annonce') == true) { echo " checked"; }?>> Afficher l'annonce</td>
</tr>
<tr valign="top">
<!--<td><textarea name="annonce" rows="10" cols="90"><?php echo get_option('annonce'); ?></textarea></td>-->
<td><?php wp_editor( get_option('annonce'), 'annonce_editor', array('textarea_name' => 'annonce') ); ?></td>
</tr>
</table>
<p class="submit">
<input type="submit" class="button-primary" value="Mettre à jour" />
</p>
</form>
</div>
<?php
}