WordPress

Remplacer les espaces par des espaces insécables avant une double ponctuation

18 Sep 2015 | Wordpress | 7 commentaires

Selon Wikipedia, « Le code typographique français recommande, contrairement à d’autres langues telles que l’anglais, une espace insécable devant les signes de ponctuation double ». Malheureusement ce n’est pas le cas par défaut avec WordPress. Dès lors, si vous avez une phrase qui contient une double ponctuation, vous risquez de voir passer celle-ci à la ligne et ce n’est pas franchement joli.

sans espace insécable

Pour corriger cela, il vous suffit d’ajouter le code suivant dans le fichier functions.php de votre thème :


if ( ! function_exists( ‘cyb_espace’ ) )
{
function cyb_espace( $content )
{
$pattern = ‘/(\s)([!|?|:|;])/i’;
$replacement = ‘ $2’;
$content = preg_replace( $pattern, $replacement, $content );
return $content;
}
add_filter( ‘the_content’, ‘cyb_espace’ );
add_filter( ‘the_title’, ‘cyb_espace’ );
}

Ce code remplace les espaces avant les doubles ponctuations par des espaces insécables.

Le problème, c’est que si vous changez de thème, les espaces simples avant une double ponctuation ne seront plus remplacés par des espaces insécables. Il vaut dès lors mieux placer ce code dans un plugin.

Pour créer ce plugin, rendez-vous dans le dossier wp-content/plugins de WordPress et créez un dossier intitulé cyb-espace (ou le nom que vous voulez, du moment qu’il est en minuscule et qu’il ne contient ni espace, ni accent). Dans ce dossier, créez un fichier du même nom que votre dossier et ajoutez-y la terminaison .php (par exemple cyb-espace.php).

Ouvrez le fichier et collez-y le code suivant :


/**
* Plugin Name: Cyb Espace
* Plugin URI: http://www.cybernaute.ch/espaces-insecables-double-ponctuation/
* Description: Remplace les espaces par des espaces insécables avant une double ponctuation.
* Author: Cybernaute.ch
* Version: 0.1
* Author URI: http://www.cybernaute.ch
* License: GPLv2 or later
*/

if (! function_exists ( ‘add_action’ )) {
header ( ‘Status: 403 Forbidden’ );
header ( ‘HTTP/1.1 403 Forbidden’ );
exit ();
}

if ( ! function_exists( ‘cyb_espace’ ) )
{
function cyb_espace( $content )
{
$pattern = ‘/(\s)([!|?|:|;])/i’;
$replacement = ‘ $2’;
$content = preg_replace( $pattern, $replacement, $content );
return $content;
}
add_filter( ‘the_content’, ‘cyb_espace’ );
add_filter( ‘the_title’, ‘cyb_espace’ );
}

Activez ensuite le plugin dans l’interface d’administration comme n’importe quel autre plugin, via le menu Extensions.

Une fois le plugin activé, consultez vos articles, vous verrez que les espaces simples avant une double ponctuation auront été remplacés par des espaces insécables.

avec espaces insécables

C’est quand-même plus joli non ?

Est-ce que cet article vous a plu ? Avez-vous des questions ou des remarques à son sujet ? Les commentaires ci-dessous sont là pour vous !

7 Commentaires

  1. cabrero2016

    Merci beaucoup. L’utilisation d’un thème enfant étant préconisé par WordPress, j’ai intégré le code dans le functions.php…
    Bonne continuation.

    Réponse
    • Etienne

      Merci cabrero2016 🙂
      C’est une bonne idée d’intégrer le code dans le fichier functions.php d’un thème enfant… jusqu’au jour où vous changerez de thème, dans ce cas il faudra réintégrer le code, c’est pour cela que je préfère intégrer le code dans un plugin dédié, ainsi il n’y a aucun souci lors d’un changement de thème.

      Réponse
  2. dyde

    Bonjour,

    Très bon sujet qui répond à un problème qui me tient à coeur, surtout pour les titres en version responsive. Je m’arrache les cheveux à chaque fois.

    Je voulais savoir si ce script était toujours d’actualité. Je l’ai essayé sur plusieurs sites avec les thèmes Divi ou Extra, et à chaque fois une erreur 500.

    Merci

    Réponse
  3. dyde

    Oups, désolé pour mon message précédent.
    Il s’agissait simplement du format des apostrophes.
    Désolé

    Merci, c’est vraiment très pratique.

    Réponse
    • Etienne

      Bonjour dyde, je suis content de savoir que mon script vous aide ?

      Réponse
  4. Luis

    Bonjour,
    On pourrait élargir la fonction à certains symboles et abréviations, je pense notamment aux monnaies et aux unités de mesures (10 €, 20 km) et pour les heures sous forme 18 h 30, il en faudrait une avant et après le h. Certes, c’est un peu plus complexe à mettre en place, mais ça permettrait à la fois de respecter les règles typographiques et éviter qu’on se retrouve avec les prix ou les horaires divisés d’une ligne sur l’autre.

    Réponse
  5. dominiquemartigne

    formidable !!

    Réponse

Soumettre un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *