Ricerca nel sito web

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.