web-dev-qa-db-fra.com

Ma classe de plugin ne fonctionne pas!

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

  • S'il vous plaît laissez tomber votre possession dans votre main primaire
  • Regarde la paume de ta main
  • Continuez à déplacer votre main vers votre tête jusqu'à ce qu'ils entrent en contact

facepalm();

J'ai bousillé le thème et supprimé la fonction wp_head();. Mes sincères excuses! Tout fonctionne comme prévu maintenant.

1
Tim S.

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'));
    }

    // ...
}
1
hampusn

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.

1
vmassuchetto