Longue histoire courte; J'écris un plugin en POO. Le constructeur est exécuté, mais le rappel de mon add_action ne s'exécute pas. Je n'arrive pas à savoir pourquoi.
J'ai ajouté des échos à différents endroits pour voir ce qui fonctionne et ce qui ne fonctionne pas. Le constructeur est exécuté, mais la méthode pepare()
ne l’est pas.
WP_DEBUG
est activé, mais je ne reçois aucun avertissement ni aucune erreur.
<?php
/*
Plugin Name: Simplist slider
Description: My description
Version: 1.0
Author: Tim Severien
*/
class SimplistSlider {
public function __construct() {
// something is wrong here
add_action('wp_enqueue_scripts', array($this, 'prepare'));
}
public function prepare() {
// registers
wp_register_style('simplist-slider', plugins_url('/css/simplist-slider.css', __FILE__), array(), '1');
wp_register_script('simplist-slider', plugins_url('/js/simplist-slider.js', __FILE__), array('jquery'), '1');
// enqueues
wp_enqueue_style('simplist-slider');
wp_enqueue_script('simplist-slider');
add_shortcode('slider', array($this, 'shortcode'));
}
public function shortcode($attr, $content = NULL) {
// format content, irrelevant
}
}
$simplist_slider = new SimplistSlider();
?>
J'exécute une nouvelle installation de Wordpress 3.4.2.
Merci d'avance.
modifier
Après avoir modifié le code (vous avez suggéré), j'ai réussi à faire fonctionner le shortcode! Merci!
Le problème est que mon style et mon script ne sont pas chargés. Regardez mon code mis à jour:
<?php
/*
Plugin Name: Simplist slider
Description: My description
Version: 1.0
Author: Tim Severien
*/
class SimplistSlider {
public function __construct() {
// adding shortcode here
add_shortcode('slider', array($this, 'shortcode'));
add_action('wp_enqueue_scripts', array($this, 'registerScripts'));
}
public function registerScripts() {
// registers
wp_register_style('simplist-slider', plugins_url('/css/simplist-slider.css', __FILE__), array(), '1');
wp_register_script('simplist-slider', plugins_url('/js/simplist-slider.js', __FILE__), array('jquery'), '1');
// enqueues
wp_enqueue_style('simplist-slider');
wp_enqueue_script('simplist-slider');
}
public function shortcode($attr, $content = NULL) {
// format content, irrelevant
}
}
function simplist_slider_init() {
$simplist_slider = new SimplistSlider();
}
add_action('plugins_loaded', 'simplist_slider_init');
?>
éditer # 2
facepalm();
J'ai bousillé le thème et supprimé la fonction wp_head();
. Mes sincères excuses! Tout fonctionne comme prévu maintenant.
Votre problème est que vous utilisez le mauvais hook pour ajouter votre shortcode. wp_enqueue_scripts
est exécuté trop tard et ne doit être utilisé que pour ajouter du javascript.
Vous devriez plutôt envisager d'utiliser le hook appelé init
pour ajouter vos codes abrégés. Ce hook est appelé après que le functions.php
du thème actuel ait été inclus, ce qui signifie que vous ne risquez pas de remplacer votre shortcode (à moins que ce ne soit une fonctionnalité souhaitée) par le thème en cas de collision de noms.
Voici une liste des actions disponibles: API de plug-in - Action Reference .
Si vous utilisez le point d'ancrage init
pour les codes courts, mais que vous souhaitez tout de même que le plug-in soit accroché à plugins_loaded
, vous pouvez effectuer quelque chose comme ces modifications:
class SimplistSlider {
public function __construct() {
// Hook shortcodes
add_action('init', array($this, 'registerShortcodes'));
// Hook javascripts
add_action('wp_enqueue_scripts', array($this, 'registerScripts'));
}
// ...
public function registerShortcodes() {
// adding shortcodes here
add_shortcode('slider', array($this, 'shortcode'));
}
// ...
}
Le moyen recommandé pour inclure des plugins est d'utiliser le hook plugins_loaded
.
add_action( 'plugins_loaded', 'simplist_slider_init' );
function simplist_slider_init() {
$simplist_slider = new SimplistSlider();
}
En dehors de cela, si vous activez correctement le plug-in dans l'interface d'administration, vous devriez pouvoir faire écho aux éléments de la fonction ci-dessus, etc.