Je construis mon premier shortcode et pour l'instant ça ne fait pas grand chose, voici mon code:
class Shortcodes {
public static function notifications_shortcode($atts, $content = "") {
return 'notifications foo foo';
}
}
Et j'appelle cela d'une autre classe comme ceci:
class Loader extends MvcPluginLoader {
function activate () {
add_shortcode('ls_notifications', array('Shortcodes', 'notifications_shortcode'));
}
}
Mais pour une raison quelconque, je ne peux pas l'utiliser dans aucun message avec [ls_notifications][/ls_notifications]
et aucune erreur n'est montrée, la seule chose à laquelle je peux penser, c'est que le code abrégé n'a pas été ajouté, mais je ne sais pas pourquoi.
Je sais que cela est peut-être lié à cette question Add_shortcode en tant que classe pour transmettre des arguments à une fonction et à cette page API Shortcode mais il me semble que quelque chose me manque.
Voici un exemple simple utilisant votre code original qui enregistre avec succès le shortcode. Vous devez instancier la classe Loader
, puis appeler sa méthode activate()
.
class Shortcodes {
public static function notifications_shortcode( $atts, $content = "" ) {
return 'notifications foo foo';
}
}
class MvcPluginLoader {
function __construct() {
}
}
class Loader extends MvcPluginLoader {
function __construct() {
parent::__construct();
}
function add_shortcodes() {
add_shortcode( 'ls_notifications', array( 'Shortcodes', 'notifications_shortcode' ) );
}
}
add_action( 'init', 'LoaderInit' );
function LoaderInit() {
$my_loader = new Loader();
$my_loader->add_shortcodes();
}