WordPress自动/主动推送到百度

  • 发表于
  • WordPress

以前都是用sitemap,今天不说sitemap,提供另外两种方法,自动和主动推送提交给百度:

Javascript自动推送

请将以下代码安装在网站页面中,安装完成后即可实现链接自动推送功能。

<script>
(function(){
var bp = document.createElement('script');
var curProtocol = window.location.protocol.split(':')[0];
if (curProtocol === 'https') {
bp.src = 'https://zz.bdstatic.com/linksubmit/push.js';
}
else {
bp.src = 'http://push.zhanzhang.baidu.com/push.js';
}
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(bp, s);
})();
</script>

如果站长使用PHP语言开发的网站,可以按以下步骤操作:

  1. 创建名为“baidu_js_push.php”的文件,文件内容是上述自动推送JS代码;
  2. 在每个PHP模板页文件中的 <body> 标记后面添加一行代码:
<?php include_once("baidu_js_push.php") ?>

PHP自动推送

//百度站长的 JS 代码实现自动推送
add_action( 'wp_enqueue_scripts', 'fanly_baidu_zz_enqueue_scripts' );
function fanly_baidu_zz_enqueue_scripts(){
wp_enqueue_script( 'baidu_zz_push', 'http://push.zhanzhang.baidu.com/push.js');
}

PHP主动推送一

add_action('save_post', 'wpjam_save_post_notify_baidu_zz', 10, 3);
function wpjam_save_post_notify_baidu_zz($post_id, $post, $update){
	if($post->post_status != 'publish') return;

	$baidu_zz_api_url	= 'http://data.zz.baidu.com/urls?site=your_site_url&token=your_token';
	//请到百度站长后台获取你的站点的专属提交链接
	
	$response	= wp_remote_post($baidu_zz_api_url, array(
		'headers'	=> array('Accept-Encoding'=>'','Content-Type'=>'text/plain'),
		'sslverify'	=> false,
		'blocking'	=> false,
		'body'		=> get_permalink($post_id)
	));
}

PHP主动推送二

①、WrodPress 通用方式

/**
* WordPress发布文章主动推送到百度,加快收录保护原创【WordPress通用方式】
*/
if(!function_exists('Baidu_Submit')){
function Baidu_Submit($post_ID) {
$WEB_TOKEN= 'xxxxxxxxxxx';//这里请换成你的网站的百度主动推送的token值
$WEB_DOMAIN = get_option('home');
//已成功推送的文章不再推送
if(get_post_meta($post_ID,'Baidusubmit',true) == 1) return;
$url = get_permalink($post_ID);
$api = 'http://data.zz.baidu.com/urls?site='.$WEB_DOMAIN.'&token='.$WEB_TOKEN;
$request = new WP_Http;
$result = $request->request( $api , array( 'method' => 'POST', 'body' => $url , 'headers' => 'Content-Type: text/plain') );
$result = json_decode($result['body'],true);
//如果推送成功则在文章新增自定义栏目Baidusubmit,值为1
if (array_key_exists('success',$result)) {
add_post_meta($post_ID, 'Baidusubmit', 1, true);
}
}
add_action('publish_post', 'Baidu_Submit', 0);
}

②、curl_init 方式

/**
* WordPress发布文章主动推送到百度,加快收录保护原创【curl_init方式】
*/
if(!function_exists('Baidu_Submit') && function_exists('curl_init')) {
function Baidu_Submit($post_ID) {
$WEB_TOKEN='xxxxxxxxx';//这里换成你的网站的百度主动推送的token值
$WEB_DOMAIN=get_option('home');
//已成功推送的文章不再推送
if(get_post_meta($post_ID,'Baidusubmit',true) == 1) return;
$url = get_permalink($post_ID);
$api = 'http://data.zz.baidu.com/urls?site='.$WEB_DOMAIN.'&token='.$WEB_TOKEN;
$ch= curl_init();
$options =array(
CURLOPT_URL => $api,
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POSTFIELDS => $url,
CURLOPT_HTTPHEADER => array('Content-Type: text/plain'),
);
curl_setopt_array($ch, $options);
$result = json_decode(curl_exec($ch),true);
//如果推送成功则在文章新增自定义栏目Baidusubmit,值为1
if (array_key_exists('success',$result)) {
add_post_meta($post_ID, 'Baidusubmit', 1, true);
}
}
add_action('publish_post', 'Baidu_Submit', 0);
}

③、file_get_contents 方式

鉴于有个别站长反馈代码添加后,发布或更新文章,自定义栏目中都不会出现我们期望的baidusubmit,我要他们检查 token 和域名,也反馈是正确的,直到我亲自给一个站长 Debug 时才发现是他主机的 curl_exec()函数被禁用了!既然这个函数都不能用了,那代码也肯定无法正常推送了!
于是,我额外写了一个普遍支持的 file_get_contents 方式,代码如下:

/**
* WordPress发布文章主动推送到百度,加快收录保护原创【file_get_contents方式】
*/
if(!function_exists('Baidu_Submit')) {
function Baidu_Submit($post_ID) {
$WEB_TOKEN='xxxxxxxxx';//这里换成你的网站的百度主动推送的token值
$WEB_DOMAIN=get_option('home');
//已成功推送的文章不再推送
if(get_post_meta($post_ID,'Baidusubmit',true) == 1) return;
$url = get_permalink($post_ID);
$api = 'http://data.zz.baidu.com/urls?site='.$WEB_DOMAIN.'&token='.$WEB_TOKEN;
$data = array (
'http' => array (
'method' => 'POST',
'header'=> "Content-Type: text/plain",
"Content-Length: ".strlen($url)."rn",
'content' => $url
)
);
$data = stream_context_create($data);
$result = file_get_contents($api, false, $data);
$result = json_decode($result,true);
//如果推送成功则在文章新增自定义栏目Baidusubmit,值为1
if (array_key_exists('success',$result)) {
add_post_meta($post_ID, 'Baidusubmit', 1, true);
}
}
add_action('publish_post', 'Baidu_Submit', 0);
}

Ps:file_get_contents 的运行效率应该是略低于curl的,不过就推送一条数据,就基本没有差别啦!如果你使用第一种方式没有成功,那么就试试 file_get_contents 方式吧!

以上三段代码取自:via1via2,都放在functions.php下。

现在发布新文章,文章地址将会被主动推送到百度。被成功推送的文章,将自动出现如下自定义栏目,从而避免代码重复推送的尴尬,如果你需要更新文章再次推送数据,那么删除或修改这个自定义栏目即可再次被推送。

baidusubmit3

代码部署

从上面选好合适的代码后(推荐①),先打开百度官方页面:http://zhanzhang.baidu.com/linksubmit/index,获取你网站的专属的 token 值,替换到代码中的 "xxxxxxxxx"(Ps:域名已更新为动态变量,无需另外更改)。

百度官方推送参考:http://zhanzhang.baidu.com/linksubmit/index