Posts Tagged ‘WordPress’

Environnement de développement d’un plugin WordPress

Friday, May 17th, 2013

J’avais envie de me lancer dans le développement d’un petit plugin pour WordPress sur mon Mac.

Je n’ai aucune expérience en développement web et n’avais aucune idée de quels outils j’avais besoin, ni de la façon de travailler.

Par contre, je tenais absolument à utiliser un gestionnaire de versions, en l’occurrence Subversion, qui est celui que je connais le mieux.

Voici un descriptif de ce que j’ai mis en place et utilisé.

Installation de MAMP

Il a été rapidement clair que pour pouvoir développer confortablement un plugin pour WordPress, il faut une installation locale d’une version (voire plusieurs) de WordPress.

Pour ce faire, il suffit d’installer MAMP, qui intègre toutes les applications nécessaires au bon fonctionnement de WordPress : Apache, MySql, PHP, etc. Il existe une déclinaison pour Windows (WAMP) et pour Linux (LAMP).

MAMP peut être téléchargé à l’adresse suivante : http://www.mamp.info/en/mamp/index.html

Il suffit ensuite de démarrer le paquet d’installation. Celle-ci se déroule sans encombre.

Aller dans /Applications/MAMP/ et démarrer MAMP. Comme MAMP PRO est installé, il fait la demande suivante :

Décocher et cliquer Lancer MAMP. Eventuellement, désinstaller MAMP PRO en cochant toutes les cases du désinstalleur.

Après le démarrage, MAMP affiche l’état des serveurs, qui sont inactifs.

Cliquer sur Démarrer les serveurs. Normalement, ils s’activent et passent au vert.

L’activation des serveurs provoque l’affichage dans votre navigateur par défaut de l’URL http://localhost:8888/MAMP/?language=French.

À partir de cette page, il est possible d’administrer les différents outils qui composent notre serveur web local.

Création d’une base de données pour WordPress

Pour fonctionner, WordPress a besoin d’une base de données MySQL, qui sera ensuite configurée et remplie par ses soins.

Utiliser l’utilitaire phpMyAdmin, accessible par le navigateur web, sur l’onglet phpMyAdmin.

Il faut activer l’onglet Bases de données, puis donner un nom à la nouvelle base de données qui sera utilisée par WordPress (par exemple wptest). Cliquer ensuite sur le bouton Créer.

Il n’y a rien d’autre à faire !

Installation locale de WordPress

Télécharger WordPress sur le site http://fr.wordpress.org.

Suivre les instructions indiquées :

  1. Créer un répertoire wordpress dans /Applications/MAMP/htdocs/ et y copier les fichiers téléchargés.
  2. Renommer wp-config-sample.php en wp-config.php
  3. Éditer le fichier wp-config.php afin d’y configurer le nom de la base de données WordPress ainsi que l’identifiant à utiliser :
    define('DB_NAME', 'wptest');
    define('DB_USER', 'root');
    define('DB_PASSWORD', 'root');
  4. Remplacer “put your unique phrase here” par votre propre phrase.
  5. Comme notre installation locale de WordPress est destinée au développement, activer le mode debug : define('WP_DEBUG', true);
  6. Aller à la page localhost:8888/wordpress/. La configuration automatique commence.
  7. Si tout se passe bien, WordPress est désormais complètement utilisable.

Installer l’IDE

On m’a conseillé, pour développer en PHP, d’utiliser Aptana Studio. Cet IDE, basé sur Eclipse, permet d’installer ensuite un bundle spécifique à WordPress.

Installation de Git

Pour installer ce bundle, il faut disposer d’un client Git. Les binaires pour Mac sont téléchargeables à l’adresse http://git-scm.com/download/mac.

Ensuite, installer le paquet git-1.8.2.1-intel-universal-snow-leopard.pkg. Le script setup git PATH for non-terminals programs.sh n’a pas besoin d’être exécuté.

Il faut également s’assurer que le port TCP 9418 soit ouvert.

Installation de Aptana Studio

Télécharger Aptana Studio à l’adresse http://www.aptana.com/products/studio3/download. Si vous possédez déjà Eclipse, vous pouvez installer Aptana sous forme d’un plugin. Pour ma part, j’ai préféré télécharger la version autonome d’Aptana Studio.

L’installation ne pose aucun problème.

Installation du bundle WordPress

Pour installer le bundle WordPress (ou d’autres) d’Aptana Studio, aller dans le menu Commands->Bundle Developement->Install Bundle. Choisir WordPress dans la liste.

