WP_Schedule_Event操作未运行

时间:2015-03-02 作者:Andy McCormick

似乎这个问题的所有答案最终都是语法错误,但我在这里没有看到。

我试图在这里设置一个每日作业,它将贯穿我所有的“假期”帖子,如果\\u simple\\u start\\u date(unix时间戳)与今天的日期相同,那么运行一些函数来更新usermeta。我调用的三个函数是在我的插件前面定义的,我知道它们是有效的,因为我在其他多个地方使用它们来完成与我在这里所做的完全相同的事情。唯一的区别是,这是一个预定的事件。

自从我设置了这个,它就没有运行过一次。

我正在使用define( \'DISABLE_WP_CRON\', true ); 用于与其他一些正在运行日常任务的插件一起使用。然而,从我所读到的来看,这不应该引起这个问题。

我们当然非常感谢您的帮助。谢谢

add_action( \'wp\', \'pto_setup_schedule\' );
/**
 * On an early action hook, check if the hook is scheduled - if not, schedule it.
 */
function pto_setup_schedule() {
    if ( ! wp_next_scheduled( \'pto_daily_event\' ) ) {
        wp_schedule_event( time(), \'daily\', \'pto_daily_event\');
    }
}


add_action( \'pto_daily_event\', \'check_pto_request_date\' );
/**
 * On the scheduled action hook, run a function.
 */
function check_pto_request_date() {

    $loop = new WP_Query( array( \'post_type\' => \'vacation\') ); 
    while ( $loop->have_posts() ) : $loop->the_post();

    $request_start_time = (get_post_meta( $post->ID, \'_simple_start_date\',true) );

    if  (date(\'Ymd\') == date(\'Ymd\', $request_start_time)){

        $current_user = $post->post_author;
        $request_date = get_post_meta( $post->ID, \'_simple_start_date\',true );
        $request_year = date("Y",$request_date);
        $time_year= date("Y");
        $request_time = get_post_meta($post->ID, \'_simple_total_hours\', true);
        $request_type = get_post_meta($post->ID, \'_simple_vacation_type\', true);

        update_days_requested((-1 * $request_time), $request_type, $current_user);
        update_days_left((-1 * $request_time), $request_type, $current_user);
        update_days_used($request_time, $request_type, $current_user);


    } 
    endwhile;



}

1 个回复
最合适的回答,由SO网友:cybmeta 整理而成

我想你的问题可能在于$post->ID. 在您的代码中$post 是未定义的变量。由于您在一个循环中,请尝试get_the_ID() 而不是$post->ID:

$post_ID = get_the_ID();

$request_start_time = get_post_meta( $post_ID, \'_simple_start_date\', true );

if  (date(\'Ymd\') == date(\'Ymd\', $request_start_time)){

    $current_user = $post->post_author;
    $request_date = get_post_meta( $post_ID, \'_simple_start_date\',true );
    $request_year = date("Y",$request_date);
    $time_year= date("Y");
    $request_time = get_post_meta($post_ID, \'_simple_total_hours\', true);
    $request_type = get_post_meta($post_ID, \'_simple_vacation_type\', true);

    update_days_requested((-1 * $request_time), $request_type, $current_user);
    update_days_left((-1 * $request_time), $request_type, $current_user);
    update_days_used($request_time, $request_type, $current_user);


} 

结束

相关推荐

以正确的方式在多站点上运行WP Cron

我有多个网站的WordPress Multisite。我设置了DISABLE_WP_CRON 到true 在我的wp-config.php.如果我们使用wget或curl设置cron任务,则有30秒的规则来执行PHP脚本。它太小了,无法发送成吨的电子邮件通知和做其他事情(可能远程SMTP服务器连接很慢,可能是来自bbPress的大量电子邮件通知或其他任何东西)。也许我们可以用这样的东西?php -q wp-cron.php 但它只能在多站点中对一个站点运行cron(每个站点在不同的MySQL表中