WordPress wp_dequeue_script supprime tous les autres scripts
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 dequeue
la 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 );
0 commentaire