17713433920 info@mac163.com

很多站长在更新WP网站文章的时候无论是采集或者复制内容或者是WordPress多作者博客,也许你会希望发布文章的时间不要凑在一起,有一定的时间间隔可能更适合读者。比如,让WordPress每篇文章的发布时间至少间隔1小时,就是一个不错的做法。

设置WordPress每篇文章的发布时间的间隔
设置WordPress每篇文章的发布时间的间隔

将下面的代码添加到当前WordPress主题或者子主题的functions.php函数文件中:

//设定每篇文章的发布间隔 
function force_time_between_posts($data, $postarr) {
 global $wpdb;
 if (empty($postarr['ID'])) return $data;  $latest = $wpdb->get_var("
 SELECT post_date
 FROM {$wpdb->posts} 
 WHERE post_status IN('future','publish') 
 AND post_type = 'post' 
 AND ID != {$postarr['ID']}
 ORDER BY post_date DESC
 LIMIT 1");
 $distance = 60; // 时间间隔(分钟)
 $latest = strtotime($latest);
 $current = strtotime($data['post_date']);  if ($latest < $current) { $diff = $current - $latest; } else { $diff = 0; } if ($diff >= 0 && $diff < ($distance * 60)) {
 $new_date = $latest + ($distance * 60);
 $date = date('Y-m-d H:i:s',$new_date);
 $date_gmt = get_gmt_from_date($date);
 $data['post_date'] = $date;
 $data['post_date_gmt'] = $date_gmt;
 $data['post_status'] = 'future';
 }
 return $data;
}
add_action('wp_insert_post_data','force_time_between_posts',1,2);

以上代码的 15 行的 60 为时间间隔,你可以根据自己的需要修改,默认为 60 分钟。

代码的效果:发布新文章时,会自动检测上一篇文章的发布时间,如果超过60分钟,就直接发布,如果小于60分钟,就自动定时间隔60分钟发布。需要注意的是,所检测的是所有已发布和定时发布的文章中的最后一篇。如果最后定时的那篇文章是第二天早上8点,那你后面写的文章,想定时到第二天早上8点以前都是不允许的,会自动定时为9点。

从上述代码我们经过反复测试发现如果我们更新以前的文章或者页面,时间会随之发生变化,这明显是一个BUG,那么我们找到了修复此BUG的方法,改进的代码如下:

function force_time_between_posts($data, $postarr) {
	global $wpdb;
	if (empty($postarr['ID'])) return $data;
 
	$latest = $wpdb->get_var("
		SELECT post_date
		FROM {$wpdb->posts} 
		WHERE post_status IN('future','publish') 
		AND post_type = 'post' 
		AND ID != {$postarr['ID']}
		ORDER BY post_date DESC
		LIMIT 1");
	$distance = 60; // 文章间隔分钟数
	$latest = strtotime($latest);
	$current = strtotime($data['post_date']);
 	if ($latest < $current) {
		$diff = $current - $latest;
	} else { 
		$diff = 0;
	}
 	
	if ($diff >= 0 && $diff < ($distance * 60) && $current<time()+($distance * 60) && $current+($distance * 60)>=time()) { #首先,文章发布时间要小于现在的时间加你的时间间隔,其次,文章发布时间+你的时间间隔要大于现在的时间(未来的),且文字发布时间和最新文章发布时间的时间间隔要大于0小于你的时间间隔,才会生效
	#上面的if我添加了个判定修正了编辑未来的文章时间会继续推后的BUG
		$new_date = $latest + ($distance * 60);
		$date = date('Y-m-d H:i:s',$new_date);
		$date_gmt = get_gmt_from_date($date);
		$data['post_date'] = $date;
		$data['post_date_gmt'] = $date_gmt;
		$data['post_status'] = 'future';
	}
	return $data;
}
add_action('wp_insert_post_data','force_time_between_posts',1,2);

修正了一些BUG,编辑过去的文章时间不会变动。


微信二维码

微信扫描二维码联系我们!
我们在微信上24小时期待你的声音
提供外贸路由器设备产品,轻松翻墙,解答:WP主题推荐,WP网站建设,Google SEO,百度SEO,专业服务器环境搭建等!


需要提供WordPress主题/插件的汉化服务可以随时联系我们!另外成品WordPress网站以及半成品WordPress网站建设,海外Google SEO优化托管服务,百度SEO优化托管服务,Centos/Debian服务器WP专用环境搭建,WP缓存服务器搭建,我们都是你的首选,拥有多年WP开源程序服务经验,我们一直在坚持客户体验,没有最好,只有更好!
回到顶部