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;
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;
}
}
?>
- 2 回答
- 0 关注
- 127 浏览
添加回答
举报