正在重新生成wp_Schedule_Event参数的数组密钥

时间:2013-09-17 作者:souporserious

最后一天我一直在做这件事,运气不好。是否有任何方法可以为计划的事件更新存储的args数组键?我询问的原因是,在安排付款时,我有如下数组参数:

Array
(
    [customer] => Array
        (
            [name] => \'\'
            [email] => \'\'
            [id] => \'\'
            [user_id] => \'\'
            [street] => \'\'
            [city] => \'\'
            [state] => \'\'
            [zip] => \'\'
            [phone] => \'\'
        )

    [payments] => Array
        (
        )

    [recurring] => Array
        (
            [user_id] => 70
            [amount] => 1600
        )

)
付款将在处理时推送到该数组,从而更改数组和密钥的序列化方式。是否可以使用新的序列化参数更新数组的键?

1 个回复
SO网友:souporserious

因此,我想到了以下似乎有效的方法:

此函数将按用户id搜索并找到相应的cron作业

function search_user_cron( $hook, $user_id ) {

    $crons = _get_cron_array();

    foreach( $crons as $timestamp => $cron ) 

        if( isset( $cron[$hook] ) ) 

            foreach( $cron as $jobs ) 

                foreach( $jobs as $key => $job ) 

                    if( $job[\'args\'][0][\'customer\'][\'user_id\'] == $user_id )

                        return array( \'id\' => $user_id, \'timestamp\' => $timestamp, \'key\' => $key );

}
然后,我使用此函数使用新参数完成并创建一个新作业,并取消设置旧作业

function replace_cron_args( $hook, $user_id ) {

    // lets find the cron job corresponding to the user id
    $user = search_user_cron( $hook, $user_id );

    // get all the current cron jobs
    $crons = _get_cron_array();

    // get the most recent updated arguments
    $stored_args = get_user_meta( $user[\'id\'], \'oe_customer_details\', true );

    // get the current user key
    $key = $user[\'key\'];

    // get the current user timestamp
    $timestamp = $user[\'timestamp\'];

    // serialize the new arguments
    $newkey = md5( serialize( $stored_args ) );

    // update the stored arguments
    $crons[$timestamp][$hook][$key][\'args\'][0] = $stored_args;

    // replace the key with the new serialized key
    $crons[$timestamp][$hook][$newkey] = $crons[$timestamp][$hook][$key];

    // unset the old array
    unset( $crons[$timestamp][$hook][$key] );

    // set the new cron jobs
    _set_cron_array( $crons );

}
如果有人能想出更有效的方法,请告诉我。

结束

相关推荐

如何确保wp-cron作业运行

我正在使用一个插件向一个相对较大的电子邮件列表发送电子邮件。因为我们的主机每小时发送电子邮件的阈值很低,所以我们必须使用插件中的设置,将电子邮件限制在每小时只有一定数量。我假设插件使用wp cron来实现这一点。我曾尝试在wp-cron上查找文档,但我能找到的唯一重要信息是它需要一个页面视图才能运行。问题:RSS提要是否被ping到足以触发“页面视图”,从而触发wp cron</wp cron将在页面视图后运行多长时间?(例如,如果最后一次查看页面是在下午6:59,cron是否会安排在晚上7点运行?