Ce code est très largement inspiré de l’excellent plugin wp-french-typo (source : https ://bitbucket.org/master_shiva/wp-french-typo).

Ce que fait ce code :

  • ajoute (ou remplace l’espace fin par) un espace insécable avant  ; : ! ? % et »
  • ajoute (ou remplace l’espace fin par) après « 

Dans le cas des guillemets français, si le texte entre guillemet est encadré par une balise html (par ex : <em> </em>), l’espace qui suit la balise ouvrante et l’espace qui précède la balise fermante sont remplacés par des espaces insécables ET aucun espace est ajouté après le guillemet ouvrant ou avant le guillemet fermant, afin de ne pas dupliquer les espaces.

Voici le code à ajouter dans le fichier functions.php de son thème

 // Add french typo support to theme add_filter( 'the_title', 'djth_french_typo' ) ;
add_filter( 'the_content', 'djth_french_typo' ) ;
function djth_french_typo( $text )
{     
// remove space after <em> and before </em> to avoid double space when &nbsp ; added after '« ' and before ' »'
$prepare_characters = array( '/(« <.*>)\p{Zs}+/u', '/\p{Zs}+(<\/.*> »)/u' ) ;
     $prepare_replacements = array( '$1', '$1' ) ;
    $text = preg_replace( $prepare_characters, $prepare_replacements, $text ) ;
    $static_characters = array( '©', '®' ) ;
    $static_replacements = array( '&#169 ;', '&#174 ;' ) ;
    $dynamic_characters = array( '/(« )\p{Zs} ?/u', '/\p{Zs} ?([?!:;%»])/u', '/(&# ?[a-zA-Z0-9]+)&#160 ; ;/' ) ;
    $dynamic_replacements = array( '$1&#160 ;', '&#160 ;$1', '$1 ;' ) ;
    $textarr = preg_split( '/(<.*>|\[.*\])/Us', $text, -1, PREG_SPLIT_DELIM_CAPTURE ) ;
    $stop = count( $textarr ) ;
    $text = '' ;
    for( $i = 0 ; $i < $stop ; $i++ )
    {
        $curl = $textarr[$i] ;
        if( !empty( $curl ) && '<' != $curl[0] && '[' != $curl[0] )
        {
            $curl = str_replace( $static_characters, $static_replacements, $curl ) ;
            $curl = preg_replace( $dynamic_characters, $dynamic_replacements, $curl ) ;
        }         $text .= $curl ;
    }
    return $text ;
}

Tags :

Classés dans :

Pour aller plus loin