Installation d’un client Subversion

J’ai choisi d’utiliser SmartSVN comme client Subversion pour Mac. La version gratuite me permet de faire tout ce dont j’ai besoin.

Créer un projet de développement

Emplacement du bac à sable

J’ai choisi de créer un dépôt Subversion par plugin.

Je ne voulais pas placer mon bac à sable (ou autrement dit, l’emplacement de ma copie locale du dépôt Subversion de mon projet) directement dans le répertoire plugins de mon installation locale de WordPress, bien que plusieurs personnes font ça. Il y a principalement deux raisons à ce choix :

  • Le projet de développement contient des fichiers qui n’ont pas a figurer dans le répertoire des plugins WordPress. Je pense par exemple aux fichiers de configuration du projet qu’Aptana génère, aux fichiers traitant de la documentation interne ainsi qu’aux éventuels fichiers de ressource.
  • Si j’ai plusieurs installations locales de WordPress, par exemple avec différentes versions de WordPress pour les tests, je veux éviter de faire un checkout du dépôt dans chaque répertoire plugins de chaque installation locale, car ça deviendrait vite ingérable.

La solution que j’ai trouvée pour tenir compte de ces contraintes est de créer des symlink (les alias sont plus faciles à gérer depuis le Finder, mais ils ne sont malheureusement pas transparents aux yeux de WordPress). J’ai donc, dans le répertoire plugins de mon installation locale de WordPress, créé avec le Terminal un lien sur le répertoire de développement de mon plugin :

ln -s ~/Documents/Aptana\ Studio\ 3\ Workspace/MonPlugin /Applications/MAMP/htdocs/wordpress/wp-content/plugins/monplugin

Ainsi, notre installation locale de WordPress (ou nos installations s’il y en a plusieurs) utilise(nt) toujours la toute dernière version du plugin, ce qui rend les tests très aisés.

Remarque : pour que l’utilisation des symlinks fonctionne correctement, apache doit être configuré (dans le fichier httpd.conf) pour les accepter (option FollowSymLinks), ce qui est le cas par défaut, lorsqu’il est installé avec MAMP, pour le répertoire /Applications/MAMP/htdocs/.

Auto-completion avec l’API WordPress

Il reste un problème, découlant de cette solution, à régler : Comme notre projet est isolé des fichiers de WordPress, Aptana ne va pas être en mesure de faire de la completion automatique avec les fonctions de l’API WordPress.

Pour corriger ce problème, il suffit d’ajouter le chemin de  notre installation locale de WordPress au chemins de construction de PHP (PHP Buildpath).

Dans Aptana Studio, ouvrir le menu Project->Properties. Choisir dans la zone latérale gauche la propriété PHP Buildpath, sélectionner l’onglet External Directories, puis cliquer sur Add .... Il ne reste plus qu’à sélectionner le répertoire local de l’installation WordPress (par exemple /Applications/MAMP/htdocs/wordpress) et le tour est joué.

Le bug des symlink

Tant que le plugin WordPress que vous développez n’est constitué que d’un fichier, tout va bien.

Par contre, si votre plugin doit faire appel à d’autres fichiers, par exemple pour ajouter une feuille de style spécifique, l’utilisation de symlinks pose problème car WordPress ne les gère pas correctement.

Beaucoup de développeurs sont très ennuyés par cette situation et espèrent que la version 3.6 de WordPress intègre un correctif. Le ticket #16953 permet de suivre l’avancement de ce problème.

Dans l’intervalle, un petit patch très pratique créé par Kaspars Dambis doit être ajouté dans le code du plugin. C’est un moindre mal comparé à l’énorme avantage que l’on a d’utiliser les symlinks.

// ---- Patch pour autoriser le symlinking avec ce plugin.
// Patch créé par Kaspars Dambis (http://konstruktors.com/blog/wordpress/3635-plugins-via-symlinks/)
// Le bug #16953 traite de cette problématique : http://core.trac.wordpress.org/ticket/16953
// Avec un peu de chance, une solution sera à disposition dans le version 3.6 de WordPress.
add_filter( 'plugins_url', 'your_plugin_symlink_fix', 10, 3 );

function your_plugin_symlink_fix( $url, $path, $plugin ) {
   if ( strstr( $plugin, basename(__FILE__) ) )
      return str_replace( dirname(__FILE__), '/' . basename( dirname( $plugin ) ), $url );
   return $url;
}

