在WordPress中实现评论头像的自定义默认和延迟加载


Posted in PHP onNovember 24, 2015

自定义 WordPress 默认评论头像
对于没有设置Gravatra头像的评论者来说,WordPress会显示一个你在后台设置的默认头像,可以是神秘人、空白、默认的Gravatar 标志等等。但是这些头像有一个共同的不足之处,就是不怎么美观,可看性不强!打个比方,如果你去一个博客阅读文章,但当你放心评论文章的读者头像都是小怪物、复古等一系列WordPress自动生成的“不堪入目”的头像时,你还有很浓的兴趣去阅读这个博客的文章吗?我想答案是肯定的!那么,你有没有想过,自己设计或找一个属于你博客、适合你博客的默认WordPress头像那?好了,周良就不吊大家的胃口了,让我来说一下如何不使用插件实现自定义WordPress默认评论头像的方法。

方法很简单,将下面我提供的这段代码放在你正在使用的主题functions.php文件中。

<?php
// Make a new default gravatar available on the dashboard
function newgravatar ($avatar_defaults) {
$myavatar = get_bloginfo('template_directory') . '/images/tweaker.jpg';
$avatar_defaults[$myavatar] = "Tweaker";
return $avatar_defaults;
}
add_filter( 'avatar_defaults', 'newgravatar' );
?>

上面代码中的/images/tweaker.jpg就是自定义默认头像的相对路径,你可以自行修改图片的地址。建议将头像放到你正在使用的主题images文件下面。

延迟加载 WordPress 评论头像
修改 HTML 结构

因为前面说到在新式浏览器中的问题, 我们不能再用一般书写 HTML 图片的方式, 而是要将占位符写到 src 属性, 而将真正的图片地址写在 data-original 属性上. 所以 WordPress 头像代码结构应该是下面这样的.

<img class="avatar" src="占位符图片.gif" data-original="头像图片.jpg" />

在 WordPress 中, 本来输出头像如下.

<?php echo get_avatar($comment); ?>

现在需要改为适合 Lazy Load 插件的结构如下.

<?php echo '<img class="avatar" src="占位符图片.gif" alt="" data-original="' . preg_replace(array('/^.+(src=)(\"|\')/i', '/(\"|\')\sclass=(\"|\').+$/i'), array('', ''), get_avatar($comment)) . '" />'; ?>

这里建议使用 loading 图片或者默认头像作为占位符图片.

添加 Lazy Load 支持

打开 footer.php, 在 </body> 前添加 Lazy Load 插件和调用即可.

<script src="jquery.lazyload.js"></script>
<script>
/* <![CDATA[ */
$("img.avatar").lazyload();
/* ]]> */
</script>

当然, 在这之前你还需确保你的网站已经载入 jQuery. 完整的说明可以参考我翻译的关于 Lazy Load 的文章.

使用 Lazy Load 的优缺点

为什么用要 Lazy Load? 可能使用之前你就知道, 可以延迟加载图片, 提升页面加载速度. 但其实紧紧是速度问题, 其对网站的 SEO 也很重要. 比如: 现在有某文章页面, 后面有 N 多人回复, 但这些回复者的头像与文章内容往往没有关系, 我们不希望搜索引擎收录这么多无关的图片.

换个角度, 如果我们做的是电子商务网站, 希望产品的 description 中有丰富的图文信息, 并且被搜索引擎爬取. 但这些图片往往尺寸大影响加载速度, 淘宝为了页面性能也已经全部延迟加载, 而那些对 SEO 依赖性强的平台来说这种做法未必是好事.

选择是否延迟加载图片, 要衡量内容的重要性和页面的性能, 在其中取得平衡很重要.

 

