WordPress: utiliser les shortcodes dans les descriptions de catégories

shortcode-ultimate-4x

Shortcodes ultimate est un plugin wordpress qui permet d’installer un nombre important de shortcodes prédéfinis (Youtube, audio, formatage, …).

J’utilise le champ de description des catégories pour apporter du contenu riche dans les listings d’articles liés à une catégorie. Malheureusement les shortcodes par défaut ne sont pas activés dans ces champs.

Configuration des shortcodes pour les descriptions de catégorie

Pour les activer, il suffit d’ajouter un filtre dans votre fichier functions.php

add_filter('term_description', 'shortcode_unautop');
add_filter('term_description', 'do_shortcode');

 

 

Configuration SPF

Nous avons observé des délais dans la transmission des emails sur notre Google Apps.
Gmail nous a envoyé quelques messages de ce type pour nous prévenir du problème :

This is an automatically generated Delivery Status Notification
 THIS IS A WARNING MESSAGE ONLY.
 YOU DO NOT NEED TO RESEND YOUR MESSAGE.
 Delivery to the following recipient has been delayed:
 charles@fitnext.com
 Message will be retried for 1 more day(s)
 Technical details of temporary failure:
 DNS Error: 92610055 DNS type 'mx' lookup of fitnext.com responded with code SERVFAIL

Nous n’avons pas changé récemment quoi que ce soit dans la configuration DNS/MX, donc c’était assez étrange de retrouver subitement ce problème.

Vérification de la configuration MX

Google propose un outil très pratique pour vérifier votre configuration MX, la nôtre n’était pas au top sur tous les points. L’aide en ligne Google explique clairement comment valider chaque point.

L’outil propose une analyse de ce type :

Capture d’écran 2016-06-14 à 09.50.05

J’ai appliqué les différents conseils proposés par Google et tout semble rentré dans l’ordre!

Je suis aussi tombé sur cette page qui permet vérifier les entrées SPF d’un domaine.

Vérification des en-tête des messages

Aussi Google propose un outil d’analyse d’en-tête de message qui produit une sortie du  type :

email-headers-checking-tool

On voit bien notre problème avec la livraison d’un message après 18h…

 

Nginx: redirections en masse

Lors de la migration d’un blog, j’ai eu besoin de gérer des redirections permanentes (301) pour un grand nombre d’urls, entre 600 et 700 pour être précis. Malheureusement ces redirections ne peuvent être factorisées avec des patterns, ce sont que des urls uniques.

Pour ne pas charger la configuration de votre vhost dans nginx, vous pouvez utiliser le mot clé include pour stocker vos redirections dans un fichier à part.

Dans mon cas, la configuration nginx ressemble alors à ça :

  • /etc/nginx/site-enabled/v3.conf
server {
    listen 443 ssl;
    [...]
    include /etc/nginx/conf.d/v3.redirects
    [...]
    location / {
    [...]
    }
}

 

  • /etc/nginx/conf.d/v3.redirects
[...]
rewrite ^/le-stress(.*) /conseils/relaxation/le-stress$1 permanent;
[...]

Le fichier v3.redirects a été généré avec un script, il fait 625 lignes.

Cela fonctionne très bien pour un nombre limité de redirects. Si vraiment vous deviez gérer un nombre important de redirections, regardez du côté de lua et redis.

 

Android: centrer un texte horizontalement et verticalement dans un TextView

Par défaut, le texte contenu dans un TextView est aligné en haut à gauche.

android-centrer-textview

Pour le centrer, que ce soit verticalement et/ou horizontalement, il faut utiliser la propriété gravity.

Centrer verticalement

android-centrer-textview-vertical

Dans le xml, cela se traduit par la propriété suivante :

android:gravity="center_vertical"

Centrer verticalement et horizontalement

android-centrer-textview-vertical-horizontal

Dans le xml, cela se traduit par la propriété suivante :

android:gravity="center"

Pour le faire directement dans le code :

MyTextView.setGravity(Gravity.CENTER)

Nginx: redirection permanente

Vous pouvez avoir besoin de configurer une redirection permanente avec nginx pour forcer un domaine sur le www ou sur le https.

Configuration nginx

Par exemple pour forcer une redirection vers https pour le domaine cuisinez.info, la configuration nginx s’effectue alors comme suit :

server {
    server_name cuisinez.info;
    rewrite ^(.*)$ https://www.cuisinez.info$1 permanent;
}

server {
    server_name www.cuisinez.info;
    rewrite ^(.*)$ https://www.cuisinez.info$1 permanent;
}

Test du résultat avec curl :

$ curl -I http://www.cuisinez.info
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Tue, 10 May 2016 07:41:48 GMT
Content-Type: text/html
Content-Length: 178
Connection: keep-alive
Keep-Alive: timeout=20
Location: https://www.cuisinez.info/

 

Ajouter une bordure à une image avec ImageMagick

Imagemagick bordure

Pour les besoins de la création d’un PDF contenant un ensemble de screenshots, il fallait que j’ajoute une petite bordure sur chaque screenshot afin de bien délimiter les images sur fond blanc.

