我正在尝试开发一个Wordpress插件,如果主题已经使用了Wordpress插件,那么该插件将退出/注销用户可能安装的特定插件添加到主题的样式表。
换句话说,如果管理员使用的主题Font Awesome 字体很棒。css(或font-awesome.min.css),他使用了2个插件,也使用了font-awesome,管理员将得到3个font-awesome。已加载css(或font-awesome.min.css)样式表。
是否有办法检查主题是否已经加载了字体Awesome样式表,如果已经加载,则在主题将其排入队列之前,自动退出/取消所有插件的注册?
我想到的解决方案是这样的(伪代码):
add_action( \'wp_enqueue_scripts\', \'no_more_fontawesome\', 999 );
function no_more_fontawesome() {
if ( src_contain (\'font-awesome.css\') || src_contain(\'font-awesome.min.css\') ) {
wp_dequeue_style( that has font-awesome.css or font-awesome.min.css in src);
}
解决方案可能是在src中对表达式进行regex检查。css和字体很棒。min.css但如何做到这一点?
任何帮助都将不胜感激!
最合适的回答,由SO网友:cybmeta 整理而成
我想你说的是一种罕见的情况。“font awsome”是所有插件和主题都应该用作句柄的预期名称。如果开发人员没有更改字体awsome CSS文件的源代码,则没有理由更改句柄的名称。无论如何,您可以检查全局$wp_styles对象,并在每个排队样式的src值中生成一个正则表达式:
function cybmeta_dequeue_fontawsome() {
global $wp_styles;
// we use preg_match to find only the following patterns as exact matches, to prevent other stylesheets that contain font-awesome expression to be also dequeued
$patterns = array(
\'font-awesome.css\',
\'font-awesome.min.css\'
);
$regex = \'/(\' .implode(\'|\', $patterns) .\')/i\';
foreach( $wp_styles -> registered as $registered ) {
if( preg_match( $regex, $registered->src) ) {
wp_dequeue_style( $registered->handle );
// FA was dequeued, so here we need to enqueue it again from the location we want (cdn in our code)
wp_enqueue_style( \'font-awesome\', \'//netdna.bootstrapcdn.com/font-awesome/4.1.0/css/font-awesome.min.css\' );
}
}
}
add_action( \'wp_enqueue_scripts\', \'cybmeta_dequeue_fontawsome\' );