Blog Web & Design

Problème de backslash dans les articles WordPress ?

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.

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.

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 :

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 exmple 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

Dernière mise à jour le Auteur : Thomas Dufranne

Ce contenu vous a-t-il été utile ?

Merci pour votre avis !

Si vous pensez pouvoir aider d'autres personnes, pensez à partager le contenu

Merci pour votre avis !

Désolé que vous n'ayez pas trouvé votre réponse.

Je vous invite à me poser vos question par commentaire ou par e-mail !

Repondre

This site uses Akismet to reduce spam. Learn how your comment data is processed.