米扑博客:WordPress 百度收录检测与后台文章显示收录状态
WordPress 搭建个人博客,自娱自乐也好,分享知识爱折腾也好,百度收不收录,PR多少都无所谓。。。
恩,百度收录PR值,有总比没有好,知道收录状态总比不知道好,您说对吧
OK 咱们达成共识了,继续看下文
先前,米扑博客只加了百度和谷歌生成sitemap的网站地图 sitemap.html 、sitemap_baidu.xml 、sitemap.xml
后来,也不知道百度和谷歌到底收录了米扑博客,现在认认真真,勤勤奋奋,花时间花精力,写博客好几年了,感觉知名度还是不高
今天,我想知道他们俩到底收录了米扑博客有木有,恩,谷歌收录了咱也不知道,他认识我,我不认识他,百度大都没收录我的米扑博客,但是收录许多转载我的米扑博客的很多其他博客,真心气煞本小爷了。。。夜里挑灯写博客,众里寻她百度却不收录。。。不说了,一把鼻涕一把心酸累。。。泪 ?
先奉上效果图
接着,且听下文分解
一、插件实现
插件地址:https://wordpress.org/plugins/wp-baidu-record/
下载地址:wp-baidu-record.zip
二、代码实现 (推荐)
1. 添加代码到 functions.php
打开主题下的函数文件 functions.php
vim functions.php
添加如下代码:
/** 百度收录检测 **/ /** * 先查询数据库,查看收录状态 * 若没有收录,则需要爬取网页,并插入或更新数据库, 并返回收录结果! * * 米扑博客:WordPress 百度收录检测与后台文章显示收录状态 * https://blog.mimvp.com/2016/12/mimvp-bo-ke-wordpress-bai-du-shou-lu-jian-ce-yu-hou-tai-wen-zhang-xian-shi-shou-lu-zhuang-tai/ * * blog.mimvp.com * 2016.12.25 */ function baidu_included_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_included_check(get_permalink($post_id), $post_id ) == 1) { echo '<a style="color:blue;" target="_blank" title="点击查看" rel="external nofollow" href="http://www.baidu.com/s?wd=sitemap:blog.mimvp.com '.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>'; } }
如上代码,逻辑很简单,代码注释了米扑博客已经说得很详细了
梳理其原理如下:
第一步,通过curl在百度查询url收录结果,如果已收录就将结果写入到文章的post meta记录中。待下一次再次打开页面时,先检查文章自定义栏目字段来判断是否已收录,若已收录则直接输出,而不再执行curl查询
第二步,若查询结果为已收录,亦会输出一个在百度查询文章标题的a标签,用于查看文章排名,甚至可以查看是否被人转载或篡改!
第三步,管理员可以随时在后台文章编辑界面中的自定义栏目来修改是否已收录的结果,自定义名称为baidu_record,状态1为已收录,0为未收录。
小结,如果是已收录的文章,将直接查数据库字段,而不会重复curl爬取网页查询是否已收录,从而优化了网页打开速度
2. 添加显示代码
把下面的一行代码,添加到需要的模板里
<?php baidu_record(); ?>
例如,添加到单个文章页single.php,首页index.php,页面page.php,分类category.php,日期存档archive.php,搜索search.php,标签tag.php
本文,以单个文章页single.php 和 首页index.php 为例
1)添加到单个文章页single.php
<?php the_category(', ') ?>
<?php baidu_record(); ?>
打开一个博客文章页:WordPress 百度收录检测与后台文章显示收录状态
查看效果如下:
这样,每打开一篇文章,都会先查询数据库有没有收录,没有收录则curl爬取网页,若查询到收录则插入或更新数据库
2)添加到首页index.php
<?php the_category(', ') ?>
<?php baidu_record(); ?>
对的,代码是一样的,模板嘛,上效果图
打开网站非常慢,为了写这篇文章,我也是拼了,此方法仅用一次就够了
由此可知,这会拖累网页打开速度,特别是在没被百度收录时,爬取查询百度比较耗时
特别是,在大量未被收录时,效率将会极慢无比
但是,为了获得文章特别是老文章的收录状态(baidu_record字段),又不得不遍历一遍所有文章
方案1: 通过网站地图sitemap.xml 获取全部文章列表链接,用脚本逐个请求一遍,适合文章数很多,今后脚本可重复利用(推荐方案)
方案2: 添加到首页,然后手动点击每个页,适合文章少,不会编程的,每页都会发送N个curl请求,N大于等于你设置的每页文章数(大于的场景,自己去想哈,可以到米扑博客首页取数文章数)
至此,WordPress 百度收录检测并显示出来,已经讲完了,很简单
但是,问题还没完,你总不能每次都在首页查看收录状态吧,特别是发表文章数量大,百度还没收录的情况下,速度将奇慢无比!
WordPress 后台文章列表显示百度收录状态
下面,米扑博客讲介绍如何把百度收录状态显示到后台管理文章列表里,如本文开头的演示截图
这样即使网速慢,也是慢咱一个人,您说对吧
哈,你被我忽悠了,其实添加到后台不大会影响速度,因为我们只是查库状态,没有curl爬取,想想原理就明白了
效果图如本文开头,这里直接上代码,放到老地方:
打开主题下的函数文件 functions.php
vim functions.php
添加如下代码:
/** 后台管理文章显示ID **/ /**********文章添加自定义列***********/ add_filter('manage_posts_columns', 'add_postid_posts_columns'); function add_postid_posts_columns($book_columns) { $new_columns['cb'] = '<input type="checkbox" />'; $new_columns['id'] = __('ID'); $new_columns['title'] = _x( 'Title', 'column name' ); $new_columns['images'] = __( 'Images'); $new_columns['author'] = __('Author'); $new_columns['categories'] = __('Categories'); $new_columns['tags'] = __('Tags'); $new_columns['date'] = _x('Date', 'column name'); $new_columns['comments'] = _x('评论', 'column name'); $new_columns['views'] = _x('Views', 'column name'); $new_columns['baidu_record'] = _x('百度收录', 'column name'); return $new_columns; } add_action('manage_posts_custom_column', 'manage_book_columns', 10, 2); function manage_book_columns($column_name, $id) { global $wpdb; switch ($column_name) { case 'id': echo $id; break; case 'images': $num_images = $wpdb->get_var($wpdb->prepare("SELECT COUNT(*) FROM $wpdb->posts WHERE post_parent = {$id};")); echo $num_images; break; case 'baidu_record': $baidu_record = $wpdb->get_var($wpdb->prepare("SELECT meta_value FROM $wpdb->postmeta WHERE post_id = {$id} and meta_key = 'baidu_record';")); @$record_url='http://zhanzhang.baidu.com/sitesubmit/index?sitename='.get_permalink(); @$result="<a style='color:red;' target='_blank' href=\"$record_url\">未收录</a>"; if($baidu_record=="1") { // echo $baidu_record; // echo "是"; $record_url='http://www.baidu.com/s?wd=sitemap:blog.mimvp.com '.get_the_title(); @$result="<a style='color:blue;' target='_blank' href=\"$record_url\">已收录</a>"; } echo $result; break; default: break; } } /**************页面添加自定义列************/ add_filter('manage_pages_columns', 'add_new_pages_columns'); function add_new_pages_columns($book_columns) { $new_columns['cb'] = '<input type="checkbox" />'; $new_columns['id'] = __('ID'); $new_columns['title'] = _x( 'Title', 'column name' ); $new_columns['author'] = __('Author'); $new_columns['date'] = _x('Date', 'column name'); $new_columns['comments'] = _x('评论', 'column name'); $new_columns['views'] = _x('Views', 'column name'); return $new_columns; } add_action('manage_pages_custom_column', 'manage_pages_columns', 10, 2); function manage_pages_columns($column_name, $id) { global $wpdb; switch ($column_name) { case 'id': echo $id; break; default: break; } }
实现原理,见我的米扑博客先前的一篇文章,讲得还是很认真的
总结与思考
本文在张戈博客和自己想法的结合,也希望更多朋友参考本文,做出更好的方案
1. 脚本实现遍历博客全部文章、页面等,定时自动在夜深人静里,逐个遍历请求博客文章列表,如凌晨三点(米扑博客已实现)
2. 把百度没收录的文章列表,自动提交到百度收录接口里,可能需要登录百度后才行(米扑博客实现了一半)
3. 除了百度,还检测搜狗、360、Bing、Google等收录状态,并一起自动提交(未实现)
4. 在张戈插件里,把以上功能都实现,分享出来(未实现)
5. 整合网站地图sitemap.php / .xml / .html,做一个SEO超级插件(未实现)
以上想法,我在有时间时会逐步探索实现,目前创业米扑科技,写博客的时间和精力有限
这里,希望有更多追求技术,爱折腾的技术天才,站在我们肩上,把功能和体验做得更棒!
参考推荐:
原创插件:百度收录查询和显示WordPress插件 (张戈博客)
版权所有: 本文系米扑博客原创、转载、摘录,或修订后发表,最后更新于 2017-10-23 22:35:36
侵权处理: 本个人博客,不盈利,若侵犯了您的作品权,请联系博主删除,莫恶意,索钱财,感谢!