无论优先级设置如何,插件中的wp_enQueue_脚本操作都会覆盖主题wp_enQueue_脚本

时间:2017-10-05 作者:squarecandy

我试图解决两个插件之间的冲突,这两个插件都加载了相同的脚本。我试图通过检查两者是否都已加载,然后如果是真的,取消其中一个的注册。但是,无论我设置的优先级值有多高,其中一个脚本总是在wp\\u enqueue\\u脚本中的最后一个脚本之后加载。

// account for conflicts between GiveWP Stripe AND WooCommerce Stripe script loading
function squarecandy_stripe_resolve() {
    if ( wp_script_is(\'stripe\') && wp_script_is(\'give-stripe-js\') ) :
        // if both scripts were loaded, remove one of them
        wp_dequeue_script( \'give-stripe-js\' );
    else :
        // this is just to test what\'s going wrong...
        print \'stripe queued: \' . var_export(wp_script_is(\'stripe\',\'to_do\'),true);
        print \'give-stripe-js queued: \' . var_export(wp_script_is(\'give-stripe-js\'),true);
    endif;
}
add_action( \'wp_enqueue_scripts\', \'squarecandy_stripe_resolve\', 999999999 );
剧本give-stripe-js 已正确识别为已加载,并显示在just-troubleshooting HTML标头中的行。但是WooCommerce Stripe脚本在我的代码后加载一行,并且不会在我的脚本中注册为排队。

挖掘WooCommerce来源,我发现:

class WC_Stripe_Payment_Request {
    public function __construct() {
        add_action( \'wp_enqueue_scripts\', array( $this, \'scripts\' ) );
        // ...etc
这是怎么回事?我在文档中找不到关于在类中传递数组的add\\u操作的任何内容。。。也许这与此有关?如何检查这两个脚本是否在所有插件都有机会排队后加载,但在任何内容打印到<head>?

1 个回复
SO网友:Mark Kaplun

wp_deregister_script 仅删除与句柄关联的注册,而不会从队列本身中删除该项。要将其从队列中删除,应调用wp_dequeue_script

结束

相关推荐