如何卸载新 WooCommerce 2.3.x 加载的 select2 脚本/样式?

Posted

技术标签:

【中文标题】如何卸载新 WooCommerce 2.3.x 加载的 select2 脚本/样式?【英文标题】:How to unload select2 script/styles loaded by new WooCommerce 2.3.x? 【发布时间】:2015-04-17 07:52:38 【问题描述】:

我们是主题开发人员,我们已经在我们的 wordpress 主题中为 html 中的 SELECT 框使用 select2 (http://select2.github.io/) 脚本。 刚刚发布的新 WooCommerce 2.3.x 现在也使用 select2 脚本。但是它们以许多不同的方式用自己的样式(最重要的是带有 !important 标签)覆盖了它的样式。

我们不能用 !important 规则重新声明他们所有的 CSS 更改,这将是很多我们不喜欢的 CSS 混乱。现在我们的 JS 脚本也加载了 2 次并且有时也会发生冲突(因为 woocommerce 加载了自己的 select2 js)。

我的问题是在我们的主题功能中停用 woocommerce select2 CSS 和 JS 文件的最佳方法是什么?我们想使用我们的脚本版本和样式文件(也适用于 woocommerce 选择元素)。

我尝试使用 wp_dequeue_script、wp_deregister_script 和可用于样式的相同函数,但这无济于事。正如我所见,woocommerce 在我们的主题已经初始化之后添加脚本/css,我们无法停用它。

谢谢。

这是加载在 /includes/class-wc-frontend-scripts.php 中的代码,我需要从主题功能中禁用它:

self::register_script( 'select2', $assets_path . 'js/select2/select2' . $suffix . '.js', array( 'jquery' ), '3.5.2' );
self::enqueue_script( 'select2' );
wp_enqueue_style( 'select2', $assets_path . 'css/select2.css' );

如何在主题功能中卸载此 CSS/JS 文件,而不更改原始 WooCommerce 文件?

【问题讨论】:

【参考方案1】:

我找到了解决办法:

add_action( 'wp_enqueue_scripts', 'mgt_dequeue_stylesandscripts', 100 );

function mgt_dequeue_stylesandscripts() 
    if ( class_exists( 'woocommerce' ) ) 
        wp_dequeue_style( 'select2' );
        wp_deregister_style( 'select2' );

        wp_dequeue_script( 'select2');
        wp_deregister_script('select2');

     
 

【讨论】:

【参考方案2】:

最近对 WooCommerce (v 3.2.1) 进行了一些更改,其中他们派生了 select2 脚本,因此@Dmitry 上面的代码不再起作用。对我有用的新代码如下..

add_action( 'wp_enqueue_scripts', 'agentwp_dequeue_stylesandscripts', 100 );

function agentwp_dequeue_stylesandscripts() 
    if ( class_exists( 'woocommerce' ) ) 
    wp_dequeue_style( 'selectWoo' );
    wp_deregister_style( 'selectWoo' );

    wp_dequeue_script( 'selectWoo');
    wp_deregister_script('selectWoo');

   

【讨论】:

【参考方案3】:

适用于任何重复选择字段的人。由于 Woocommerce 调用以下地址,似乎存在问题:

?wc-ajax=update_order_review

页面加载后,在每个 select 元素之后引入一个 select2 元素:

<span class="select2 select2-container ... >

此范围显示在下拉列表下方,包含当前选择的选项。

Duplicate dropdown element

我尝试在他的代码中添加wp_dequeue_script( 'wc-checkout' );,这确实阻止了跨度出现,但也阻止了其他需要的功能。

最后,我用css隐藏了span:

.woocommerce-checkout .select2-container 
    display:none;

【讨论】:

【参考方案4】:

这里有一个可能有助于或提供前进方向的要点:https://gist.github.com/gregrickaby/2846416

还可以查看 includes/class-wc-frontend-scripts.php 以了解脚本是如何排队的。

我已从以下 URL 复制了粘贴在下面的代码,该 URL 显示了如何使单个样式出队,这也可能有所帮助:http://docs.woothemes.com/document/disable-the-default-stylesheet/

// Remove each style one by one
add_filter( 'woocommerce_enqueue_styles', 'jk_dequeue_styles' );
function jk_dequeue_styles( $enqueue_styles ) 
    unset( $enqueue_styles['woocommerce-general'] ); // Remove the gloss
    unset( $enqueue_styles['woocommerce-layout'] ); // Remove the layout
    unset( $enqueue_styles['woocommerce-smallscreen'] ); // Remove the smallscreen optimisation
    return $enqueue_styles;
 

【讨论】:

不幸的是,这个过滤器只允许禁用这 3 种样式(通用、布局和小屏幕),并且不允许禁用 WooCommerce 加载的任何其他 CSS 文件。在包含/class-wc-frontend-scripts.php 的 WooCommerce 中没有其他可用的过滤器。我在原始帖子中添加了代码,我需要禁用它。

以上是关于如何卸载新 WooCommerce 2.3.x 加载的 select2 脚本/样式?的主要内容,如果未能解决你的问题,请参考以下文章

php 卸载WooCommerce

如何将 WordPress 用户角色添加到 Woocommerce 新管理员订单电子邮件主题

php 活动门票加 - 当WooCommerce Ticket添加到购物车时,将其他WooCommerce产品添加到购物车

php 活动门票加 - 当WooCommerce Ticket添加到购物车时,将其他WooCommerce产品添加到购物车

php 活动门票加:WooCommerce:强制所有门票“单独出售”。

php 活动门票加:WooCommerce:强制所有门票“单独出售”。