WordPress wp_dequeue_script supprime tous les autres scripts

Publié par Jean-Michel le

Je souhaite remplacer la fonction dans le thème enfant pour supprimer des scripts spécifiques, qui sont définis dans une classe dans le thème parent.

Thème parentfunctions.php

class Theme_Assets extends Theme_Base {

    /**
     * Hold data for wa_theme for frontend
     * @var array
     */
    private static $theme_json = array();

    /**
     * [__construct description]
     * @method __construct
     */
    public function __construct() {

        // Frontend
        $this->add_action( 'wp_enqueue_scripts', 'dequeue', 2 );
        $this->add_action( 'wp_enqueue_scripts', 'register' );
        $this->add_action( 'wp_enqueue_scripts', 'enqueue' );

        self::add_config( 'uris', array(
            'ajax'    => admin_url('admin-ajax.php', 'relative')
        ));
    }

    /**
     * Unregister Scripts and Styles
     * @method dequeue
     * @return [type]  [description]
     */
    public function dequeue() {

    }

    /**
     * Register Scripts and Styles
     * @method register
     * @return [type]   [description]
     */
    public function register() {

        $this->script( 'bootstrap', $this->get_vendor_uri( 'bootstrap/js/bootstrap.min.js' ), array( 'jquery' ) );
        $this->script( 'intersection-observer', $this->get_vendor_uri( 'intersection-observer.js' ), array( 'jquery' ) );
        $this->script( 'jquery-lazyload', $this->get_vendor_uri( 'lazyload.min.js' ), array( 'jquery' ) );
        $this->script( 'imagesloaded', $this->get_vendor_uri( 'imagesloaded.pkgd.min.js' ), array( 'jquery' ) );
        $this->script( 'jquery-vivus', $this->get_vendor_uri( 'vivus.min.js' ), array( 'jquery' ) );
        $this->script( 'splittext', $this->get_vendor_uri( 'greensock/utils/SplitText.min.js' ), array( 'jquery' ) );
        $this->script( 'scrollmagic', $this->get_vendor_uri( 'scrollmagic/ScrollMagic.min.js' ), array( 'jquery' ) );
        $this->script( 'jquery-tinycolor', $this->get_vendor_uri( 'tinycolor-min.js' ), array( 'jquery' ) );

        $deps = array(
            'bootstrap',
            'intersection-observer',
            'imagesloaded',
            'scrollmagic',
        );

        // LazyLoad
        $enable_lazyload = theme_helper()->get_option( 'enable-lazy-load' );
        if( 'on' === $enable_lazyload ) {
            array_push( $deps,
                'jquery-lazyload'
            );
        }
        // Header Js
        $enable_header = theme_helper()->get_option( 'header-enable-switch' );
        if( 'on' === $enable_header ) {
            array_push( $deps,
                'jquery-tinycolor'
            );
        }

        if( is_page() ) {
            array_push( $deps,
                'splittext',
                'jquery-tinycolor'
            );
        }
    }

    /**
     * Enqueue Scripts and Styles
     * @method enqueue
     * @return [type]  [description]
     */
    public function enqueue() {

        if ( is_singular() && comments_open() && get_option( 'thread_comments' ) ) {
            wp_enqueue_script( 'comment-reply' );
        }
    }

    // Register Helpers ----------------------------------------------------------
    public function script( $handle, $src, $deps = null, $in_footer = true, $ver = null ) {
        wp_register_script( $handle, $src, $deps, $ver, $in_footer);
    }

    public function style( $handle, $src, $deps = null, $ver = null, $media = 'all' ) {
        wp_register_style( $handle, $src, $deps, $ver, $media );
    }

    // Uri Helpers ---------------------------------------------------------------

    public function get_theme_uri($file = '') {
        return get_template_directory_uri() . '/' . $file;
    }

    public function get_child_uri($file = '') {
        return get_stylesheet_directory_uri() . '/' . $file;
    }

    public function get_css_uri($file = '') {
        return $this->get_theme_uri('assets/css/'.$file.'.css');
    }

    public function get_elements_uri( $file = '' ) {
        return $this->get_theme_uri( 'assets/css/elements/' . $file . '.css' );
    }

    public function get_js_uri($file = '') {
        return $this->get_theme_uri('assets/js/'.$file.'.js');
    }

    public function get_vendor_uri($file = '') {
        return $this->get_theme_uri('assets/vendors/'.$file);
    }
}

new Theme_Assets;

Je veux supprimer les scripts ‘ splittext ‘ et ‘ jquery-tinycolor ‘ en héritant de dequeuela fonction dans le thème parent mais cela supprime tous les autres scripts

Voici le code du thème enfant dansfunctions.php

add_action( 'after_setup_theme', function() {

   class D extends Theme_Assets{

   function __construct(){
      $this->add_action( 'wp_enqueue_scripts', 'dequeue', 20 );
   }

      public function dequeue(){
         wp_dequeue_script('jquery-tinycolor');
         wp_deregister_script('jquery-tinycolor');
         wp_dequeue_script('splittext');
         wp_deregister_script('splittext');
      }
   }

   new D();
});

Toute aide est appréciée.

Solution n°1 trouvée

Lorsque vous travaillez avec des classes et des actions/filtres, le rappel est un peu différent.

D’habitude c’est comme ça

add_action('wp_enqueue_scripts', 'my_callback_func');
function my_callback_func () {}

Mais dans les classes, vous devez ajouter l’instance (si vous utilisez new) ou le nom de la classe (si vous utilisez la méthode comme statique)

Dans ton cas

$this->add_action( 'wp_enqueue_scripts', 'dequeue', 20 );

Doit être remplacé par celui-ci

add_action( 'wp_enqueue_scripts', [$this, 'dequeue'], 20 );

Je suppose que wordpress n’a pas pu trouver la fonction de rappel de retrait de la file d’attente et, par défaut, a retiré de la file d’attente tous les scripts. Ou peut-être ne charge-t-il jamais aucun script/style en premier lieu.

Solution n°2 trouvée

Vous devrez le retirer de la file d’attente après sa mise en file d’attente.

function wpse387889_dequeue_scripts() {

    wp_dequeue_script('jquery-tinycolor');
    wp_deregister_script('jquery-tinycolor');
    wp_dequeue_script('splittext');
    wp_deregister_script('splittext');

}
add_action( 'wp_enqueue_scripts', 'wpse387889_dequeue_scripts', 99 );

Catégories : Wordpress

Jean-Michel

Jean-Michel est en charge de la partie blog du site. Il met en place la stratégie de contenu et répond aux questions fréquentes sur Wordpress.

0 commentaire

Laisser un commentaire

Avatar placeholder

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *