问题描述

我为 Twenty Twelve v1.0 创建了一个小孩主题,我想删除 Open Sans 字体。

Open Sans 被添加到 Twenty 十二的 functions.php 中:

wp_enqueue_style( 'twentytwelve-fonts', add_query_arg( $query_args, "$protocol://googlefonts.admincdn.com/css" ), array(), null );

我试图在我的 childtheme 的 functions.php(参见下面的例子) 中注销/排除样式表,但不起作用:

function example_scripts_styles() {
    wp_deregister_style( 'twentytwelve-fonts' );
    wp_dequeue_style( 'twentytwelve-fonts' );
}
add_action( 'wp_enqueue_scripts', 'example_scripts_styles' );

任何想法如何我可以删除这个文件?谢谢!

最佳解决方案

找到答案 here

Script dequeuing calls should be added to the wp_print_scripts action hook(..). This is because scripts are typically enqueued on the wp_enqueue_script hook, which happens early in the wp_head process. The wp_print_scripts hook happens right before scripts are printed, and thus is latest in the process. (Otto)

遵循相同的逻辑,我们可以使用 wp_print_styles 来删除 Open Sans 字体:

function remove_open_sans() {
   wp_dequeue_style( 'twentytwelve-fonts' );
}
add_action('wp_print_styles','remove_open_sans');

这样做了。

次佳解决方案

在 WP 3.8+以上,我使用 thetrickster’s gist 从前端样式成功删除了’Open Sans’:

<?php
// Remove Open Sans that WP adds from frontend
if (!function_exists('remove_wp_open_sans')) :
    function remove_wp_open_sans() {
        wp_deregister_style( 'open-sans' );
        wp_register_style( 'open-sans', false );
    }
    add_action('wp_enqueue_scripts', 'remove_wp_open_sans');

    // Uncomment below to remove from admin
    // add_action('admin_enqueue_scripts', 'remove_wp_open_sans');
endif;
?>

‘Open Sans’ 可以是插件依赖。

第三种解决方案

在 Twenty Twelve v1.1 的 functions.php 中,注释说明了如何从 wp_enqueue_scripts 钩子中删除样式表:

function mytheme_dequeue_fonts() {
         wp_dequeue_style( 'twentytwelve-fonts' );
      }

add_action( 'wp_enqueue_scripts', 'mytheme_dequeue_fonts', 11 );

您的尝试不奏效在 add_action()中缺少 priority parameter 。父主题以默认优先级为 10 的方式排列样式,因此子主题必须以优先级 11 对齐。

参考文献

注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。