Convert permet de faire cela facilement avec l’option -border et -bordercolor.

Pour traiter un ensemble d’images, utiliser simplement une boucle for avec bash.

for file in `ls *.png`; do 
    convert ${file} -bordercolor "#dfdfdf" -border 1x1 ${file}; 
done
  • -bordercolor définit la couleur de votre bordure
  • -border définit la taille de la bordure, ici 1 pixel de chaque côté

 

Passer un wordpress dans un git

Le but de cette procédure est de pouvoir suivre plus facilement les changements apportés à wordpress et d’utiliser les outils usuels de déploiement.

Le dépôt nous permet aussi de tester en amont les mises à jour wordpress et des extensions.

 

Initialiser le dépôt git

$ cd wordpress
$ git init

Ajouter un .gitignore

La configuration ne va pas être enregistrée dans le git, on ignore donc le fichier de config.

$ cat .gitignore
wp-config.php

 

Ajouter tous les fichiers de wordpress

$ git add -A

Enregistrer le commit

$ git commit -m "initial commit"

 

Configurer le dépôt

$ git remote add origin git@gitou.com:charlybr/wordpress.git

Soumettre le code sur le dépôt distant

$ git push -u origin master

Android: simuler une position GPS dans l’émulateur

Par défaut, lorsque vous testez la geoloc sous android dans l’émulateur, en tout cas lors de mes différents tests, la position n’est pas disponible.

Il est possible de définir rapidement une position en se connectant en telnet sur l’émulateur accessible sur le port 5554

La commande à utiliser est : geo fix <long> <lat>

Exemple avec un telnet sur l’émulateur android

$ telnet 127.0.0.1 5554
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
Android Console: type 'help' for a list of commands
OK
geo fix 4.035744600000044 48.909501899999995

 

geoloc-android-simulateur

Les coordonnées de test utilisées ici correspondent au village de Voipreux dans la Marne.

 

Complétion bash sur OSX avec brew

La complétion ça change la vie.

Bash completion est un projet qui vous permet d’ajouter de la complétion au shell pour tout un tas de programmes ou d’environnements comme la commande scp par exemple.

C’est très pratique lorsque vous faites des copies distantes via scp pour compléter les chemins distants.

Installation sur osx avec brew

$ brew install bash-completion

Il faut ensuite activer les fonctions en ajoutant les lignes suivantes à votre .bash_profile

if [ -f $(brew --prefix)/etc/bash_completion ]; then
   . $(brew --prefix)/etc/bash_completion
fi

Installer le support de postgresql sur PHP avec brew sur OSX Yosemite

support postgresql pour PHP sur OSX avec brew

J’utilise Postgresql pour certains projets et mon environnement de travail est OSX (Yosemite).

Pour activer le support de postgresql sur PHP avec brew, il faut réinstaller (recompiler) PHP avec la bonne option : –with-postgresql

Installer le suppport de postgresql pour PHP

 

$ brew reinstall php70 --with-postgresql

Idem avec une autre version de php :

$ brew unlink php70
[...]
$ brew link php56
[...]
$ brew reinstall php56 --with-postgresql

 

Installer le driver pdo

La suite de cet article concerne seulement une installation qui aurait le support postgresql mais pas le driver pdo mais en général, brew installe les deux.

Le driver pdo-pgsql est disponible en standard sur brew.

$ brew search pgsql
homebrew/php/php54-pdo-pgsql
homebrew/php/php55-pdo-pgsql
homebrew/php/php56-pdo-pgsql
homebrew/php/php70-pdo-pgsql

 

Installer le driver pdo-pgsql avec PHP7

Pour l’installer :

$ brew install php70-pdo-pgsql
==> Installing php70-pdo-pgsql from homebrew/php
==> Installing dependencies for homebrew/php/php70-pdo-pgsql: postgresql
==> Installing homebrew/php/php70-pdo-pgsql dependency: postgresql
==> Downloading https://homebrew.bintray.com/bottles/postgresql-9.5.1.yosemite.bottle.tar.gz
######################################################################## 100,0%
==> Pouring postgresql-9.5.1.yosemite.bottle.tar.gz
==> Caveats
If builds of PostgreSQL 9 are failing and you have version 8.x installed,
you may need to remove the previous version first. See:
 https://github.com/Homebrew/homebrew/issues/2510

To migrate existing data from a previous major version (pre-9.0) of PostgreSQL, see:
 http://www.postgresql.org/docs/9.5/static/upgrading.html

To migrate existing data from a previous minor version (9.0-9.4) of PosgresSQL, see:
 http://www.postgresql.org/docs/9.5/static/pgupgrade.html

 You will need your previous PostgreSQL installation from brew to perform `pg_upgrade`.
 Do not run `brew cleanup postgresql` until you have performed the migration.

To reload postgresql after an upgrade:
 launchctl unload ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
 launchctl load ~/Library/LaunchAgents/homebrew.mxcl.postgresql.plist
Or, if you don't want/need launchctl, you can just run:
 postgres -D /usr/local/var/postgres
