WordPress给文章添加百度是否已收录查询和显示功能(数据库优化版)

时间:9个月前   阅读:133

    文章页面显示百度是否收录这个功能在张戈博客已经测试有一段时间了。最开始的代码也是从网络上找的,只是自己用,所以也就没想着分享了,毕竟是人家的成果,而且自行百度也是可以找到的!
    不过,既然有朋友问到可否分享下添加这个功能的教程,所以决定整理分享一下。
    我一直是一个中度强迫症的完美主义者,所以别人已经分享的东西我一般不喜欢分享第二遍!但昨晚熬夜到三点,除了在新浪SAE搭建了一个 二维码API之外,还将百度收录查询这个功能实现了数据库储存优化!

功能名称:给 WordPress添加百度是否收录的查询与显示
原版特性:通过curl在百度查询本页url并获取结果,如果存在就输出已收录,否则就是未收录,并且可点击提交url
原版缺点:每次打开页面都需要在百度查询一遍,严重拖慢速度!当然可以利用缓存插件解决此问题。

改进特性:
    1、通过curl在百度查询url收录结果,如果已收录就将结果写入到数据库。待下一次再次打开页面时,先检查数据库相应字段来判断是否已收录,若已收录则直接输出,而不再执行curl查询,从而解决了curl实时查询拖慢速度的问题!
    2、若查询结果为已收录,亦会输出一个在百度查询文章标题的a标签,用于查看文章排名,甚至可以查看是否被人转载或篡改!

先分享我目前在用的数据入库版本的使用方法:
①、给 WordPress数据库的wp_posts表新增baidu_record字段
i. 进入 phpMyAdmin,先选择WordPress数据库,然后点击SQL:
ii. 粘贴如下代码并执行,即可给wp_posts新增一个baidu_record字段:ALTER TABLE `wp_posts`  ADD `baidu_record` tinyint(1) NULL DEFAULT 0;
Ps:涉及操作数据库,任何时候都应该记得先将数据库导出一份备份,以防万一!若执行报错:
i、请检查表前缀是不是wp_,若不是请将代码改成实际的表名称再试;
ii、若还是报错,那可能是当前帐号没有添加字段的权限,那就自行想办法找到权限更高的帐号来操作。

②、编辑主题目录的functions.php文件,在最后一个?>前新增如下代码并保存:

function baidu_check($url){
        global $wpdb;
        $post_id = ( null === $post_id ) ? get_the_ID() : $post_id;
        $query="SELECT baidu_record FROM $wpdb->posts WHERE $wpdb->posts.ID='$post_id'";
   $result = $wpdb->get_var($query);
   if ( $result != 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,'没有找到')){
                $updata="UPDATE $wpdb->posts set baidu_record = 1 WHERE ID='$post_id'";
        $wpdb->query($updata);
                return 1;
            } else { 
                return 0; 
            }
        } else {
            return 1;
         }
}
function baidu_record() {
    if(baidu_check(get_permalink()) == 1) {
        echo '<a target="_blank" title="点击查看" rel="external nofollow" href="http://zhangge.net/go/?url=http://www.baidu.com/s?wd='.get_the_title().'">百度已收录</a>';
   } else {
        echo '<a style="color:red;" rel="external nofollow" title="点击提交,谢谢您!" target="_blank" href="http://zhangge.net/go/?url=http://zhanzhang.baidu.com/sitesubmit/index?sitename='.get_permalink().'">百度未收录</a>';
    }
}


③、编辑文章模板(一般是single.php),在合适的位置添加如下代码并保存:<?php print baidu_record(); ?>
    若以上步骤都未出错,那现在访问文章页面就能看到百度是否已收录的效果了。当然,你要有兴趣还可以像 张戈博客由于,将这个代码继续添加到首页或分类页面。
    第一次访问可能会有点卡,当数据库存在记录之后,将直接从数据库查询,而不会有任何拖慢速度感觉了!

当然,还是有朋友担心操作数据库会出问题,所以最后还是分享这个功能的实时查询版本:
①、编辑主题目录的functions.php,在最后一个?>之前添加如下代码并保存:

function baidu_check($url){
            $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,'没有找到')){
                return 1;
            } else {
                return 0;
    }
}
function baidu_record() {
    if(baidu_check(get_permalink()) == 1) {
        echo '<a target="_blank" title="点击查看" rel="external nofollow" href="http://zhangge.net/go/?url=http://www.baidu.com/s?wd='.get_the_title().'">百度已收录</a>';
   } else {
        echo '<a style="color:red;" rel="external nofollow" title="点击提交,谢谢您!" target="_blank" href="http://zhangge.net/go/?url=http://zhanzhang.baidu.com/sitesubmit/index?sitename='.get_permalink().'">百度未收录</a>';
    }
}


②、编辑文章模板文件(一般为single.php),在合适的位置添加如下代码并保存:<?php print baidu_record(); ?>
    不出问题的话,访问文章页面也可以看到同样的效果了,当然这个是实时查询的,每次打开页面都要执行一遍curl,如果主机配置和网络不给力的话,可能会比较吃力!当然,你可以用wp-super-cache这类缓存插件通过缓存页面来解决这个问题!
    感觉自己都有程序猿的潜质了,臭屁一下。以上2种版本可根据个人喜好以及主机实际情况选择一个即可!总而言之,一入建站深似海,天天折腾无止境!继续折腾吧,骚年!!不折腾,做网站干啥,不root,你买安卓干啥,不越狱你买爱疯干啥。。。。。

上一篇:Emlog侧边栏日志标题字数控制

下一篇:不修改内核实现Emlog分页的上页、下页效果

网友评论