Nettoyer et supprimer les shortcodes Divi sans plugin
Qu’est ce que DIVI ?
DIVI est avant tout un thème pour WordPress à destination des particuliers sans connaissance en développement web et qui permet de créer facilement des mises en page élaborées.
Mais DIVI est également un plugin indépendant, un « page builder » (constructeur de page WordPress) qui peut être installé sur n’importe quel thème WordPress pour créer des mises en page rapidement.
Comment fonctionne DIVI ?
Grâce à une interface en drag and drop (glisser déposer) l’utilisateur peut agencer à sa guise les blocs d’une page, contrôler leur taille, leur apparence, les polices de caractère, …
Pour parvenir à ce résultat sans aucune ligne de code, le template ou l’extension DIVI insert des shortcodes contenant toutes les informations nécessaires à l’affichage de vos blocs de mise en page.
[et_pb_section admin_label="section" transparent_background="on" allow_player_pause="off" inner_shadow="off" parallax="on"
parallax_method="off" padding_mobile="off" make_fullwidth="off" use_custom_width="off" width_unit="on" make_equal="off"
use_custom_gutter="off" background_color="#ffffff"][et_pb_text admin_label="Description du cadeau" background_layout="light"
text_orientation="left" header_font="Raleway||||" use_border_color="off" border_color="#ffffff" border_style="solid"
text_text_color="#515151" text_font="Raleway||||" text_line_height="1.6em" header_font_size="35px" text_font_size="26"]Un contenu
ici[/et_pb_text][/et_pb_section]
Pourquoi nettoyer le contenu des ces shortcodes ?
Si vous souhaitez changer de thème ou bien ne plus utiliser l’extension DIVI Page Builder, votre site WordPress ne va plus interpréter ces shortcodes et le contenu (appelé par WordPress « content » et accessible via get_the_content()) de vos pages va ressembler à l’image ci-dessous.
Pourquoi supprimer les shortcodes DIVI sans plugin ?
Il existe de nombreuses solutions avec plugin pour nettoyer les shortcodes DIVI mais aujourd’hui nous utiliserons une solution sans extension. Le faire manuellement a de nombreux avantages :
- vous comprendrez mieux le fonctionnement de WordPress,
- vous éviterez d’installer un énième plugin provoquant des ralentissements,
- c’est gratuit (contrairement aux plugins),
- vous avez le contrôle total de ce que vous voulez supprimer ou garder.
La méthode pour supprimer les shortcodes
Pour réaliser cette opération, il faut:
- modifier le fichier functions.php de votre thème,
- avoir des connaissances en développement WordPress,
- avoir des connaissances en développement PHP.
Ouvrez le fichier functions.php et créez une nouvelle fonction qui contiendra le code permettant de nettoyer tout shortcode DIVI présent dans le contenu de vos pages.
Nous déclencherons cette fonction lorsque nous afficherons la liste des pages dans l’interface d’administration de WordPress.
// on ajoute l'action au moment du chargement de la liste des pages
add_action( 'load-edit.php', 'remove_divi_shortcodes_ornitorinc' );
function remove_divi_shortcodes_ornitorinc() {
}
ATTENTION : Veillez à désactiver la fonction une fois que vous l’avez exécutée sinon elle s’exécutera à chaque fois que vous retournerez sur la liste des pages !
Comme on veut traiter le contenu de toutes les pages du sites (pages et non posts) on ajoute dans la fonction précédemment déclarée :
// on récupère la liste de toutes les pages
$pages = get_pages();
// on fait une boucle dessus pour traiter individuellement chaque page
foreach ( $pages as $k => $page ) {
// on récupère l'ID de la page qui nous permettra de sauvegarder les modifications ensuite
$page_id = $page->ID;
// on récupère le content de chaque page
$content = $page->post_content;
}
Maintenant que l’on a le contenu de toutes les pages, on ajoute dans la fonction l’expression régulière qui nous permet de cibler et supprimer les shortcodes :
// le premier paramètre cible le shortcode
// le deuxième permet de remplacer le shortcode par rien, donc de le supprimer (tout en gardant le contenu compris entre [et_pb]contenu[/et_pb]
// le troisième indique où l'on veut réaliser cette action (donc dans notre contenu)
$content = preg_replace( '/\[\/?et_pb.*?\]/' , '' , $content );
On met à jour le contenu de la page en base de données :
// ID : on indique de quelle page il s'agit avec son ID
// post_content : on indique le nouveau contenu
$my_post = array(
'ID' => $page_id,
'post_content' => $content
);
// On exécute la fonction de mise à jour de la page dans la base de données
wp_update_post( $my_post );
Et le code complet que l’on aura dans le fichier functions.php :
// on ajoute l'action au moment du chargement de la liste des pages
add_action( 'load-edit.php', 'remove_divi_shortcodes_ornitorinc' );
function remove_divi_shortcodes_ornitorinc() {
// on récupère la liste de toutes les pages
$pages = get_pages();
// on fait une boucle dessus pour traiter individuellement chaque page
foreach ( $pages as $k => $page ) {
// on récupère l'ID de la page qui nous permettra de sauvegarder les modifications ensuite
$page_id = $page->ID;
// on récupère le content de chaque page
$content = $page->post_content;
// le premier paramètre de preg_replace cible le shortcode
// le deuxième permet de remplacer le shortcode par rien, donc de le supprimer
// le troisième indique où l'on veut réaliser cette action (donc dans notre contenu)
$content = preg_replace( '/\[\/?et_pb.*?\]/' , '' , $content );
// ID : on indique de quelle page il s'agit avec son ID
// post_content : on indique le nouveau contenu
$my_post = array(
'ID' => $page_id,
'post_content' => $content
);
// On exécute la fonction de mise à jour de la page dans la base de données
wp_update_post( $my_post );
} // fin foreach
}
Alors bien sûr ici on ne fait aucun traitement des erreurs, on ne vérifie pas le contenu, … c’est à vous de le faire !
Si vous voulez faire la même chose pour vos articles, au lieu de lister les pages avec la fonction get_pages(), utilisez get_posts().
Bonjour, merci pour ce super tutoriel. J’ai appliqué le get-posts pour les articles, mais certains ne se sont pas nettoyés, peux-tu m’aider? voici le lien https://guillaume-dev-fengshui.pf5.wpserveur.net/blog/page/4/
merci 🙂
J’espère avoir pu t’aider par mail 🙂
Étant sur Divi avec le builder divi et un Elegant thème.
Mon souhait est de remplacer le divi par le thème GeneratePress.
J’ai activé le nouveau thème ( GeneratePress)
J’ai juste copié collé votre script complet dans le functions.php
et ça marche ! tous les shorts codes divi ont disparu.
J’ai pu aussi nettoyer les articles en remplaçant juste le get_pages() en get_posts() comme vous le proposez et pareil tout est nettoyé !
J’ai supprimé le script et tout est en ordre maintenant avec mon nouveau thème ! Merci infiniment pour votre aide !
Je vous souhaite à tous un très joyeux Noël et de belles fêtes de fin d’année !
Manu
De rien, content que ça puisse aider quelqu’un !
Bonsoir, j’ai essayé, sur une installation locale, rien n’y fait. Est ce que ce code est toujours d’actualité? avec la derniere version de divi?
Merci d’avance.
Bonjour Alex,
est ce qu’une erreur s’affiche ?
Sinon c’est bien possible que le regex de la function preg_replace ne corresponde plus dans les versions plus récentes de DIVI, il faut que tu le compares avec le code présent sur ce tuto et que tu l’adaptes si nécessaire.
A Alex, avez-vous trouvé une solution pour que cela fonctionne avec la dernière version de divi ? Si oui, je suis preneur 😉
Merci