Recherche de site Web

Comment éviter les conflits de codes courts de thèmes et de plugins


Nous avons tous vécu cela : vous achetez un thème premium qui est vraiment génial, et vous achetez également un plugin génial (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 présente-t-il des bugs ?

La plupart du temps, lorsque cela se produit, c’est lorsque vous utilisez des codes courts. 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 lorsque 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 des plugins sont chargés avant les fichiers des thèmes, ils sont écrasés et ne sont pas entièrement pris en compte dans ce cas.

C’est pourquoi j’ai voulu 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 possède une variable globale « $shortcode_tags » qui stocke la liste de tous les shortcodes enregistrés. Il 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;

}

Il s’agit de la fonction générique que nous utiliserons dans une fonction plus spécifique incluant le slug de shortcode à rechercher. Cette fonction renvoie TRUE si le shortcode existe, ou FALSE s'il n'existe pas.

É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 constater, le shortcode précédemment déclaré est désormais remplacé par le bon shortcode.