之前百度官方出了一款 WordPress 的结构化数据实时推送插件,该款 WordPress 插件的作用是向百度提交结构化数据的 xml,帮助站点保证百度蜘蛛对站点的抓取频率,但是推送页面不保证收录(http://zhanzhang.baidu.com/schema/index),但是百度官方并没有推出 Sitemap 的实时推送插件,其实 Sitemap 的实时推送才能最大几率的保证站点的页面被抓取并且被收录,不过大多数站点并没有开通 Sitemap 权限,以下是引用百度官方对实时推送的介绍:http://zhanzhang.baidu.com/wiki/215

好了进入正题,其实小编这次写这篇教程是为一位认识了好几年的基友写的~~他的 WordPress 站点也百度站长平台的 Sitemap 权限,但是又不知道如何来操作百度 Sitemap 的实时推送~好了闲话就不多说了~直接上代码:

function PushBaiDu($post_id,$post){
//百度推送接口地址
    $Push = '百度推送接口地址';
    $PushUrl = get_permalink($post_id);
    $PushDate = $post->post_data;
//构造推送 xml 数据
    $PushXml = '<?xml version="1.0" encoding="UTF-8"?>
    <urlset>
        <url>
            <loc><![CDATA['.$PushUrl.']]></loc>
            <lastmod>'.$PushDate.'</lastmod>
            <changefreq>daily</changefreq>
            <priority>0.9</priority>
        </url>
    </urlset>';
//创建 http 请求对象
    $wp_http_obj = new WP_Http();
//发送 http post 请求提交 xml 数据
    return $wp_http_obj->post($Push, array('body' => $PushXml, 'headers' => array('Content-Type' => 'text/xml')));
}
add_action('publish_post', 'PushBaiDu');

将以上代码加入到当前使用的 WordPress 主题的 functions.php 文件中即可,记得替换 $Push 变量的值为你们的百度 Sitemap 实时推送接口调用地址,如果您的站点没有开通百度 Sitemap 权限则此代码不可用。

Sitemap 实时推送接口获取地址:http://zhanzhang.baidu.com/sitemap/pingadd

加上以上代码后发布文章 WordPress 将会自动推送文章到百度的服务器~本站的博客聚集地实时推送以及评论福利的核心代码都和本教程的代码相似,下面来张薇晓朵四月份之前的推送列表截图:

2014.12.28 补充

如果使用以上代码出现报错:Warning: Missing argument 2 for PushBaiDu(),请将代码改成以下版本:

function PushBaiDu(){
    global $post_id;
    global $post;
//百度推送接口地址
    $Push = '百度推送接口地址';
    $PushUrl = get_permalink($post_id);
    $PushDate = $post->post_data;
//构造推送 xml 数据
    $PushXml = '<?xml version="1.0" encoding="UTF-8"?>
    <urlset>
        <url>
            <loc><![CDATA['.$PushUrl.']]></loc>
            <lastmod>'.$PushDate.'</lastmod>
            <changefreq>daily</changefreq>
            <priority>0.9</priority>
        </url>
    </urlset>';
//创建 http 请求对象
    $wp_http_obj = new WP_Http();
//发送 http post 请求提交 xml 数据
    return $wp_http_obj->post($Push, array('body' => $PushXml, 'headers' => array('Content-Type' => 'text/xml')));
}
add_action('publish_post', 'PushBaiDu');