如何让WordPress向百度主动提交文章-2020年更新

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

wordpress 581849 1280 - operation, sharing - 如何让Wordpress向百度主动提交文章-2020年更新

既然使用基于PHP的Wordpress,我们可以直接使用PHP推送方式。

PHP推送方式

百度官方页面对php推送的描述非常简单,甚至没有给出具体实例。实际PHP推送采用的是POST方式,内容格式是数组(array)。

1 Wordpress baidu submit 2020 - operation, sharing - 如何让Wordpress向百度主动提交文章-2020年更新

因此只需要使用类似的字段,借助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);
微信打赏支付宝打赏

感谢您的支持!

文章来源:卡米雷特的小站www.kamilet.cn)转载请注明出处。

卡米雷特

视觉控&技术控,不断学习中!

您可能还喜欢...

发表回复

您的电子邮箱地址不会被公开。