WordPress延迟脚本插件不加载网站

我想加快我的 wordpress 网站的加载速度。我编写了一个简单的插件,它将 defer 属性添加到我安装的自定义主题使用的一些脚本中。我面临的问题是该站点被锁定到预加载器屏幕,并且 chrome 开发控制台中没有错误,也没有显示 xdebug 错误。我不知道,也许我做错了什么属性?所有脚本都是主题的依赖项,并且使用不属于列表的 jQuery。任何帮助将不胜感激。


class WP_scriptDefer {


  private $scripts = [

    'bootstrap.min.js',

    'lazyload.min.js',

    'viewportchecker.min.js',

    'universal-parallax.min.js',

  ];


  public function __construct()

  {

    $this->init();

  }


  public function init()

  {

    add_filter( 'script_loader_tag', [$this, 'deferScripts'], 10 );

  }


  public function deferScripts()

  {

    foreach( $this->scripts as $script ){

      if( true == strpos($tag, $script) ){

          return str_replace('src', 'defer="defer" src', $tag);

      }

    }

  }


}


new WP_scriptDefer;


30秒到达战场
浏览 128回答 2
2回答

守着一只汪

我编辑你的课程,请检查:class WP_scriptDefer{    private $scripts = [            'bootstrap.min.js',            'lazyload.min.js',            'viewportchecker.min.js',            'universal-parallax.min.js',        ];    public function __construct()    {        $this->init();    }    public function init()    {        add_filter('script_loader_tag', [ $this, 'deferScripts'], 10, 3);    }    public function deferScripts( $tag, $handle, $src  )    {        foreach( $this->scripts as $script ){            if( true === strpos($tag, $script) ){                 return str_replace('src', 'defer="defer" src', $tag);            }        }        return $tag;    }}new WP_scriptDefer;

拉莫斯之舞

一天后,也感谢 Dmitry 的建议,我找到了让插件工作的正确方法。数组脚本需要包含在wp_enqueue_script()每个脚本内部分配的名称,而不是文件名。这在网络上不是很清楚,因为通常此过滤器直接应用于function.php主题内部。这是完整的工作代码:<?php&nbsp;class WP_deferScripts {&nbsp; private $defer_scripts = [&nbsp; &nbsp; 'bootstrap',&nbsp; &nbsp; 'lazyload',&nbsp; &nbsp; 'swiper',&nbsp; ];&nbsp; public function __construct()&nbsp; {&nbsp; &nbsp; add_filter( 'script_loader_tag', [$this, 'deferScripts'], 10, 2);&nbsp; }&nbsp; public function deferScripts( string $tag, string $handle ) : string&nbsp; {&nbsp; &nbsp; #var_dump($handle, $tag);&nbsp; &nbsp; foreach( $this->defet_scripts as $script ){&nbsp; &nbsp; &nbsp; if( $script === $handle ){&nbsp; &nbsp; &nbsp; &nbsp; return str_replace('src', 'defer="defer" src', $tag);&nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; return $tag;&nbsp; }}?>
打开App,查看更多内容
随时随地看视频慕课网APP