WordPress给文章添加百度是否已收录|自动判断文章是否被百度收录(优化版)

我们先来看一下优化后的效果图:

效果图1效果图2

最近,梦雪在百度看到一篇WordPress给文章添加百度是否已收录的教程,但将它添加到本站后发现一个问题:查询结果不准确(百度未收录的文章也显示已收录)百度到的检测文章是否被百度收录教程基本上全都有这一错误。

经过我多次检查、修改,终于发现问题的原因。

原版特性:

  • 通过curl在百度查询当前页面(文章)的url并获取结果,如果在结果中没有查找到”没有找到该URL。您可以直接访问“和”很抱歉,没有找到与“字符串,则表示百度已收录并更新自定义字段或添加自定义字段到当前文章。待下一次再次打开页面时,先检查自定义字段的值是否为1来判断是否已收录,若已收录则直接输出,而不再执行curl查询

原版缺点:

  • 打开百度未收录的文章依然输出已收录

改进特性:

  • 通过curl在百度查询当前页面(文章)的url并获取结果,如果strpos()函数查找到了您设定的站点标题字样,说明百度已收录,反之。
  • 百度已收录时输出绿色的文本,未收录时输出红色的文本

我们先来分析一下在百度搜索到的检测文章是否被百度收录的PHP代码:

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>';
   }
}

在上面一段代码中,我们通过curl在百度查询当前页面(文章)的url并获取结果,如果在结果中没有查找到”没有找到该URL。您可以直接访问“和”很抱歉,没有找到与“字符串,则表示百度已收录并更新自定义字段或添加自定义字段到当前文章。待下一次再次打开页面时,先检查自定义字段的值是否为1来判断是否已收录,若已收录则直接输出,而不再执行curl查询,从而解决了curl实时查询拖慢速度的问题!

那么问题在哪呢?没有收录的文章为什么也显示已收录呢?因为我们在使用curl查询当前文章的url并获取结果后,通过strpos()函数来查找”没有找到该URL。您可以直接访问“和”很抱歉,没有找到与“字符串,问题就出在strpos()函数这里。

我们用手机手动查询当前文章的url并获取结果,可以在浏览器输入框中输入https://www.baidu.com/s?wd=您的文章url来查询获取结果,发现并没有出现通过strpos()函数查找的字符串。

结果图1

好,我们再来看一下电脑版网页的结果,直接上图:

结果图2

我们发现结果中出现了”很抱歉,没有找到与“的字样,这样一来我们就可以断定第一个strpos()函数查找的字符串是无效的,删掉!

虽然我们使用电脑版网页获取结果里出现了”很抱歉,没有找到与“的字样,但是代码默认是查询手机版网页的,上文中我们也说过手机版网页获取到的结果是没有strpos()函数查找的字符串的。所以,当我们打开未收录的文章时,代码会默认查询手机版网页的结果,检测到没有”很抱歉,没有找到与“字样。导致了代码误判断,从而出现了文章未收录却显示已收录的bug。

下面我将给大家讲解一下如何修复这个bug
我们的站点标题是固定不变的吧?那么我们就可以从这里下手。

我们可以将strpos()函数查找的字符串修改为自己的站点标题,去掉!号,因为加上!号后判断条件就变成非了,因此我们不需要它。这样一来当我们点开文章的时候,代码会获取当前文章的url结果,如果strpos()函数查找到了您设定的站点标题字样,说明百度已收录,反之。下面我将优化后的代码分享出来供学习使用!

/**
 * WordPress 显示百度是否收录功能(自定义栏目优化版)
 * https://zhang.ge/4617.html
 * DIY By 张戈博客 
 * 梦雪优化
 * https://www.aidemx.cn
**/
function baidu_check($url,$post_id){
    //get_post_meta() 获取自定义字段
    $baidu_record  = get_post_meta($post_id,'baidu_record',true);
    if( $baidu_record != 1){
        $url='https://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,'教程网') ){
            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 style="color:green;" target="_blank" title="点击查看" rel="external nofollow" href="https://www.baidu.com/s?wd='.get_the_title().'">百度已收录</a>';
   } else {
        echo '<a style="color:red;" rel="external nofollow" title="点击提交,谢谢您!" target="_blank" href="https://zhanzhang.baidu.com/sitesubmit/index?sitename='.get_permalink().'">百度未收录</a>';
   }
}

欢迎加入AIDE教程网官方交流群:758110864

版权声明:本文为AIDE教程网原创文章,转载请附上原文出处链接和本声明。
本文链接:https://www.aidemx.cn/1762.html

 版权声明:本文为AIDE教程网原创文章,转载请附上原文出处链接和本声明
本文链接: https://www.aidemx.cn/1762.html

梦雪

专注于AIDE教程分享

留下你的评论

*评论支持代码高亮<pre class="prettyprint linenums">代码</pre>

相关推荐