Bonjour,

Il y a un peu plus d’un mois j’ai enfin lancé mon projet de site d’énigmes, les-enigmes.com.
J’ai pour cela appliqué la règle que si l’on attend que tout soit parfait on ne fait jamais rien.
C’est pourquoi il n’est pas forcément parfait et des trucs bizarres ou non finis peuvent apparaître ici ou là.

Mais une autre chose qui m’a longtemps posée problème et qui me gênait pour commencer c’était de trouver un moyen pour que si j’avais à modifier le système de membre avec les réponses cachées, cela soit possible sans avoir à modifier manuellement tous les articles.
En effet le principe initial de les-enigmes.com, c’est une publication quotidienne. Bon il y a parfois des trous que j’essaye de combler mais le principe c’est ça.
Du coup après mettons un an je vais me retrouver avec environ 360 articles tous comportant un même élément pour la gestion de l’espace membre.

J’avais trouvé un système mais qui nécessitait des règles de rédaction trop contraignantes.
Du coup j’ai tout de même lancé l’affaire sans avoir de réelle solution.

mais il y a peu j’ai trouvé une solution toute simple !

J’ai au préalable posé des questions, fait de nombreuses recherches mais rien n’a abouti.

Pour préciser les choses dans chaque article il y a d’abord l’énigme, puis la réponse qui est cachée, il faut être identifié en tant que membre pour la voir, du coup j’ai le code suivant :
« membership-content »
Réponse à l’énigme
« other »
Message pour se connecter ou s’inscrire. Pour ce dernier j’utilise un shortcode personnalisé ce qui me permet de modifier le texte de tous les articles en une seule fois.
« /membership-content »

Avec des crochets à la place des guillemets mais je ne pouvais pas mettre des crochets ici car le plugin est également actif sur ce site.

J’utilise pour mon espace membre un assez bon plugin WordPress Membership Manager.

Mais si jamais un jour je décide soit de supprimer les réponses cachées pour les rendre visibles à tous.
Soi je décide de changer de système.

Comment vais-je faire pour modifier tous mes articles ?

Et bien en fait c’est très simple.

WordPress fonctionne essentiellement avec une base de données. Or il est tout à fait possible de récupérer la table contenant le texte de tous les articles et de la modifier pour la remettre ensuite en place.

A priori il y aurait même deux solutions :

1 On va dans PhpMyAdmin et on importe la table des articles. Puis on l’ouvre avec un logiciel adéquat, j’utilise pour ma part Smultron 6. Et on utilise la fonction rechercher/remplacer du logiciel, cette fonction étant présente dans la plupart des logiciels d’édition de texte ou de code.
Je remplace alors tous les anciens codes par le nouveau et je n’ai plus qu’à enregistrer et à écraser l’ancienne table des articles avec la nouvelle.
Bon pour le moment c’est de la théorie je n’ai pas encore fait le test. Mais franchement je ne vois pas pourquoi cela ne-fonctionnerait-il pas.

On devrait même pouvoir faire cela directement dans phpmyadmin mais je préfère l’interface en local.

2 On peut aussi récupérer un fichier xml contenant tous les articles depuis le tableau de bord WordPress du site, via la fonction exporter du menu outils.
Et là on procède comme pour la table SQL, on ouvre avec un logiciel d’édition de code et on recherche/remplace.
ensuite on supprime l’intégralité des articles du sites et on importe les articles en utilisant le fichier xml modifié.
Et voilà le tour devrait être joué.

Je pense par contre qu’il est très important surtout avec le sql de faire attention à ce que l’encodage du fichier ne soit pas modifié au moment de l’enregistrement, au risque de se retrouver avec de gros problèmes au niveau des accents notamment.

Je n’ai pas encore eu l’énergie de tester ces solutions mais je suis pratiquement certain qu’au moins l’une d’entre elles fonctionnera le moment venu.

Et puis si jamais des erreurs surviennent lors de la procédure on aura eu soin de faire une sauvegarde complète du site avant modification pour pouvoir le remettre en place.

Ajout du sam. 31 mai 2014 :

J’ai eu l’occasion de faire un test grandeur nature aujourd’hui même.

J’ai utilisé la solution 2, cela a parfaitement fonctionné.

Ce que je voulais faire c’est ajouté un saut de page avant la réponse à l’énigme sur mon site d’énigmes.

Alors par contre j’ai constaté plusieurs choses :

  • J’utilise l’excellent logiciel MarsEdit pour publier mes articles, or dans MarsEdit même après rafraichissement le texte de certains articles n’est pas visible en édition. J’ai bien l’extrait toutes les infos mais pas la partie contenu.
  • Quand on veut éditer un article tout le code html est visible, ce n’est pas forcément très gênant, mais il faut faire un minimum attention.

Si je constate d’autres particularités ou si j’essaye la solution 1 je ne manquerais pas de faire un nouvel ajout ici.

Deuxième ajout du sam. 31 mai 2014

Comme la solution 2 ne me satisfaisait pas totalement en raison des problèmes abordés plus haut et qui dénotaient un potentiel problème, j’ai décidé de restaurer mon site avec la sauvegarde que j’avais été bien inspiré de faire au préalable.

en passant, c’est un pré-requis indispensable de faire une sauvegarde de votre site avant ce genre de manipulations hasardeuses.
Par sauvegarde j’entends une sauvegarde de la base MYSQL, on trouve des plugins qui permettent de faire cela, sinon la plupart des bons hébergeurs permettent facilement cela.
Si votre hébergeur ne vous permet pas de faire une sauvegarde totale ou partielle des éléments composants votre site, changez d’hébergeur !

J’ai donc restauré ma base MYSQL et tenté la solution 1.

Je suis donc aller dans la table des articles. Pour cela j’ai utilisé PhpMyadmin, encore une fois si vous n’avez pas accès à cet outil, changez d’hébergeur.
Je suis allé ensuite dans la base de mon site puis dans la table wp_posts qui chez moi ne s’appelle pas comme ça car si on veut sécuriser son site il ne faut pas utiliser le préfixe wp_ pour les tables. Pour des raisons évidentes de sécurité je ne vais pas donner ici mon véritable préfixe.
Dans cette table j’ai utilisé la fonction exporter pour obtenir un fichier sql.

Je l’ai alors ouvert avec mon éditeur de code favori et j’ai fait la commande rechercher et remplacer ce qui a pris quelques petites secondes.
Et j’ai enregistré le fichier modifié.

Ensuite je suis retourné dans mon PhpMyadmin.
Dans la base j’ai vidé la table wp_posts et une fois retourné dans cette dernière j’ai importé mon fichier sql modifié.

Et voilà le tour était joué !!!

Et là aucun problème, j’ai retrouvé mes articles tout pareil qu’avant avec le saut de page en plus. Dans MarsEdit tout est OK, quand je vais édité un article j’ai toujours mon Markdown affiché et non pas toutes les balises html.

Juste petit élément intriguant, à l’exportation il était affiché que ma table contenait 363 lignes et une fois réimportée je n’avais plus que 273 lignes.
Mais d’ailleurs c’est bizarre le nombre de lignes dans la table wp_posts semble se modifier sans qu’aucune modification ne soit faite sur le site.

Donc à priori la solution 1 est la meilleure? Je n’ai constaté aucun souci. Bien évidemment je ferai un retour ici si jamais c’est le cas.

Bon hébergeur

Personnellement je suis chez likuid (anciennement :Maven Hosting que je vous recommande chaleureusement.