如何让WordPress向百度主动提交文章-2020年更新
我们此前介绍过使用向百度主动推送新文章的方法,本站也应用了同样的方法。然而最近久违地查看了一下百度站长工具,却发现不知什么时候主动推送更新了……之前的接口地址发生了变化,甚至自己的token也和之前不一样了。也许大家早就知道了,只是我太久没关注百度SEO了……

既然使用基于PHP的Wordpress,我们可以直接使用PHP推送方式。
PHP推送方式
百度官方页面对php推送的描述非常简单,甚至没有给出具体实例。实际PHP推送采用的是POST方式,内容格式是数组(array)。

因此只需要使用类似的字段,借助WP_Http发送请求即可完成POST:
array( 'method' => 'POST', 'body' => URL数组 , 'headers' => 'Content-Type: text/plain')
那么我们可以使用如下代码完成推送:
if(!function_exists('baidu_submit')){
function baidu_submit($post_ID) {
//填写你的token,可从百度站长工具中得到
$baidu_token = '';
//自动获取当前首页,如使用多站点,请填写文章站URL
$baidu_site = get_option('home');
//检查文章是否被提交过,如true则跳过
if(get_post_meta($post_ID,'baidu_mark',true) == true)
return;
/*以下2项选择1项,去除前方的双斜线*/
//仅提交文章链接
$urls = get_permalink($post_ID);
//提交文章链接,以及对应的/mip/链接
//$urls = array($urls , $urls + 'mip/');
//发起提交
$API = 'http://data.zz.baidu.com/urls?site='.$baidu_site.'&token='.$baidu_token;
$request = new WP_Http;
$result = $request->request( $API , array( 'method' => 'POST', 'body' => $urls , 'headers' => 'Content-Type: text/plain') );
$result = json_decode($result['body'],true);
//推送成功时,返回success(int,本次成功条数)、remain(int,本日剩余条数)
//检查到success存在,即为文章加入baidu_mark的meta值
if (array_key_exists('success', $result)) {
add_post_meta($post_ID, 'baidu_mark', true, true);
}
}
add_action('publish_post', 'baidu_submit', 0);
}
推送AMP页面
注意推送方式可以灵活多变,比如你的网站同时有mip和amp页面,即如果文章URL是:
https://www.kamilet.cn/hdmi-vs-dvi/
那么同时会有这两个URL生效:
https://www.kamilet.cn/hdmi-vs-dvi/mip/
https://www.kamilet.cn/hdmi-vs-dvi/amp/
则可以将第14行改为:
$urls = array($urls , $urls + 'mip/' , $urls + 'amp/');
检查提交结果
在22-24行,可以改变检查方式。比如改为:
if (array_key_exists('success', $result)) {
if ($result['success']) >= 2{
add_post_meta($post_ID, 'baidu_mark', true, true);
}
}
这样修改后,只有当成功提交了2条链接时,文章才会被视为成功提交,否则下次发布时会再次尝试提交。
比如,在使用mip页面时,我们需要同时提交2条URL。那么如果success返回值不是2,说明我们的原页面或mip页面未提交成功。那么,我们应选择不插入meta值(也就是代码里的设置),或者插入一个false进行标记。
修改触发时机
在原代码中,推送是在发布文章的时候出发的,也就是在publish_post动作发生时。你可以添加代码,让WordPress在保存(修改)文章等动作时再次尝试推送,反正如果文章有meta标记,是不会浪费我们的推送次数的。
在保存文章时,尝试推送(替换第57行或添加在第57行后)。
add_action('save_post', 'baidu_submit', 0);
在修改文章时,尝试推送(替换第57行或添加在第57行后)。
add_action('edit_post', 'baidu_submit', 0);
在发布页面时,尝试推送(替换第57行或添加在第57行后)。
add_action('publish_page', 'baidu_submit', 0);