Dans le cas cité plus haut où une feuille de style doit être chargée, il suffira de placer le fichier css dans le répertoire du plugin…

…et de la charger selon la méthode traditionnelle :

// Chargement de la feuille de style spécifique à ce plugin
if ( ! function_exists( 'monplugin_add_stylesheet' ) ) {

	add_action( 'wp_enqueue_scripts', 'monplugin_add_stylesheet' );

	function monplugin_add_stylesheet() {
	    wp_register_style( 'monplugin-style',  plugins_url('monplugin-style.css', __FILE__));
	    wp_enqueue_style( 'monplugin-style' );
	}
}

Déploiement

Une fois le plugin testé avec l’installation locale de WordPress, il ne reste plus qu’à le déployer sur une installation distante. Pour ce faire, Aptana Studio permet de configurer une connexion pour transférer facilement les fichiers locaux sur le serveur distant.

Il faut donc disposer d’une connexion FTP permettant d’accéder à l’installation distante de WordPress, puis il faut configurer cette connexion au niveau du projet Aptana.

Depuis le menu contextuel de l’élément Connections, choisir Add New Connection... (ou double-cliquer sur l’élément).

Une fenêtre de configuration s’ouvre.

Donner un nom à la nouvelle connexion et créer une nouvelle destination distante en cliquant sur le bouton New....

Valider les paramètres FTP de connexion en cliquant sur OK.

Dès lors, chaque fois qu’un des fichiers du plugin doit être mise à jour sur le serveur distant, il suffit de le sélectionner et de cliquer sur l’icône Upload.

Formules mathématiques dans WordPress : MathJax

Saturday, March 3rd, 2012

Quelques uns de mes articles nécessitent de représenter des formules mathématiques.

Jusqu’ici, j’avais utilisé la seule solution que je connaissais : le site LaTex Equation Editor for Writing Maths on the Internet !

Le principe est simple : la formule mathématique à afficher est une image, générée à la volée par ce site, en fonction d’une formule décrite selon la syntaxe de LaTex. L’avantage de cette méthode est qu’elle fonctionne dans tous navigateurs.

Le désavantage est que la qualité de l’image est discutable et nécessite un accès au site mentionné plus haut pour que l’affichage de l’article soit correct.

MathJax

C’est tout à fait par hasard que je suis tombé sur MathJax et plus particulièrement le plug-in MathJax-Latex. Il permet d’afficher une formule mathématique, décrite dans la syntaxe de LaTex, sous forme textuelle :

L’avantage de la forme textuelle est qu’elle supporte bien le zoom et permet d’être copier-coller. MathJax propose même un menu contextuel permettant un copier-coller plus performant.

La syntaxe est simple, il suffit de placer la formule entre les balises [latex] et [/latex]. Ainsi :

[latex]\sum_{k=1}^{n}k^{2}=\frac{n(n+1)(2n+1)}{6}[/latex]

affichera le résultat suivant :

Si le résultat est trop petit, ajouter \large en début de formule :

[latex]\large\sum_{k=1}^{n}k^{2}=\frac{n(n+1)(2n+1)}{6}[/latex]

Le résultat sera le suivant :

Il est également possible de placer la formule entre les délimiteurs $$. Par exemple :

$ $\sum_{k=1}^{n}k^{2}=\frac{n(n+1)(2n+1)}{6}$ $

Ce qui donne :

$$\sum_{k=1}^{n}k^{2}=\frac{n(n+1)(2n+1)}{6}$$

Attention : si vous avez installé le plug-in Jetpack, il faut désactiver l’extension latex.  Sinon, les formules placées entre les balises [latex] seront affichées sous forme d’images.

Diffuser des vidéos depuis son blog

Wednesday, December 22nd, 2010

Lorsque je souhaite diffuser une vidéo familiale sur mon blog, voilà les contraintes que j’ai, par ordre d’importance :

  1. La vidéo doit rester privée : seuls les personnes qui lisent le blog doivent pouvoir accéder à la vidéo.
  2. Les personnes qui lisent le blog doivent pouvoir les télécharger.
  3. Les vidéos doivent être visibles au moyen d’un navigateur Mac ou PC. Elles doivent également être visibles sur un iPod, iPhone ou encore iPad.
  4. Du moment qu’une personne lit le blog, la vidéo doit être facilement accessible (en particulier, sans devoir taper un mot de passe).
  5. Bonne qualité.

Première solution : vimeo, compte standard

