为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
30秒到达战场 2022-05-27 16:41:18
我想加快我的 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;
查看完整描述

2 回答

?
守着一只汪

TA贡献1872条经验 获得超3个赞

我编辑你的课程,请检查:


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;


查看完整回答
反对 回复 2022-05-27
?
拉莫斯之舞

TA贡献1820条经验 获得超10个赞

一天后,也感谢 Dmitry 的建议,我找到了让插件工作的正确方法。数组脚本需要包含在wp_enqueue_script()每个脚本内部分配的名称,而不是文件名。这在网络上不是很清楚,因为通常此过滤器直接应用于function.php主题内部。这是完整的工作代码:


<?php 

class WP_deferScripts {


  private $defer_scripts = [

    'bootstrap',

    'lazyload',

    'swiper',

  ];


  public function __construct()

  {

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

  }


  public function deferScripts( string $tag, string $handle ) : string

  {

    #var_dump($handle, $tag);

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

      if( $script === $handle ){

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

      }

    }

    return $tag;

  }


}


?>


查看完整回答
反对 回复 2022-05-27
  • 2 回答
  • 0 关注
  • 127 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信