Come evitare conflitti di codici brevi tra temi e plugin
Lo abbiamo sperimentato tutti: compri un tema premium che è davvero fantastico e compri anche un fantastico plugin (uno dei miei per esempio!) ma mettere insieme il tema e il plugin semplicemente non funziona affatto. E allora? Il plugin o il tema presentano bug?
La maggior parte delle volte, quando ciò accade, è quando si utilizzano gli shortcode. Immaginiamo che tu abbia appena acquistato un plugin per gestire le "testimonianze". Hai letto attentamente la documentazione e sai che per visualizzare le testimonianze devi includere il seguente shortcode [testimonials]. Ma quando lo fai, non appare nulla.
Il motivo per cui lo shortcode non viene sostituito dalle testimonianze è perché il tuo tema E il plugin definiscono esattamente lo stesso shortcode.
Poiché i file dei plugin vengono caricati prima dei file dei temi, in questo caso vengono sovrascritti e non vengono presi completamente in considerazione.
Ecco perché volevo mostrarti un metodo semplice per annullare la registrazione dello shortcode del tema e sostituirlo con quello del plugin.
Passaggio 1: crea un plug-in semplice
Dobbiamo creare un semplice plugin:
<?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
*/Passaggio 2: controlla se lo shortcode esiste
Questo è il passo più importante. È dove controlli l'esistenza di uno shortcode. WordPress ha una variabile globale “$shortcode_tags” che memorizza l’elenco di tutti gli shortcode registrati. Quindi, dobbiamo solo esaminare questa variabile e verificare se lo shortcode che stiamo cercando ne fa parte.
/**
* 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;
}Questa è la funzione generica che utilizzeremo in una funzione più specifica che include lo slug dello shortcode da cercare. Questa funzione restituisce TRUE se lo shortcode esiste o FALSE in caso contrario.
Passaggio 3: rimuovi lo shortcode e registra quello nuovo
La funzione successiva utilizza rc_asc_shortcode_exists() che abbiamo appena creato. Controlla semplicemente l'esistenza dello shortcode, lo sostituisce se esiste o aggiunge lo shortcode se non è già registrato.
/**
* 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' );
}
}Passaggio 4: definire la nuova funzione shortcode
Tutto quello che devi fare è definire il contenuto della funzione “my_testimonials_shortcode()” e il gioco è fatto!
/**
* Creates the new shortcode
*
* @since 1.0
*
* @return void
*/
function my_testimonials_function() {
return 'this replaces the previous shortcode!';
}Come puoi vedere lo shortcode precedentemente dichiarato è ora sostituito dallo shortcode giusto.
