Cet article va, je l’espère, vous permettre de résoudre les problèmes de slash (/) indésirables ajoutés sur vos pages WordPress.
Recemment sur un projet de création de site WooCommerce, j’ai rencontré un problème : Lors de l’enregistrement de mes articles ( ou des fiches produits dans mon cas ), unz barre oblique inversée indésirable (ou backslash) venait s’ajouter lors de la mise à jour de l’article, après chaque apostrophe.
Besoin d’un spécialiste WordPress pour votre projet ? Contactez-moi
Pourquoi un backslash apparait ?
Si vous ne le savez pas, pour faire simple, en PHP l’apostrophe ou la guillemet est utilisée notamment pour encadrer des valeurs de variables, par exemple :$prenom = 'Thomas';
or si on souhaite utiliser une apostrope, il est necessaire d’utiliser un backslash exemple :$prenom = 'L\'enfant Thomas';
on peut aussi utiliser des guillemets :$prenom = "L'enfant Thomas";
Une question d’apostrophe
en effet l’apostrophe que nous utilisons sur nos claviers, n’est pas l’apostrophe typgraphique qu’il faudrait utiliser.
Le problème est que l’apostrophe de notre clavier coupe la chaine de caractère PHP.
C’est d’ailleurs pour palier à ça, que WordPress ajoute automatiquement un \backslash ( Alt Gr + _ sur Windows ) dans la chaine de caractère au moment de l’enegistrement de l’article.
Besoin d’un spécialiste WordPress pour votre projet ? Contactez-moi
Solution 1 : utiliser des guillements
A la place d’utiliser l’apostrophe de votre clavier ( touche du chiffre 4 sur Windows ), il est donc possible d’utiliser manuellement le caractère unicode ’
permettant de saisir un guillemet simple fermant (ou guillemet-apostrophe) même si on ne dispose pas du bouton sur son clavier :
’
Notez que le caractère unicode du slash inversé est : U+005C
Solution 2 : Remplacer « à la volée » avec PHP
Afin d’automatiser cela il est possible de retravailler le texte afin de remplacer la mauvaise apostrophe par la bonne
$contenu = "L'apostrophe de notre clavier appelle par défaut un signe dont le dessin est un trait vertical et symétrique. Ce n'est hélas pas celui qu'il nous faut la plupart du temps. Ce signe s'appelle « apostrophe dactylographique », ou « apostrophe droite »."; // Rechercher, remplacer : $trouver_slash = array("'","\\","\'\'","’’"); $remplacer_slash = array("’","","’","’"); // Retravailler le contenu : $noslash_contenu = str_replace($trouver_slash, $remplacer_slash, $contenu); return $noslash_contenu;
Pourquoi ne pas utiliser stripslash tout simplement ?
Sachez qu’il est tout à fait possible d’utiliser la fonction PHP Stripslash, mais attention il faut que l’option magic_quotes_gpc
de votre PHP soit activée.
Dans mon test, j’ai eu à ajouter en plus un rtrim
permettant de supprimer des caractères en fin de chaine, ce qui nous donne le code suivant
$noslash_contenu = rtrim(stripcslashes( $contenu ), '\\'); return $noslash_contenu;
Retirer les backslashes dans un attribut post meta sur WooCommerce
Voici un exemple de code à utiliser pour les attribut personnalisé ( Nommé ici « ingrédients ») sur une page produit de WooCommerce ;
// Save WYSIWYG field value from product admin pages add_action( 'woocommerce_admin_process_product_object', 'wc2585_save_product_custom_wysiwyg_field', 10, 1 ); function wc2585_save_product_custom_wysiwyg_field( $product ) { if ( isset( $_POST['_ingredients'] ) ) $find_slash = array("'","\\","\'\'","’’"); $replace_slash = array("’","","’","’"); // Récupération du contenu du post meta : $content = $_POST['_ingredients']; // Modification du contenu du post meta : $noslash_content = str_replace($find_slash, $replace_slash, $content); // Mise à jour du contenu du post meta : $product->update_meta_data( '_ingredients', wp_kses_post( $noslash_content ) ); }
Ce code est à ajouter au fichier functions.php de votre thème WooCommerce ou bien dans un plugin personnalisé.
Sources : « Des textes plus élégants avec les apostrophes typographiques » – Bruno Bernard