Ma première solution était d’utiliser un compte vimeo gratuit. Je trouvais la qualité de leur encodage et le look général du site et du lecteur de vidéos me convenait parfaitement (largement plus que YouTube). Les quotas me suffisaient.

Cette solutions présentait cependant deux défauts :

  • Les vidéos ne sont pas visibles sur un iPhone ou iPad (contrainte 3).
  • La seule façon de rendre les vidéos privées était de les protéger avec un mot de passe (contrainte 4).
  • Pour télécharger une vidéo, la personne intéressée doit créer/avoir un compte vimeo.

Deuxième solution : vimeo, compte plus

J’ai donc récemment opté pour une autre solution : payer pour un compte vimeo plus. Cette solution était censée me permettre de régler beaucoup plus finement l’intimité (privacy) de mes vidéos (contrainte 1). De plus, les vidéos d’un compte vimeo plus devenaient accessibles depuis un iPhone ou un iPad (contrainte 3).

Cependant, malgré une plus grande possibilité d’ajustement de l’intimité, je ne suis pas parvenu à une solution qui me convenait.

Le compromis à faire était le suivant :

  • Soit je cache les vidéos du site vimeo et elles sont visibles depuis les domaines que je spécifie. Mais alors, comme elles n’apparaissent plus sur le site vimeo, elles ne sont plus téléchargeables.
  • Soit je les protège par mot de passe, mais du coup, je n’améliore guère la situation par rapport à la solution initiale.
  • Soit je les laisse visibles depuis vimeo. Finalement, seules les personnes qui nous connaissent seraient susceptibles de venir voir mes vidéos, non ? NON !

Voilà ce qu’il s’est passé : lorsque j’ai acheté un compte vimeo plus, j’en ai recréé un complet et j’ai choisi d’y re-transférer toutes mes vidéos (le but : bénéficier d’un encodage à deux passes proposé aux membres vimeo plus). J’ai donc utilisé pour la première fois leur logiciel vimeo uploader (qui est très pratique). Au bout de quelques jours de transfert, la dizaine de gigas de vidéos que j’ai s’est correctement retrouvé sur mon compte vimeo.

Par contre, il y a un réglage que je n’avais pas modifié et toutes les vidéos transférées sur mon compte vimeo étaient publiques par défaut. Et ce que j’ai vu m’a fait froid dans le dos :

Ce compte vimeo venait d’être créé, les vidéos s’y trouvaient depuis à peine quelques jours. Elles n’étaient pas encore en lien avec mes blogs. La seule façon de les voir était donc de “tomber dessus” depuis le site vimeo.

Et bien je trouve effrayant de constater que les vidéos les plus vues sont celles où l’on voit des enfants nus. Si je pouvais encore en douter, je suis convaincu maintenant de deux choses : le net fourmille de pervers; l’intimité de mes vidéos est une contrainte qui n’accepte aucun compromis.

Troisième solution : héberger moi-même

J’ai donc finalement opté pour héberger mes vidéos moi-même, c’est-à-dire chez mon fournisseur (bluehost.com pour ne pas le citer). Comme je n’ai pas de limite d’espace disque ni de transfert de données, ce n’est pas un problème majeur.

J’utilise donc maintenant le lecteur VideoJS (un lecteur libre très complet) et le plugin WordPress qui va avec. C’est un lecteur HTML5 (donc compatible avec l’iPhone et l’iPad), mais capable de se rabattre sur un lecteur flash.

Pour faire fonctionner le tout, voilà comment je procède :

Conversion de la vidéo

C’est actuellement la jungle : chaque navigateur internet support différents formats d’encodage vidéo. Voici un extrait d’une page très complète sur le sujet.

Pour me simplifier la vie, je ne propose la vidéo qu’au format mp4. Pour les navigateurs qui ne supportent pas ce codec, le lecteur se rabattera sur un lecteur flash, ce qui me convient très bien.

Cependant, le format mp4, c’est vague et pour que les vidéos puissent être visionnées sur un iPhone, le format doit être limité et le profil judicieusement choisi.

VideoJS présente d’ailleurs une petite lacune à ce niveau-là : il n’est pas possible de proposer plusieurs encodages mp4, par exemple une première version en bonne résolution pour une visualisation à partir d’un poste fixe, et une autre version en basse résolution pour une visualisation à partir d’un smartphone.

Toujours est-il que j’ai opté pour les réglages d’exportation suivants avec QuickTime :

  • Débit 512 kbits/s (à mon avis un compromis acceptable entre la taille du fichier et la qualité)
  • Taille de l’image : 640×360 (pour du 16:9 évidemment). 640, c’est la taille maximale supportée par un iPhone 3.
  • Profil de base (bouton Options vidéo...)
  • 96 kbps pour l’audio

