web-dev-qa-db-fra.com

Shortcode ne fonctionne pas avec les classes

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.

3
learnercys

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();
}
4
Dave Romsey