==> Summary
🍺 /usr/local/Cellar/postgresql/9.5.1: 3,118 files, 35M
==> Installing homebrew/php/php70-pdo-pgsql
==> Downloading https://php.net/get/php-7.0.4.tar.bz2/from/this/mirror
==> Downloading from https://secure.php.net/distributions/php-7.0.4.tar.bz2
######################################################################## 100,0%
==> /usr/local/opt/php70/bin/phpize
==> ./configure --prefix=/usr/local/Cellar/php70-pdo-pgsql/7.0.4 --with-pdo-pgsql=/usr/local/Cellar/postgresql/9.5.1 --with-php-config=/usr/local/opt/php70/bin/php-config
==> make
==> Caveats
To finish installing pdo_pgsql for PHP 7.0:
 * /usr/local/etc/php/7.0/conf.d/ext-pdo_pgsql.ini was created,
 do not forget to remove it upon extension removal.
 * Validate installation via one of the following methods:
 *
 * Using PHP from a webserver:
 * - Restart your webserver.
 * - Write a PHP page that calls "phpinfo();"
 * - Load it in a browser and look for the info on the pdo_pgsql module.
 * - If you see it, you have been successful!
 *
 * Using PHP from the command line:
 * - Run `php -i "(command-line 'phpinfo()')"`
 * - Look for the info on the pdo_pgsql module.
 * - If you see it, you have been successful!
==> Summary
🍺 /usr/local/Cellar/php70-pdo-pgsql/7.0.4: 5 files, 88.6K, built in 51 seconds

Vérifier que le module est bien présent :

 

$ php -m | grep pgsql
pdo_pgsql

Activer le driver avec Apache

Pour l’activer avec Apache si vous utilisez php-fpm, il faut relancer php-fpm :

$ launchctl unload -w ~/Library/LaunchAgents/homebrew.mxcl.php70.plist
launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.php70.plist

Sinon avec brew services :

$ brew services restart php70
Stopping `php70`... (might take a while)
==> Successfully stopped `php70` (label: homebrew.mxcl.php70)
==> Successfully started `php70` (label: homebrew.mxcl.php70)

Vérifier la présence du driver avec phpinfo() :

 

osx-brew-php70-pdo-pgsql

 

Activer le driver avec plusieurs version de PHP

Si vous utilisez plusieurs versions de PHP en même temps, il va falloir installer le driver pour chaque version.
Par exemple, PHP7 est votre version active mais vous avez aussi php56. Il faut rendre active la version 56, et installer le driver puis rendre active PHP7 à nouveau.

$ brew unlink php70
Unlinking /usr/local/Cellar/php70/7.0.4... 18 symlinks removed
$ brew link php56
Linking /usr/local/Cellar/php56/5.6.19... 17 symlinks created
$ php -v
PHP 5.6.19 (cli) (built: Mar 10 2016 10:09:40)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
$ brew install php56-pdo-pgsql
==> Installing php56-pdo-pgsql from homebrew/php
==> Downloading https://php.net/get/php-5.6.19.tar.bz2/from/this/mirror
==> Downloading from https://secure.php.net/distributions/php-5.6.19.tar.bz2
######################################################################## 100,0%
==> /usr/local/opt/php56/bin/phpize
==> ./configure --prefix=/usr/local/Cellar/php56-pdo-pgsql/5.6.19 --with-pdo-pgsql=/usr/local/Cellar/postgresql/9.5.1 --with-php-config=/usr/local/opt/php56/bin/php-config
==> make
==> Caveats
To finish installing pdo_pgsql for PHP 5.6:
  * /usr/local/etc/php/5.6/conf.d/ext-pdo_pgsql.ini was created,
    do not forget to remove it upon extension removal.
  * Validate installation via one of the following methods:
  *
  * Using PHP from a webserver:
  * - Restart your webserver.
  * - Write a PHP page that calls "phpinfo();"
  * - Load it in a browser and look for the info on the pdo_pgsql module.
  * - If you see it, you have been successful!
  *
  * Using PHP from the command line:
  * - Run `php -i "(command-line 'phpinfo()')"`
  * - Look for the info on the pdo_pgsql module.
  * - If you see it, you have been successful!
==> Summary
🍺  /usr/local/Cellar/php56-pdo-pgsql/5.6.19: 5 files, 552.6K, built in 47 seconds
php -i | grep pgsql
Additional .ini files parsed => /usr/local/etc/php/5.6/conf.d/ext-pdo_pgsql.ini
PDO drivers => mysql, odbc, sqlite, pgsql
pdo_pgsql

Redémarrer php-fpm pour prendre en compte le nouveau driver :

$ brew services restart php56
Stopping `php56`... (might take a while)
==> Successfully stopped `php56` (label: homebrew.mxcl.php56)
==> Successfully started `php56` (label: homebrew.mxcl.php56)

Si vous voulez php7 par défaut, il faut le réactiver :

$ brew unlink php56
Unlinking /usr/local/Cellar/php56/5.6.19... 18 symlinks removed

$ brew link php70
Linking /usr/local/Cellar/php70/7.0.4... 17 symlinks created

$ php -v
PHP 7.0.4 (cli) (built: Mar 10 2016 10:26:32) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies