是否有一种简单的方法来确保外部馈送(通过fetch_feed()
) 仅通过cron获取,而不是在普通用户访问站点时获取?这是出于性能方面的原因,我想尽量减少页面加载时间。
在正常请求中加载提要的唯一时间可能是缓存为空(第一次加载)时,也可能是登录用户访问页面时(因为我将是唯一一个拥有用户帐户的用户)。
是否有一种简单的方法来确保外部馈送(通过fetch_feed()
) 仅通过cron获取,而不是在普通用户访问站点时获取?这是出于性能方面的原因,我想尽量减少页面加载时间。
在正常请求中加载提要的唯一时间可能是缓存为空(第一次加载)时,也可能是登录用户访问页面时(因为我将是唯一一个拥有用户帐户的用户)。
我的建议是为fetch_feed()
. 通过WordPress的cron调用包装器函数,您不应该有问题。
比如:
function schedule_fetch_feeds() {
if ( ! wp_next_scheduled( \'cron_fetch\' ) ) {
wp_schedule_event( time(), \'hourly\', \'cron_fetch\', \'http://blog1.url/feed\' );
wp_schedule_event( time(), \'hourly\', \'cron_fetch\', \'http://blog2.url/feed\' );
}
}
function fetch_feed_on_cron( $url ) {
$feed = fetch_feed( $url );
delete_transient( "feed-" . $url );
set_transient( "feed-" . $url, $feed, 60*60 );
}
add_action( \'wp\', \'schedule_fetch_feeds\' );
add_action( \'cron_fetch\', \'fetch_feed_on_cron\', 10, 1 );
记住,我还没有机会测试这个您可以使用以下方法从瞬态中提取馈电:
function get_cached_feed( $url ) {
$feed = get_transient( "feed-" . $url );
if ( $feed ) return $feed;
$feed = fetch_feed ( $url );
set_transient( "feed-" . $url, $feed, 60*60 );
return $feed;
}
如果瞬态存在,函数将获取它并返回它。如果没有,函数将手动获取它,缓存它,然后仍然返回它。打破我自己的规则,添加第二个答案。。。但由于一个非常具体的原因。。。
我仔细查看了fetch_feed()
针对Rarst对原始问题的评论:
这里的圣杯是让本机fetch\\u feed()在cron中异步获取所有提要,而不是在用户加载前端页面时
实际功能代码为:
function fetch_feed($url) {
require_once (ABSPATH . WPINC . \'/class-feed.php\');
$feed = new SimplePie();
$feed->set_feed_url($url);
$feed->set_cache_class(\'WP_Feed_Cache\');
$feed->set_file_class(\'WP_SimplePie_File\');
$feed->set_cache_duration(apply_filters(\'wp_feed_cache_transient_lifetime\', 43200, $url));
do_action_ref_array( \'wp_feed_options\', array( &$feed, $url ) );
$feed->init();
$feed->handle_content_type();
if ( $feed->error() )
return new WP_Error(\'simplepie-error\', $feed->error());
return $feed;
}
省去你阅读SimplePie()
对象这个$feed->init()
函数首先检查是否正在缓存提要,如果是,则从缓存中检索,而不是从原始源重新请求提要。每个feed缓存43200秒(或12小时),这是瞬态的生存期。您可以使用“wp\\u feed\\u cache\\u transient\\u lifetime”筛选器向上或向下修改此选项。
因此,如果您面临与提要相关的性能问题,那么您可能还有其他问题。
您如何存储(&A);通过本机linux cron在选项表中保持更新,只需在页面上获取(数据库读取)。这样,页面加载时间就不会受到任何影响。
Edit: 阿尔丽特!如果您熟悉alternate cron在WordPress中的工作方式,请创建另一个进程,然后继续其工作。采用这种方法似乎是一个很好的解决方案,可以解决您的案例以及启动此类请求的瞬态。
这个rss提要问题已经解决了,但现在当我尝试此代码时<a href=\"<?php echo get_post_comments_feed_link($feed); ?>\">RSS feed of this post</a> 在我的归档页面上,我得到了错误的url提要我想要的是当我点击这个提要时,我应该得到当前页面的所有提要,也就是说,我的url是http://mbas.in/location/mba-in-ghana 位置是我的自定义分类法,如果我在url中写这个h