因此,我正在尝试寻找一种自动延迟加载客户端Wordpress网站上博客文章中所有图像的方法。
作为开发人员,我宁愿不使用WP插件(例如BJ Lazy Load或A3 Lazy Load),而宁愿使用JS插件(JQuery Lazy by eisbhr)来赋予我更多控制权。
到目前为止,我发现的所有SO解决方案都没有起作用。
尝试#1
我使用了the_content
钩子将src更改为data-src。我使用的代码是基本代码。
function add_data_src_to_content($content) {
return str_replace("src=", "data-src=", $content);
};
add_filter('the_content', 'add_data_src_to_content');
尽管确实将src
更改为data-src
,但浏览器仍然将图像加载到折叠以下(这违背了延迟加载的目的)。我猜想the_content
钩子实际上还使用了另一个钩子来加载图像。这是我第二次尝试的方式。
尝试#2
第二次尝试使用image_send_to_editor
钩子。代码:
function add_data_src($html, $id, $caption, $title, $align, $url) {
return str_replace("<img src", '<img data-src', $html);
};
add_filter('image_send_to_editor', 'add_data_src', 10, 9);
这不适用于已发布的帖子。因此,我必须重新插入图像才能使此代码片段正常工作。我也成功地将src
转换为data-src
!问题:再次,WP仍会加载图像(在“开发工具”中检查“网络”选项卡时),无法达到延迟加载的目的。
在这一点上,我很困惑。如何防止WP在不使用插件的情况下将图片加载到首屏之下?
答案 0 :(得分:0)
我假设您是指通过帖子/页面编辑器输入的内容中的图像,而不是侧边栏小部件或首页中的图像(显然,这些图像仍会加载)。
我将您的Attempt#1添加到了我的自定义网站插件中,并且通过帖子编辑器添加的图像被加载,无法显示。 但是;通过其他方式插入的图像继续加载并显示简码除非,否则我将过滤器功能设置为“低优先级”。
尝试在“其他所有内容”之后运行您的Attempt#1筛选器功能。 add_filter('the_content', 'add_data_src_to_content', 9999);
删除延迟加载的Javascript,然后清除缓存并浏览页面之一并查看(HTML)源。如果您的过滤器正常工作或部分正常工作,您将在HTML中看到“ data-src =“属性,而不是“ src =”;如果是这样,则问题可能与您的Java脚本设置和“早期”非延迟加载有关。
答案 1 :(得分:0)
我发现了什么地方出了问题:显然,Wordpress会自动为所有插入的图像添加一个srcset
和sizes
属性(显然,自WP 4.4开始就已经存在)。我尝试使用image_send_to_editor
钩子时发现了这个问题。我正在使用的JS插件要求我将srcset
设置为data-srcset
,将sizes
设置为data-sizes
,以使延迟加载工作。将那些应用于the_content
钩子上的更改实际上是可行的。最终代码(有效)是:
function add_data_src_to_content($content) {
$content = str_replace("<img src=", "<img data-src=", $content);
$content = str_replace("srcset=", "data-srcset=", $content);
$content = str_replace("sizes=", "data-sizes=", $content);
return $content;
};
add_filter('the_content', 'add_data_src_to_content');
答案 2 :(得分:0)
在创建新帖子或页面时,它将自动为所有'img loading =“ lazy”'和'iframe loading =“ lazy” iframe'标签添加'loading =“ lazy”'属性。
它是通过以下方式实现的:
add_filter( 'save_post', 'add_lazy_load', 10, 3 );
function add_lazy_load($post_id, $post, $update)
{
if (wp_is_post_revision($post_id))
{
return;
}
if ( ! class_exists( 'DOMDocument', false ) )
return;
remove_action('save_post', 'add_lazy_load');
$post_status = get_post_status();
了解更多:https://www.plerdy.com/blog/lazy-loading-setup-wordpress/
答案 3 :(得分:0)
我认为延迟加载最可行的解决方案是原生延迟加载。在这种情况下,您只需为 img 标签添加一个加载属性。然后,浏览器将负责延迟加载。
以下是加载属性支持的值:
Chrome、Edge、Opera 和 Firefox 都支持它。