T'as vuu ?
 

Utiliser l’éditeur de texte (WYSIWYG) de Wordpress dans vos plugins !

Utiliser l'éditeur de texte (WYSIWYG) de Wordpress dans vos plugins !

J’en avais besoin pour mon plugin « Comments Winners » (qui devrait bientôt faire son apparition sur vos écrans).

J’ai donc farfouillé dans le code Wordpress pour voir comment ils le faisaient pour la gestion des articles et, au final, c’est plutôt simple !

Commencez par ajoutez au début de votre plugin une « action » qui va exécuter le code d’une fonction à l’initialisation de l’administration :

add_action('admin_init', 'init_wysiwyg');

Ajoutez ensuite la fonction en question qui va se charger de définir quelques scripts à charger pour que l’éditeur fonctionne correctement :

function init_wysiwyg()
{
	wp_enqueue_script('editor');
	add_thickbox();
	wp_enqueue_script('media-upload');
	add_action('admin_print_footer_scripts', 'wp_tiny_mce', 25);
	wp_enqueue_script('quicktags');
}

Il ne vous reste plus qu’à insérer votre éditeur WYSIWYG où bon vous semble dans votre plugin comme ceci :

<div id="poststuff"><?php the_editor(); ?></div>

Le DIV poststuff est important pour éviter les bugs de style sur l’éditeur WYSIWYG.

La fonction the_editor de Wordpress possède plusieurs paramètres :

the_editor($content, $id = 'content', $prev_id = 'title', $media_buttons = true, $tab_index = 2)
  • $content : Le contenu de l’éditeur de texte.
  • $id : Le nom (et ID) du champ de l’éditeur de texte.
  • $prev_id : L’ID du champ précédent pour pouvoir switcher entre les différents champs du formulaire.
  • $media_buttons : Booléen (true ou false) qui défini si il faut afficher les boutons pour insérer des fichiers (images, sons, vidéos, etc).
  • $tab_index : L’index de tabulation du champ de formulaire.

Donc vous pouvez même définir un contenu de base et un nom de champ à votre éditeur :

<div id="poststuff"><?php the_editor(get_option('my_plugin_option'), 'my_plugin_option'); ?></div>

Et pour que la ressemblance soit parfaite, vous pouvez définir le style du textarea (qui est affiché lorsque vous êtres en mode HTML) dans votre CSS :

#poststuff textarea
{
	-moz-box-sizing:border-box;
	border:0 none;
	line-height:150%;
	outline-color:-moz-use-text-color;
	outline-style:none;
	outline-width:medium;
	padding:6px;
	margin:0;
	width:100%;
}

Ensuite, du côté de la réception du formulaire, un petit coup de nl2br() sera nécessaire pour garder les retours à la ligne :

echo nl2br($_POST['my_wysiwyg']);

Elle est pas belle la vie ?

Je me demande bien pourquoi ils n’en parlent même pas dans la doc Wordpress. Ça peut quand même être bien pratique et ça permet de garder une cohérence dans toute l’administration plutôt que d’utiliser un autre éditeur (ou pas d’éditeur du tout)…

Enjoy ! ;-)

Partager cet article

Vous avez aimé cet article ? N'hésitez pas à le partager !


Pingbacks

Utilisez l'URI suivante pour effectuer un trackback sur cet article depuis votre système de blogging :
http://www.tavuu.net/developpement/utiliser-editeur-de-texte-wysiwyg-de-wordpress-dans-vos-plugins/trackback/

5 commentaires

Bonjour, ce qui est marrant c’est que ça doit être la période d’intégrer l’editeur de wordpress dans ses plugins ;)

ton article m’a bien dépanné par contre j’ai un petit soucis pour switcher entre les éditeurs.

j’ai cette erreur:

Message : ’switchEditors’ est indéfini.
Ligne : 107
Caractère : 1
Code : 0
URI : http://localhost/wordpress/wp-admin/admin.php?page=edito

voici le code:

function init_wysiwyg() {
wp_enqueue_script(‘editor’);
add_thickbox();
wp_enqueue_script(‘media-upload’);
add_action( ‘admin_print_footer_scripts’, ‘wp_tiny_mce’, 25 );
wp_enqueue_script(‘quicktags’);
}

function pekAdmin() {
add_action(‘admin_init’, ‘init_wysiwyg’);
//add_filter(‘admin_head’,'init_wysiwyg’);

echo  »;
the_editor($content, $id = ‘content’, $prev_id = ‘title’, $media_buttons = true, $tab_index = 2);
echo  »;
}

function pekAdminCss() {
echo  »;
}

add_action(‘admin_print_styles-’. $options_page, ‘pekAdminCss’);

je ne sais pas si tu as eu l’erreur et si tu vois l’erreur que j’ai pu faire …

par contre j’aurais peut être plus mis add_filter(‘admin_head’,'init_wysiwyg’);
car dans le code de la page post de wordpress l’editeur se trouve dans la fonction admin_head …

Merci par avance de ta réponse

#1 - Le 2 décembre 2009 à 10 h 46 min

@Hotfirenet : Salut !
Je n’ai pas eu ce problème, mais essaie peut-être de mettre « add_action(’admin_init’, ‘init_wysiwyg’); » en dehors de ta fonction pekAdmin().
Et ce code se trouve bien dans le fichier qui défini les informations sur ton plugin (nom, adresse du site, etc.) ?

A+

#2 - Le 2 décembre 2009 à 13 h 23 min

Ok effectivement en le virant de la fonction ça fonctionne ça doit être par rapport à l’appel qui ne doit pas coller par rapport à l’ordre d’appel des fonctions.

J’aime pas le principe que l’éditeur soit appelé dans toute l’administration ce qui serait bien c’est de pouvoir l’appeler uniquement sur la page du plugin ou du theme.

je t’ai mis un mail.

#3 - Le 3 décembre 2009 à 21 h 11 min

Sinon essaie peut-être d’ajouter une condition avant l’action init_wysiwyg. Quelque chose du genre : if($inMyModule === true) add_action([...]);
Et faudrait définir le $inMyModule quelque part dans ton fichier à true si tu est sur la page du module et à false sinon, par exemple à l’endroit où tu appelle la fonction pekAdmin() ?

A tester.

Tiens-nous au courant ;-).

#4 - Le 3 décembre 2009 à 22 h 24 min

j’ai trouvé comment faire, je fais un billet sur mon blog et je fais un backtrack vers le tiens …

Merci Leeroy.

#5 - Le 4 décembre 2009 à 10 h 11 min

Réagir


x

Envoyer à un ami