【问题标题】:How can I remove jquery from the frontside of my WordPress?如何从我的 WordPress 前端删除 jquery?
【发布时间】:2010-11-12 13:16:56
【问题描述】:

我的 wordpress 网站下载起来有点重。在前端,它不必要地包含 jquery。在我的萤火虫中,它看起来像:

jquery.js?ver=1.3.2

jquery.form.js?ver=2.02m

我不需要为我包括这些。

我很高兴他们留在 wp-admin 中,但我希望他们不要加载到前端。

我在wp-includes/script-loader.php 中找到了我认为正在加载它们的文件,但我不确定要取消注释或如何将其完全删除。

有没有办法做到这一点,在不破坏后端的情况下删除 jquery?

【问题讨论】:

    标签: jquery wordpress


    【解决方案1】:

    您的主题可能正在添加 JQuery。如果您的主题添加正确,它应该使用wp_enqueue_script() 函数。要删除 JQuery,只需使用 wp_deregister_script() 函数。

    wp_deregister_script('jquery');
    

    为您的整个站点删除 JQuery 可能会对您的管理部分造成一些意想不到的后果。为避免在您的管理页面上删除 JQuery,请改用以下代码:

    if ( !is_admin() ) wp_deregister_script('jquery');
    

    现在只有不是管理页面的页面才会运行wp_deregister_script() 函数。

    将此代码添加到主题目录中的functions.php文件中。

    【讨论】:

    • 这已经过时了。请在下面查看我的解决方案。
    • 是的。不再起作用了。 deweydb 的回答是正确的。
    • 但它也删除了插件的js
    • 我不确定,文档也是 wp_deregister_script 或 wp_dequeue_script 的作用。 WordPress 一团糟。
    【解决方案2】:

    完全删除样式或脚本的正确方法是将其出列注销它。您还应该注意,前端脚本是通过 wp_enqueue_scripts 挂钩处理的,而后端脚本是通过 admin_enqueue_scripts 挂钩处理的。

    因此,考虑到这一点,您可以执行以下操作

    add_filter( 'wp_enqueue_scripts', 'change_default_jquery', PHP_INT_MAX );
    
    function change_default_jquery( ){
        wp_dequeue_script( 'jquery');
        wp_deregister_script( 'jquery');   
    }
    

    编辑 1

    这已在 Wordpress 4.0 版上进行了全面测试,并按预期工作。

    编辑 2

    作为概念证明,将以下代码粘贴到您的functions.php 中。这将在您的网站头部、后端和前端打印成功或失败消息

    add_action( 'wp_head', 'check_jquery' );
    add_action( 'admin_head', 'check_jquery' );
    function check_jquery() {
    
        global $wp_scripts;
    
        foreach ( $wp_scripts->registered as $wp_script ) {
            $handles[] = $wp_script->handle; 
        }
    
        if( in_array( 'jquery', $handles ) ) {
            echo 'jquery has been loaded';
        }else{
            echo 'jquery has been removed';
        }
    }
    

    【讨论】:

    【解决方案3】:

    从 wordpress 3.6 开始,所有其他解决方案现在都已过时

    add_filter( 'wp_default_scripts', 'change_default_jquery' );
    
    function change_default_jquery( &$scripts){
        if(!is_admin()){
            $scripts->remove( 'jquery');
            $scripts->add( 'jquery', false, array( 'jquery-core' ), '1.10.2' );
        }
    }
    

    【讨论】:

    • 终于!谢谢。
    • 这仍然是 5.0 的最佳方式吗?
    【解决方案4】:

    Wordpress 通过一个名为 <?php wp_head(); ?> 的模板标签添加这个 jQuery 调用,该标签出现在大多数主题中,并且是某些插件工作所必需的。

    这可能很烦人,不仅因为加载,还因为它可能会杀死以前加载的 jQuery,甚至可能会妨碍一些尝试加载 jQuery 的插件。

    快速修复方法是打开主题目录中的文件 header.php,并添加:

    <?php wp_deregister_script('jquery'); ?>
    

    就在

    之前
    <?php wp_head(); ?>
    

    或者只是将它们组合成:

    <?php wp_deregister_script('jquery'); wp_head(); ?>
    

    可以在here找到更技术性的解释

    【讨论】:

      【解决方案5】:
      function my_init() {
          if (!is_admin()) {
              wp_deregister_script('jquery');
              wp_register_script('jquery', false);
          }
      }
      add_action('init', 'my_init');
      

      这是正确的 - 删除 jquery 库 js。其他答案中的代码会删除所有 js(甚至是您安装的插件添加的 js)

      在 4.3.1 上测试

      【讨论】:

        【解决方案6】:

        查看您的主题文件。

        wp-content/themes/header.php

        可能包含 .js 文件。

        【讨论】:

          【解决方案7】:

          WordPress 5 及以上版本(已测试

          删除默认 jquery 并从文件夹或 CDN 添加您的 jquery。只使用一个,'local' 或 'cdn'

          // Remove the WordPress default jquery
          wp_deregister_script( 'jquery' );
          
          // using a local file
          wp_enqueue_script(
            'jquery', get_template_directory_uri() . '/lib/jquery-3.3.1.min.js','', '3.3.1', true
          );
          
          // using CDN
          wp_enqueue_script(
              'jquery', '//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js', '', '3.3.1', true
          );
          
          // $handle: 'jquery'
          // $src: 
              // local: get_template_directory_uri() . '/lib/jquery-3.3.1.min.js'
              // cdn: '//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js'
          // $deps: '' (leave it empty)
          // $ver: '3.3.1'
          // $in_footer: true (boolean)
          

          语法

          wp_enqueue_script( $handle, $src, $deps, $ver, $in_footer );
          

          【讨论】:

            【解决方案8】:

            查看渲染页面的来源;当在 header.php 中调用&lt;?php wp_head(); ?&gt; 时,Wordpress 通常默认包含 jQuery,因此您仍然可以看到 jQuery 包含在您的站点中。

            如果您删除 header.php 中的 &lt;?php wp_head(); ?&gt;,您可能会失去其他插件功能,因为此时许多插件“挂钩”到 Wordpress。

            但是包括 jQuery 并不是什么大不了的事。它很小,Wordpress 在某些方面依赖它。

            【讨论】:

              【解决方案9】:

              在大多数 Wordpress 主题中。管理面板上使用的 jQuery (wp-admin) 或产品页面中使用的 jQuery。加快。这会奏效。在 WP 5.0 上测试 仅当管理员登录或其产品页面时才加载 jQuery(用户登录或不在产品页面上都无关紧要。(产品页面上的 jQuery 加载))

              function my_jquery_remove() {
                  if ( ! is_admin() && !is_product() ) {
                     wp_deregister_script('jquery');
                     wp_register_script('jquery', false);
                  }
              }
              add_action('init', 'my_jquery_remove');
              

              【讨论】:

                【解决方案10】:

                如果您使用的是缩小版,jQuery.js 只有 15KB,如果您使用的是不需要它的主题,则完全没有这些。

                您可能应该寻找一个没有 jQuery 的轻量级主题,而不是破解它,然后看到主题在几个地方中断,因为他们正在寻找那些 js 文件。

                【讨论】:

                • jQuery.js 大约是那个大小,如果你使用缩小版并且你使用 GZip 压缩数据。 jQuery.form.js 是 22K 未压缩和未缩小的。
                • 15KB 与 22KB 不会有明显差异,我认为。
                【解决方案11】:

                通过取消注册 jQuery,我能够将“事件”页面加载速度缩短 2.2 秒。 jQuery 是一个不错的选择,但在我看来,页面速度非常重要。

                你永远不会让用户停留超过 5 秒,所以如果 jQuery 导致你出现性能问题,那么我说摆脱。

                【讨论】:

                • 同意。将所有内容构建为不需要它,并仅在必须时使用它。秒是一个巨大的交易。不仅仅是下载,还有处理时间。
                猜你喜欢
                • 1970-01-01
                • 2022-11-02
                • 2014-01-24
                • 1970-01-01
                • 2015-09-20
                • 2019-07-04
                • 2017-04-05
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多