Nous avons tous vécu cela : vous achetez un thème premium qui est vraiment génial, et vous achetez également un plugin incroyable (un des miens par exemple !) mais mettre le thème et le plugin ensemble ne fonctionne tout simplement pas du tout. Et alors? Le plugin ou le thème a-t-il des bugs ?
La plupart du temps, lorsque cela se produit, c’est lorsque vous utilisez des shortcodes. Imaginons que vous veniez d’acheter un plugin pour gérer les « témoignages ». Vous lisez attentivement la documentation et vous savez que pour afficher les témoignages vous devez inclure le shortcode suivant [testimonials]. Mais quand vous le faites, rien n’apparaît.
La raison pour laquelle le shortcode n’est pas remplacé par des témoignages est que votre thème ET le plugin définissent exactement le même shortcode.
Comme les fichiers de plugins sont chargés avant les fichiers de thèmes, ils sont écrasés et ne sont pas entièrement pris en compte dans ce cas.
C’est pourquoi je voulais vous montrer une méthode simple pour désenregistrer le shortcode du thème et le remplacer par celui du plugin.
Étape 1 : créer un plugin simple
Nous devons créer un plugin simple :
<?php
/*
Plugin Name: Avoid Shortcodes conflicts
Plugin URL: http://remicorson.com
Description: A little plugin to avoid conflicts bewteen shortcodes
Version: 1.0
Author: Remi Corson
Author URI: http://remicorson.com
Contributors: corsonr
Text Domain: rc_asc
Domain Path: languages
*/
Étape 2 : Vérifiez si le shortcode existe
Ceci est l’étape la plus importante. C’est là que vous vérifiez l’existence d’un shortcode. WordPress a une variable globale « $shortcode_tags » qui stocke la liste de tous les shortcodes enregistrés. Il nous suffit donc de parcourir cette variable et de vérifier si le shortcode que nous recherchons en fait partie.
/**
* Check if a shortcode is already registered
*
* @since 1.0
*
* @param $shortcode string The shortcode slug to test
*
* @return void
*/
function rc_asc_shortcode_exists( $shortcode = false ) {
global $shortcode_tags;
//echo '<pre>'; var_dump($shortcode_tags); echo '</pre>';
if ( ! $shortcode )
return false;
if ( array_key_exists( $shortcode, $shortcode_tags ) )
return true;
return false;
}
C’est la fonction générique que nous utiliserons dans une fonction plus spécifique incluant le slug shortcode à rechercher. Cette fonction renvoie TRUE si le shortcode existe, ou FALSE si ce n’est pas le cas.
Étape 3: Supprimez le shortcode et enregistrez le nouveau
La fonction suivante utilise le rc_asc_shortcode_exists() que nous venons de créer. Il vérifie simplement l’existence du shortcode, le remplace s’il existe ou ajoute le shortcode s’il n’est pas déjà enregistré.
/**
* Check if a shortcode is already registered and replace it
*
* @since 1.0
*
* @return void
*/
function rc_asc_replace_shortcode() {
$shortcode = 'testimonials';
if( rc_asc_shortcode_exists( $shortcode ) ) {
remove_shortcode( $shortcode );
add_shortcode( $shortcode, 'my_testimonials_function' );
} else {
add_shortcode( $shortcode, 'my_testimonials_function' );
}
}
Étape 4 : Définir la nouvelle fonction de shortcode
Il ne vous reste plus qu’à définir le contenu de la fonction « my_testimonials_shortcode() », et le tour est joué !
/**
* Creates the new shortcode
*
* @since 1.0
*
* @return void
*/
function my_testimonials_function() {
return 'this replaces the previous shortcode!';
}
Comme vous pouvez le voir, le shortcode précédemment déclaré est maintenant remplacé par le bon shortcode.