PHP 相关文章推荐
PHP也可以?成Shell Script
Oct 09 PHP
PHP中的超全局变量
Oct 09 PHP
利用static实现表格的颜色隔行显示的代码
Sep 02 PHP
PHP file_get_contents 函数超时的几种解决方法
Jul 30 PHP
PHPwind整合最土系统用户同步登录实现方法
Dec 08 PHP
PHP学习笔记 IIS7下安装配置php环境
Oct 29 PHP
叫你如何修改Nginx与PHP的文件上传大小限制
Sep 10 PHP
php实现面包屑导航例子分享
Dec 19 PHP
如何写php守护进程(Daemon)
Dec 30 PHP
PHP解耦的三重境界(浅谈服务容器)
Mar 13 PHP
Laravel框架实现多个视图共享相同数据的方法详解
Jul 09 PHP
mysqli扩展无法在PHP7下升级问题的解决
Sep 10 PHP
WordPress中缩略图的使用以及相关技巧
Nov 24 #PHP
WordPress中对访客评论功能的一些优化方法
Nov 24 #PHP
php发送短信验证码完成注册功能
Nov 24 #PHP
PHP获取文件扩展名的4种方法
Nov 24 #PHP
PHP结合jQuery插件ajaxFileUpload实现异步上传文件实例
Aug 17 #PHP
PHP如何通过AJAX方式实现登录功能
Nov 23 #PHP
最新制作ThinkPHP3.2.3完全开发手册
Nov 23 #PHP
You might like
玩转虚拟域名◎+ .
2006/10/09 PHP
PHP分页显示制作详细讲解
2006/12/05 PHP
浅析PHP安装扩展mcrypt以及相关依赖项(PHP安装PECL扩展的方法)
2013/07/05 PHP
从PHP $_SERVER相关参数判断是否支持Rewrite模块
2013/09/26 PHP
PHP递归实现汉诺塔问题的方法示例
2017/11/25 PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
2019/11/19 PHP
JS之小练习代码
2008/10/12 Javascript
javascript 解决表单仍然提交即使监听处理函数返回false
2010/03/14 Javascript
a标签的href与onclick事件的区别详解
2014/11/12 Javascript
js实现类似jquery里animate动画效果的方法
2015/04/10 Javascript
smartcrop.js智能图片裁剪库
2015/10/14 Javascript
JQuery EasyUI的使用
2016/02/24 Javascript
js 转json格式的字符串为对象或数组(前后台)的方法
2016/11/02 Javascript
vue 自定义 select内置组件
2018/04/10 Javascript
jQuery轻量级表单模型验证插件
2018/10/15 jQuery
利用Angular2的Observables实现交互控制的方法
2018/12/27 Javascript
jQuery 判断元素是否存在然后按需加载内容的实现代码
2020/01/16 jQuery
Bootstrap简单实用的表单验证插件BootstrapValidator用法实例详解
2020/03/29 Javascript
JS 5种遍历对象的方式
2020/06/16 Javascript
[53:03]Optic vs TNC 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/18 DOTA
Python线程的两种编程方式
2015/04/14 Python
Python探索之ModelForm代码详解
2017/10/26 Python
python简单实例训练(21~30)
2017/11/15 Python
Python图像处理之简单画板实现方法示例
2018/08/30 Python
django使用channels实现通信的示例
2020/10/19 Python
Django利用elasticsearch(搜索引擎)实现搜索功能
2020/11/26 Python
CSS3使用transition属性实现过渡效果
2018/04/18 HTML / CSS
Styleonme中文网:韩国高档人气品牌
2017/06/21 全球购物
Hunkemöller瑞士网上商店:欧洲最大的内衣品牌之一
2018/12/03 全球购物
MYSQL支持事务吗
2013/08/09 面试题
《兰亭集序》教学反思
2014/02/11 职场文书
十八届三中全会个人学习材料
2014/02/13 职场文书
股东协议书
2014/04/14 职场文书
党的群众路线教育实践活动党员个人剖析材料
2014/10/08 职场文书
校友会致辞
2015/07/30 职场文书
聘任通知书
2015/09/21 职场文书