前阵子有人分享了一个延迟发布feed的技巧,在WordPress用户间广为流传。其原理就是利用WordPress的filter机制,发现当前的请求是Feed,即在查询条件中加一条,限制post的发布时间为五分钟之前(原文的代码escape太厉害了,直接复制有错误):
[code lang=’php’]
/**
* puplish the content in the feed later
* $where ist default-var in WordPress (wp-includes/query.php)
* This function an a SQL-syntax
*/
function publish_later_on_feed($where) {
global $wpdb;
if ( is_feed() ) {
// timestamp in WP-format
$now = gmdate(‘Y-m-d H:i:s’);
// value for wait; + device
$wait = ‘5’; // integer
// http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html#function_timestampdiff
$device = ‘MINUTE’; //MINUTE, HOUR, DAY, WEEK, MONTH, YEAR
// add SQL-sytax to default $where
$where .= ” AND TIMESTAMPDIFF($device, $wpdb->posts.post_date_gmt, ‘$now’) > $wait “;
}
return $where;
}
add_filter(‘posts_where’, ‘publish_later_on_feed’);
?>[/code]
当时我看到之后也很兴奋,觉得非常之有用。因为我就经常在发布一篇文章之后马上发现有错误或者遗漏,赶紧修改,但是此时可能已经有些RSS reader过来抓取过了,我所做的修改不一定能被Feed订阅者收到(Atom Feed应该可以)。
不过当我加上这个功能,又写了一篇文章之后,发现了问题。在文章发布的时候,WordPress会向预定的一些服务器发送ping,通知它们这里有更新,赶紧来抓取。如果该服务器反应很迅速,糟了,它来抓取RSS的时候,发现并没有新的文章——被放鸽子了。它可不知道要等五分钟再来抓取,新文章只好经历漫长的等待才能被抓到。
所以要保证文章少出错,还得在发布之前多预览,多检查,而延迟发布RSS只能让你点击Publish按钮的时候更加勇猛。使用这个技巧一定要三思而后行。
为什么发布的时候发送ping消息很重要呢?如果不这样,那些RSS Reader只能盲目地周期性来查看,比如每天一次或者每隔3小时一次,Feed托管服务商也是这样。而在发布的同时通知它们,它们就会确切地知道你的blog有更新了,很快就会过来抓取,读者也就能在第一时间看到你的新文章了。
附带列一下我的Update Services列表:
http://rpc.pingomatic.com/
http://ping.feedburner.com/
http://www.zhuaxia.com/rpc/server.php
http://www.xianguo.com/xmlrpc/ping.php
http://blogsearch.google.com/ping/RPC2
http://blog.youdao.com/ping/RPC2
如果你使用feedsky的服务,当然也要把它的ping server(http://www.feedsky.com/api/RPC2)加上。
Leave a Reply