A tarefa agendada do Wordpress é chamada mas não executada

4

Eu criei um plugin com um cron para atualizar todas as postagens de um determinado tipo a cada 5 minutos. Eu instalei o WP Crontrol para verificar se o cron está registrado corretamente e tudo parece estar bem.

Foi assim que registrei meu cron:

function custom_cron_interval( $schedules ) {
    $schedules['fiveminutes'] = array(
        'interval' => 300,
        'display' => __('Every five minutes')
    );
    return $schedules;
}
add_filter( 'cron_schedules', 'custom_cron_interval' ); 

if ( ! wp_next_scheduled( 'recalculate_all_scores' ) ) {
    wp_schedule_event(time(), 'fiveminutes', 'recalculate_all_scores');
}

Está registrado corretamente, mas quando a função é executada, nada acontece. Para fins de teste, prendi a função à ação save_post. Tudo funciona bem assim. Mas quando a tarefa agendada é chamada, ela não será executada.

Aqui está o código da função

function recalculate_all_scores() {
    global $wpdb; 

    $customers = $wpdb->get_results("SELECT * FROM wp_posts 
                                WHERE post_type = 'customer' 
                                AND post_status = 'publish';");

    foreach ($customers as $customer){
        set_score($customer);
    }
}

function set_score($customer){
    $acf_key = "score";
    $score = rand(0,50);
    update_field( $acf_key, $score, $customer->ID );
}

Eu também adicionei as seguintes linhas ao meu wp-config.php:

define('ALTERNATE_WP_CRON', true);
define('DISABLE_WP_CRON', false);

Alguma ideia do que está impedindo a execução da função?

EDITAR

  • Estou ciente de que o sistema wp_cron não é um cron real e depende de visitas ao site.
  • Se eu executar a função manualmente, levará cerca de 15 segundos para que o limite de tempo de execução do PHP não seja um problema.
por Frederik Voordeckers 22.01.2015 / 10:01

2 respostas

0

Eu estava tendo o mesmo problema recentemente, até que segui um exemplo do Código do Wordpress que sugere o uso de ganchos de ação para executar a função.

Acho que se você adicionar o seguinte ...

add_action( 'recalculate_all_scores_hook', 'recalculate_all_scores' );

... e altere a função wp_schedule_event para usar o nome do gancho de ação em vez da função diretamente ...

wp_schedule_event( time(), 'fiveminutes', 'recalculate_all_scores_hook' );

... você pode estar no negócio.

Boa sorte!

    
por mtt_g 28.01.2015 / 14:57
-2

WordPress suporta apenas por hora, diariamente e twise diariamente, então altere cinco minutos com qualquer um dos três e defina sua função com sleep(10); ou qualquer outra hora que seja adequada para o seu plugin

Verifique aqui

    
por kalpesh 16.11.2015 / 09:52