不使用插件时禁止加载css/js

时间:2017-02-03 作者:DisgruntledGoat

我有一个Wordpress主题(the7),其中包括Visual Composer插件。这对我的客户端在后端编辑东西很有好处,但它也会在前端的每个页面加载中添加不必要的CSS和JS。如何删除这些?

它添加的行包括:

<link rel=\'stylesheet\' id=\'js_composer_front-css\'  href=\'[domain]/wp-content/plugins/js_composer/assets/css/js_composer.min.css?ver=5.0.1\' type=\'text/css\' media=\'all\' />

<script type=\'text/javascript\' src=\'[domain]/wp-content/plugins/js_composer/assets/js/dist/js_composer_front.min.js?ver=5.0.1\'></script>
我发现this question 这提供了一种可能的方法,但我无法让它发挥作用。

我找到了特定CSS文件的加载位置,它位于该函数的类Vc\\U基中:

public function enqueueStyle() {
    $post = get_post();
    if ( $post && preg_match( \'/vc_row/\', $post->post_content ) ) {
        wp_enqueue_style( \'js_composer_front\' );
    }
    wp_enqueue_style( \'js_composer_custom_css\' );
}
所以我在函数中设置了这个。php:

function inf_remove_junk()
{
    wp_dequeue_style(\'js_composer_front\');
    wp_dequeue_style(\'js_composer_custom_css\');
    wp_dequeue_script(\'wpb_composer_front_js\');

    // also tried this
    remove_action(\'wp_enqueue_scripts\', array(\'Vc_Base\', \'enqueueStyle\'));
}

if (!is_admin()) {
    add_action(\'wp_head\', \'inf_remove_junk\');
}
Theinf_remove_junk 函数肯定会执行,但它不会删除CSS。它是否需要连接到另一个点或做其他事情?

3 个回复
SO网友:maheshwaghmare

您需要使用actionwp_enqueue_scripts 除了wp_head 例如:

function inf_remove_junk() {
    if (!is_admin()) {
          wp_dequeue_style(\'js_composer_front\');
          wp_dequeue_style(\'js_composer_custom_css\');
          wp_dequeue_script(\'wpb_composer_front_js\');
     }

}

add_action( \'wp_enqueue_scripts\', \'inf_remove_junk\' );
但它从前端删除了脚本。

我认为在归档页面上,VC不会执行它的短代码。因此,您可以检查is\\u archive()条件,而不是is\\u admin()。

或者您可以从内容中检查短代码并删除资产,如:

函数inf\\u remove\\u junk(){

// 1. Check shortcode exist in post content and disable scripts.
        global $post;
        if ( stripos($post->post_content, \'[YOUR_SHORTCODE]\') ) {

// or

// 2. Disable scripts on all pages except single page, post, custom Post etc.

        if ( ! singular() ) {

// or

// 3. Disable on archive, 404 and search page
        if ( is_archive() || is_404() || is_search() ) {
              wp_dequeue_style(\'js_composer_front\');
              wp_dequeue_style(\'js_composer_custom_css\');
              wp_dequeue_script(\'wpb_composer_front_js\');
         }     
}添加操作(“wp\\u enqueue\\u scripts”,“inf\\u remove\\u junk”);

此外,要获得高级插件支持,您需要联系插件作者以获得更好的答案

SO网友:com.on.ist

我使用WPBakery,但只使用自己的元素,所以我想删除完全相同的脚本/样式。

@maheshwaghmare的解决方案只是将脚本/样式移到了另一个地方。

使用“wp\\U deregister\\u style”和“wp\\U deregister\\u script”,它可以:

// Remove WPB CSS & JS on frontend
function remove_wpb_js_css() {
    if (!is_admin()) {
        wp_dequeue_style(\'js_composer_front\');
        wp_deregister_style(\'js_composer_front\');
        wp_dequeue_script(\'wpb_composer_front_js\');
        wp_deregister_script(\'wpb_composer_front_js\');
    }
}
add_action( \'wp_enqueue_scripts\', \'remove_wpb_js_css\', 99 );

SO网友:Nathan Johnson

您需要确保在脚本和样式进入队列后,将其退出队列。否则,您的代码将看起来没有任何作用。实际上,它正在正确地将脚本出列,但稍后会再次添加它。

你不能说他们在哪个钩子上排队,但如果是wp_enqueue_scripts 在默认优先级下,这应该通过以较低优先级将它们出列来实现。

//* Dequeue scripts and styles
function wpse_106269_wp_enqueue_scripts() {
    wp_dequeue_style( \'js_composer_front\' );
    wp_dequeue_style( \'js_composer_custom_css\' );
    wp_dequeue_script( \'wpb_composer_front_js\' );
}

//* Make sure we dequeue scripts and styles after they are enqueued
function wpse_106269_wp_head() {
  add_action( \'wp_enqueue_scripts\', \'wpse_106269_wp_enqueue_scripts\', 20 );
}

//* wp_head is only fired on public pages
add_action( \'wp_head\', \'wpse_106269_wp_head\');

相关推荐

在带有PHP的子主题中包含style.css

在里面https://codex.wordpress.org/Child_Themes 这是包含样式的最佳实践。css在子主题中,必须将下面的代码放入函数中。php的子主题,但将“父样式”替换为可以在函数中找到的父主题的参数。父主题的php。我在我的主题文件中找不到它,那里也没有多少代码。使用@import包含父主题样式表的方法不适用于我,放入文件的css不会在任何浏览器的站点上显示自己。function my_theme_enqueue_styles() { $parent_s