最新消息:该功能已推出 WordPress 插件版,使用更方便,功能更强大!详细介绍=>
文章页面显示百度是否收录这个功能在张戈博客已经测试有一段时间了。最开始的代码也是从网络上找的,只是自己用,所以也就没想着分享了,毕竟是人家的成果,而且自行百度也是可以找到的!
不过,既然有朋友问到可否分享下添加这个功能的教程,所以决定整理分享一下。
我一直是一个中度强迫症的完美主义者,所以别人已经分享的东西我一般不喜欢分享第二遍!但昨晚熬夜到三点,除了在新浪 SAE 搭建了一个二维码 API 之外,还将百度收录查询这个功能实现了自定义栏目优化!
功能名称:给 WordPress 添加百度是否收录的查询与显示
原版特性:通过 curl 在百度查询本页 url 并获取结果,如果存在就输出已收录,否则就是未收录,并且可点击提交 url
原版缺点:每次打开页面都需要在百度查询一遍,严重拖慢速度!当然可以利用缓存插件解决此问题。
改进特性:
i. 通过 curl 在百度查询 url 收录结果,如果已收录就将结果写入到文章的 post meta 记录中。待下一次再次打开页面时,先检查文章自定义栏目字段来判断是否已收录,若已收录则直接输出,而不再执行 curl 查询,从而解决了 curl 实时查询拖慢速度的问题!
ii. 若查询结果为已收录,亦会输出一个在百度查询文章标题的 a标签,用于查看文章排名,甚至可以查看是否被人转载或篡改!
iii. 管理员可以随时在后台文章编辑界面中的自定义栏目来修改是否已收录的结果,自定义名称为 baidu_record,1 为已收录,0 为未收录。
改进之后,如果是已收录的文章,将不会重复查询,从而解决了原版代码严重拖慢网站速度的缺憾!
下面是部署方法
①、编辑主题目录的 functions.php 文件,在最后一个?>前新增如下代码并保存:
/** * WordPress 显示百度是否收录功能(自定义栏目优化版) * https://zhang.ge/4617.html * DIY By 张戈博客 **/ function baidu_check($url,$post_id){ $baidu_record = get_post_meta($post_id,'baidu_record',true); if( $baidu_record != 1){ $url='http://www.baidu.com/s?wd='.$url; $curl=curl_init(); curl_setopt($curl,CURLOPT_URL,$url); curl_setopt($curl,CURLOPT_RETURNTRANSFER,1); $rs=curl_exec($curl); curl_close($curl); if(!strpos($rs,'没有找到该 URL。您可以直接访问') && !strpos($rs,'很抱歉,没有找到与') ){ update_post_meta($post_id, 'baidu_record', 1) || add_post_meta($post_id, 'baidu_record', 1, true); return 1; } else { return 0; } } else { return 1; } } function baidu_record() { global $wpdb; $post_id = ( null === $post_id ) ? get_the_ID() : $post_id; if(baidu_check(get_permalink($post_id), $post_id ) == 1) { echo '<a target="_blank" title="点击查看" rel="external nofollow" href="http://www.baidu.com/s?wd='.get_the_title().'">百度已收录</a>'; } else { echo '<a style="color:red;" rel="external nofollow" title="点击提交,谢谢您!" target="_blank" href="http://zhanzhang.baidu.com/sitesubmit/index?sitename='.get_permalink().'">百度未收录</a>'; } }
②、编辑文章模板(一般是 single.php),在合适的位置添加如下代码并保存:
<?php baidu_record(); ?>
比如,张戈博客就将其添加到了副标题当中。
若以上步骤都未出错,那现在访问文章页面就能看到百度是否已收录的效果了。当然,你要有兴趣还可以像张戈博客由于,将这个代码继续添加到首页或分类页面。
第一次访问可能会有点卡,当数据库存在记录之后,将直接从数据库查询,而不会有任何拖慢速度感觉了!
感觉自己都有程序猿的潜质了,总而言之,一入建站深似海,天天折腾无止境!继续折腾吧,骚年!!不折腾,做网站干啥,不 root,你买安卓干啥,不越狱你买爱疯干啥。。。。。
你要是做一个站长工具站 或者工具箱 估计不错
不root你买安卓干嘛,不折腾,你做独立博客干嘛,哈哈
好吧,我一直都没关注这些!
功能真是越来越丰富了啊
学习了哦!!!
博主的专业精神让人敬佩。昨天提到的问题。想不到今天就分享啦。只能说一个字。强!不过有个问题,博主。为什么我的留言在你的博客上面看不到呢?
所有内容有一个小时缓存。
牵涉到数据库的问题。就有点麻烦啦。也不知道修改后会出现什么问题。担心啊!
可以先使用非数据库版本。
这个高大上了,直接修改了数据库。
使用数据库版速度依然会被拖慢.
代码逻辑有问题,目前已修正。
博主已经是程序猿一枚了,这个功能也能折腾出来,太强大了
只是对原版代码的效率看不过去了,才“篡改”了代码。
能否请教个问题,使用了百度云加速还需要使用hyper cache这样的插件吗,最近发现经常首页会变成其它的页面,刷新缓存后又好了,知道是怎么回事吗
可以同时使用,我目前用的是360网站加速+wp-spuer-cache,未出现你这种异常情况。
如果是nginx服务器,那得针对wp-super-cache做一下规则设定。
我用的hyper cache,还用了一个安全插件iThemes Security,难道会是这个设置有问题?但是我找了好多次也没有找到相关的设置,而且每次刷新缓存又了了,太奇怪了
代码逻辑有问题.
curl
http://www.baidu.com/s?wd="文章标题"
若标题重复 或者其他网站已经有类似标题
就会有值,
if(!strpos($rs,'没有找到')){
return 1;
}else{
return 0;
}
结果值返回为1,就变成了已经收录.
实际我刚发布的文章才发布了2分钟.
对,是有这个问题,能不能修改成domain:url来检测是否被收录呢?这样比较准确
好啊好!
一入电信深似海,从此手机超难买 :cry:
同感~
没手机装卡,悲剧 :cry:
非常好的代码,在你的基础之上又加了好搜的,我的百度不怎么来,好搜来的多,所以就关注好搜了。。
还是添加纯代码来得直接,不过感觉这个功能实在没必要。
Jager同学,请教个小问题,我这篇文章http://www.dedewp.com/2463.html用到了文章中的代码,可是通过自定义字段查询未被百度收录的文章列表中却包含了已被百度收录的文章,结果页:http://www.dedewp.com/bai-no-du,是什么原因呢?能帮忙分析下不,不胜感激!
童鞋,我没时间。
没事,问题先放在这,有空再说,我也继续琢磨, :oops:
张哥,能不能修改一下为管理员可见,不是管理员不可见呢
看文章第一行,插件版
好文章,收走了,并做了一点改进
WordPress 百度收录检测与后台文章显示收录状态
麻烦问一下大佬,你这个储存在数据库的哪个表里的哪个地方啊???
wp_postmeta
不知道阿里云是否支持
你们这些,IT大佬,都这么低调吗,
为什么我添加后,没有收录的文章也显示已收录呢?