问题描述
我试图安排一个伪 cron 工作,在一段时间后使用 WordPress 插件发送电子邮件。到目前为止,当我将电子邮件地址和消息编码到’email_about_coupon’ 函数中时,我已经能够使此代码运行; 然而,当我尝试将参数发送到函数时,电子邮件永远不会被发送。通过使用 Cron GUI 插件 (http://wordpress.org/extend/plugins/cron-view/installation/),我可以看到即使使用参数也可以注册 cron 作业。我相信我正在做错误的事情,不允许在运行时在函数内正确使用参数。这是我有的:
function schedule_email_cron($post_id)
{
// Get the UNIX 30 days from now time
$thirty_days = time() + 60; // (30 * 24 * 60 * 60)
$post = get_post($post_id);
$email = get_the_author_meta('user_email', $post->post_author);
$args = array('email' => $email, 'title' => $post->post_title);
wp_schedule_single_event($thirty_days, 'email_about_coupon_action', $args);
}
add_action('save_post', 'schedule_email_cron', 1, 1);
add_action('email_about_coupon_action', 'email_about_coupon', 1, 1);
function email_about_coupon($args)
{
// Email text
$text = "<html><body><p>Your coupon titled, ".$args['title']." is expiring soon. Please visit <a href="">".get_bloginfo('siteurl')."/registered/</a> ".get_bloginfo('siteurl')."/registered/ to renew your coupon.</p></body></html>";
// Email headers
$headers = array(
'From: '.get_bloginfo('name').' <'.get_bloginfo('admin_email').'>',
"Content-Type: text/html"
);
$h = implode("rn",$headers) . "rn";
// Send email
wp_mail($args['email'], 'Renew Your Coupon Now!', $text, $h);
}
一如以往,非常感谢您的帮助!
最佳解决方案
我认为你在传递参数方面有不匹配,以及你期望如何工作。您传递参数数组以调度并期望您的挂钩函数接收相同的参数数组。不是这种情况。
Cron 事件由 do_action_ref_array()
处理,do_action_ref_array()
通过 call_user_func_array()
传递参数。
所以你的 hooked 函数不接收数组的参数,它接收到多个参数 – 一个数组中的每个元素。
所以你需要再次将数组的数组包含在数组中,或者修改你的函数以处理多个参数。请注意,对于信件,您还需要修改 add_action()
调用,以便传递所需数量的参数,而不是仅传递一个参数。
次佳解决方案
感谢拉尔斯特,这让现在更有意义的地狱。所以我更新了这篇文章,详细阐述了 Rarst 提到的和 upvote 他为这个发光的差异; )
基本上 wp_schedule_single_event 通过变量 arg 将参数传递给你的函数,如 in the codex 所示。该变量”args” 必须是一个数组,因为数组中的每个值都将映射到回调函数中的一个参数。
例:
add_action('example_action', 'example', 1, 3);
$args = array ( 2, 1, 3 );
wp_schedule_single_event(time(), 'example_action', $args);
function example($a, $b, $c)
{
}
2 会去 $ a,1 会去 $ b,3 会去 $ c 。然而,通过三个变量只是可能的,因为这一行,
add_action('example_action', 'example', 1, 3);
看看 codex for add_action 你会看到第四个参数,3 是什么控制有多少个参数传递给回调函数。默认值为 1 。
所以这个例子也有效:
add_action('example_action', 'example');
$args = array ( array( 2, 1, 3 ) );
wp_schedule_single_event(time(), 'example_action', $args);
function example($a)
{
}
所以这里的数组 (2,1,3) 被分配给 $ a 。
所以沙丁鱼的问题可以通过一行改变来解决,第 7 行,
$args = array('email' => $email, 'title' => $post->post_title);
变成这样,
$args = array(array('email' => $email, 'title' => $post->post_title));
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。