我有一个wp_cron,我每小时都会跑。
cron调用一个迭代自定义帖子类型的函数。然后使用标题和一些元数据来从远程服务器中抓取结果。
问题是由于帖子的数量,抓取需要很长时间。我想通过一次迭代25个帖子将分割分成块。使用query_posts中的offset参数很容易,但是如何动态add_action()并传递偏移量变量?
在 functions.php
中if ( ! wp_next_scheduled( 'my_task_hook' ) ) {
wp_schedule_event( time(), 'hourly', 'my_task_hook' );
}
add_action( 'my_task_hook', 'rock_n_roll' );
我的scraper.php看起来像这样
function rock_n_roll($offset) {
query_posts(array(
'post_type' => 'wine',
'order' => 'ASC',
'posts_per_page' => -1,
'offset' => $offset
));
while (have_posts()) : the_post();
//compare values against scraped results
//write results to DB with update_post_meta
endwhile;
}
基本上我需要一种动态add_action()的方法,每次将$ offset的值递增25。
答案 0 :(得分:0)
你的$ Offset从另一个源传递给函数..所以我可以想象,像:
$Var = $Pre_definedoffset;
$Var = $Pre_definedoffset + 25;
rock_n_roll($var);
这只是我从您的代码中看到的假设。
在代码推送函数之前,您需要修改包含传递给函数的整数的变量。
答案 1 :(得分:0)
您可以将变量传递给add_action():
add_action( $tag, $function_to_add, $arg );
但是你也可以使用do_action()而不是每次你的cron运行时添加动作:
do_action( $tag, $arg )
无论如何,将$offset
存储在某个地方是件好事,所以我看到两个选项:
将您的持久值存储在WP_Object_Cache中。也许阅读本文档,您可以找到另一个优秀的解决方案,以获得大型查询结果。
使用add_option()和get_option()在数据库中记录您的实际$offset
值。
如果存储your $offset
变量,则rock_and_roll函数不再需要接收参数,只需要在函数内检索它。
function rock_n_roll() {
// Retrieve $offset value from WP_Object_Cache
// or from database with get_option()
query_posts(array(
'post_type' => 'wine',
'order' => 'ASC',
'posts_per_page' => -1,
'offset' => $offset
));
while (have_posts()) : the_post();
//compare values against scraped results
//write results to DB with update_post_meta
endwhile;
}