Téléchargement de la vidéo

Au sein de l’arborescence créée par WordPress, il y a le répertoire wp-content/uploads/. J’y ai créé un répertoire videos/ dans lequel je transfert toutes mes vidéos.

Attention : avec mon hébergeur (peut-être le vôtre aussi), si le nom de fichier contient des accents, il sera introuvable depuis un lien externe.

Intégration dans une page WordPress

Grâce au plugin WordPress pour VideoJS, l’intégratoin au sein d’une page WordPress est très simple. Il suffit de mettre la balise suivante :

[video mp4="http://adresse_blog/wp-content/uploads/videos/video.mp4" preload="false" width="450" height="253"]

Les possibilités de réglages sont bien plus vastes que celles que j’utilise ici : il est possible de définir plusieurs formats de vidéo, de spécifier une image, etc.

En conclusion

Cette dernière solution n’est pas encore parfaite, mais elle me convient mieux que toutes les autres :

  1. La vidéo est privée : elle n’est accessible que depuis le blog. Elle n’apparaît nulle part ailleurs. Si en plus le blog n’est pas référencé, le niveau d’intimité obtenu me convient parfaitement.
  2. En ajoutant un lien vers le fichier mp4, les personnes qui le souhaitent peuvent télécharger la vidéo (sans même avoir un compte vimeo). Elle sera évidemment dans une résolution plus faible que l’originale.
  3. Les vidéos sont visibles sur un iPhone et un iPad. Certes la résolution pourrait être améliorée pour un iPhone 4 et un iPad, mais pour l’instant, c’est une limitation de VideoJS.
  4. Les vidéos sont facilement visionnable, sans avoir à introduire à chaque fois un mot de passe.
  5. C’est moi qui décide de la qualité et du compromis que je souhaite faire.

En tous les cas, c’est un très beau boulot que l’équipe qui développe VideoJS nous met à disposition. En plus, ils sont très actifs sur leur forum de support.

Vimeo, iframe et WordPress

Monday, November 1st, 2010

Maintenant que vimeo supporte l’HTML5 pour ses vidéos, il serait dommage de ne pas utiliser cette nouvelle fonctionnalité pour diffuser des vidéos sur un blogue WordPress, d’autant plus que cela permet de voir ces vidéos sur les iPods, iPhones et autres iPads.

Le problème, c’est que l’intégration de vidéos vimeo se fait au moyen d’une balise <iframe> et que pour des raisons de sécurité, WordPress la supprime.

Pour résoudre ce problème, il faut passer par l’usage d’une extension (plugin). En l’occurence, j’utilise l’extension suivante : insereIframe.

Elle a l’avantage de rendre simple la modification du code d’intégration fourni par vimeo. Par exemple, le code d’intégration suivant :

<iframe
src="http://player.vimeo.com/video/16366056?byline=0&amp;portrait=0"
width="450" height="360" frameborder="0"></iframe>

devient :

[iframe:
src="http://player.vimeo.com/video/16366056?byline=0&amp;portrait=0"
width="450" height="360" frameborder="0"]

Mise à jour

Je n’utilise plus vimeo pour diffuser mes vidéos, mais un lecteur libre, VideoJS.

Votre installation PHP ne dispose pas de MySQL. Extension requise pour WordPress

Friday, February 26th, 2010

Un beau jour, ce message d’erreur (en anglais : Your PHP installation appears to be missing the MySQL extension which is required by WordPress) est apparu à la place de deux blogues WordPress que je gère.

Ces blogues sont situés chez mon hébergeur et se trouvent chacun dans leur propre répertoire.

Le support de mon hébergeur m’a suggéré de désactiver les extensions (plugins) et les thèmes. Pour le faire sans passer par l’interface WordPress (qui n’est bien sûr pas disponible lorsque le blogue est inaccessible), il faut se connecter par FTP au serveur de fichiers et renommer les plugins à désactiver, de sorte que WordPress ne les retrouve plus.

Cette solution n’a pas fonctionné.

Par contre, j’ai découvert en me connectant par FTP que deux fichiers trônaient dans le répertoire racine du blogue : php.ini et fastphp.ini. Je n’avais jamais vu ces fichiers. J’ai tenté de les renommer (plutôt que de les effacer) et bingo ! Mon blogue fonctionne à nouveau !