如何将来自插件的样式出队?

时间:2021-01-25 作者:Nawar Hisso


我试图通过不加载网站主页上的所有样式表来减少过载
其中一些表单是从外部插件(如woo commerce)来加载的,
我曾尝试使用\'wp\\u dequeue\\u style\'功能来实现这一点,但没有成功,这些样式表仍在加载中

例如,第一个是100%未使用的:

This style sheet coming from woo-commerce


当我使用下面的代码时:

function disable_plugins_style()
{
    global $wp_styles;
    wp_dequeue_style(\'style-rtl\');
    wp_deregister_style(\'style-rtl\');
    unset($wp_styles->registered[\'style-rtl\']);
}
add_action(\'wp_enqueue_scripts\', \'disable_plugins_style\', 9999);
add_action(\'wp_head\', \'disable_plugins_style\', 9999);
这没有造成任何影响,我能找个人帮我吗。

2 个回复
SO网友:Pat J

您的思路是正确的,但您需要知道样式表的ID。它不一定与样式表的文件名相同。

检查页面的生成源(即,在浏览器中加载页面并查看源)。查找<link> 正在加载样式表的标记。如果已将其正确地排入WordPress的队列,则它应该如下所示:

<link
 rel="stylesheet"
 id="your-stylesheet-id-css"
 href="https://example.com/path/to/your-stylesheet.css"
/>
您需要在id 属性并修剪-css 从最后开始。

因此,在我的示例中,您需要:

add_action( \'wp_enqueue_scripts\', \'wpse_382138_unload_css\', 9999 );
function wpse_382138_unload_css() {
    wp_dequeue_style( \'your-stylesheet-id\' );
}
。。。正在更改your-stylesheet-id 在页面生成的源代码中找到的值。

参考文献wp_dequeue_style()

SO网友:Celso Bessa

你的基本策略是正确的。问题是,尽管有一些最佳实践,但你永远无法百分之百地以简单的方式确定:

插件或主题将脚本和样式排队时hook your code to different actions when the scripts and styles are printed (和未排队)并测试不同的优先级。或者b)你可以检查每个插件和主题代码,看看每个插件使用了什么挂钩和优先级wp_enqueue_scriptwp_enqueue_style 呼叫

我建议选择选项a,比如:

    function wpse_382138_disable_plugins_style()
    {
        //these should use the same priority of later than the priority used by the plugin or theme when hooked
        wp_dequeue_style(\'stylesheet-handler-with-default-priority\');
        wp_dequeue_style(\'stylesheet-handler-with-explicit-default-priorit\', 10);
        wp_dequeue_style(\'stylesheet-handler-with-later-priority\', 20);
    }
    function wpse_382138_disable_plugins_scripts()
    {
        // these should use the same priority of later than the priority used by the plugin or theme when hooked
        wp_dequeue_script(\'script-handler-with-default-priority\');
        wp_dequeue_script(\'script-handler-with-explicit-default-priority\', 10);
        wp_dequeue_script(\'script-handler-with-later-priority\', 20);
    }

    // option A: hook your unhooking functions either to hooks later than wp_enqueue_scripts or wp_enqueue_style as wp_head or wp_footer.
    add_action(\'wp_head\', \'wpse_382138_disable_plugins_style\', 10);
    add_action(\'wp_footer\', \'wpse_382138_disable_plugins_style\', 10);
    add_action(\'wp_head\', \'wpse_382138_disable_plugins_scripts\', 10);
    add_action(\'wp_footer\', \'wpse_382138_disable_plugins_scripts\', 10);

    // option b: hook your unhooking functions to the printing actions with a priority lower than the before first scripts or styles are usuarlly written, so they will execute the dequeue before scripts and styles are printed.
    add_action(\'wp_print_scripts\', \'wpse_382138_disable_plugins_style\', 5);
    add_action(\'wp_print_footer_scripts\', \'wpse_382138_disable_plugins_style\', 5);
    add_action(\'wp_print_styles\', \'wpse_382138_isable_plugins_scrips\', 5);
This Codex page 有一个典型WordPress请求中触发的几乎所有挂钩的列表。

如果对你有帮助,请告诉我。

相关推荐

如何从自定义插件设置页面更改CSS颜色

我有一个自定义的WordPress插件,它具有多种设置,可以在多个网站上使用。我还在所有这些页面上使用了一些相同的第三方插件。我希望能够以同样的方式设计它们,但使用不同的颜色。虽然我可以将CSS添加到每个站点,但对于一些非技术管理员来说,通过CSS并在正确的类上更改十六进制代码是很困难的。我正试图找出最好的方法来做到这一点。以下是我到目前为止研究的内容:我知道我可以用PHP更改类,但我不能用这种方式更改第三方插件上的类</用JS做这件事很烦人,看页面以默认颜色加载,一秒钟后切换尝试将CSS文件转换为