Todos nós já passamos por isso: você compra um tema premium que é realmente ótimo e também compra um plugin incrível (um dos meus, por exemplo!), mas colocar o tema e o plugin juntos simplesmente não funciona. E daí? O plugin ou o tema está com bugs?
Na maioria das vezes, quando isso acontece, é quando você está usando códigos de acesso. Vamos imaginar que você acabou de comprar um plugin para lidar com “testemunhos”. Você lê com atenção a documentação e sabe que para exibir os depoimentos você precisa incluir o seguinte shortcode [testimonials] . Mas quando você faz isso, nada aparece.
A razão pela qual o shortcode não é substituído por depoimentos, é porque seu tema E o plugin definem exatamente o mesmo shortcode.
Como os arquivos de plugins são carregados antes dos arquivos de temas, eles são sobrescritos e não totalmente levados em consideração neste caso.
É por isso que eu queria mostrar um método simples para cancelar o registro do código de acesso do tema e substituí-lo pelo do plugin.
Etapa 1: criar um plug-in simples
Precisamos criar um plugin simples:
<?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
*/
Etapa 2: verifique se o código de acesso existe
Este e o passo mais importante. É onde você verifica a existência de um shortcode. O WordPress possui uma variável global “$shortcode_tags” que armazena a lista de todos os shortcodes registrados. Então, só precisamos passar por essa variável e verificar se o shortcode que estamos procurando faz parte dela.
/**
* 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;
}
Esta é a função genérica que usaremos em uma função mais específica, incluindo o slug de código de acesso a ser procurado. Esta função retorna TRUE se o shortcode existir ou FALSE se não existir.
Etapa 3: remova o código de acesso e registre o novo
A próxima função está usando o rc_asc_shortcode_exists() que acabamos de criar. Ele simplesmente verifica a existência do shortcode, substitui-o se existir ou adiciona o shortcode se ainda não estiver registrado.
/**
* 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’ );
}
}
Etapa 4: definir a nova função de código de acesso
Tudo o que você precisa fazer é definir o conteúdo da função “my_testimonials_shortcode()” e pronto!
/**
* Creates the new shortcode
*
* @since 1.0
*
* @return void
*/
function my_testimonials_function() {
return ‘this replaces the previous shortcode!’;
}
Como você pode ver, o shortcode declarado anteriormente agora é substituído pelo shortcode correto.