Wir alle haben das schon erlebt: Sie kaufen ein wirklich tolles Premium-Theme und Sie kaufen auch ein tolles Plugin (eins von mir zum Beispiel!), aber das Zusammenfügen von Theme und Plugin funktioniert überhaupt nicht. Na und? Hat das Plugin oder das Theme Fehler?
Meistens passiert dies, wenn Sie Shortcodes verwenden. Stellen wir uns vor, Sie haben gerade ein Plugin gekauft, um mit „Testimonials“ umzugehen. Sie haben die Dokumentation sorgfältig gelesen und wissen, dass Sie zum Anzeigen der Testimonials den folgenden Shortcode angeben müssen [testimonials]. Aber wenn Sie dies tun, wird nichts angezeigt.
Der Grund, warum der Shortcode nicht durch Testimonials ersetzt wird, liegt darin, dass Ihr Theme UND das Plugin genau den gleichen Shortcode definieren.
Da Plugins-Dateien vor Themes-Dateien geladen werden, werden sie überschrieben und in diesem Fall nicht vollständig berücksichtigt.
Aus diesem Grund wollte ich Ihnen eine einfache Methode zeigen, um den Theme-Shortcode abzumelden und durch den des Plugins zu ersetzen.
Schritt 1: Erstellen Sie ein einfaches Plugin
Wir müssen ein einfaches Plugin erstellen:
<?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
*/
Schritt 2: Überprüfen Sie, ob der Shortcode vorhanden ist
Dies ist der wichtigste Schritt. Hier prüfen Sie, ob ein Shortcode vorhanden ist. WordPress hat eine globale Variable „$shortcode_tags“, die die Liste aller registrierten Shortcodes speichert. Wir müssen also nur diese Variable durchgehen und prüfen, ob der gesuchte Shortcode dazu gehört.
/**
* 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;
}
Dies ist die generische Funktion, die wir in einer spezifischeren Funktion verwenden werden, einschließlich des zu suchenden Shortcode-Slugs. Diese Funktion gibt TRUE zurück, wenn der Shortcode vorhanden ist, oder FALSE, wenn dies nicht der Fall ist.
Schritt 3: Entfernen Sie den Shortcode und registrieren Sie den neuen
Die nächste Funktion verwendet das gerade erstellte rc_asc_shortcode_exists(). Es prüft einfach, ob der Shortcode vorhanden ist, ersetzt ihn, falls vorhanden, oder fügt den Shortcode hinzu, wenn er noch nicht registriert ist.
/**
* 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' );
}
}
Schritt 4: Definieren Sie die neue Shortcode-Funktion
Sie müssen lediglich den Inhalt der Funktion „my_testimonials_shortcode()“ definieren, und schon sind Sie fertig!
/**
* Creates the new shortcode
*
* @since 1.0
*
* @return void
*/
function my_testimonials_function() {
return 'this replaces the previous shortcode!';
}
Wie Sie sehen, wird der zuvor deklarierte Shortcode jetzt durch den richtigen Shortcode ersetzt.