Executar o WP Cron Weekly (mas em um determinado dia)

4

Estou procurando adicionar um pouco mais de especificidade aos intervalos do WP Cron. Para adicionar um intervalo "semanal", fiz o seguinte:

function re_not_add_weekly( $schedules ) {
    $schedules['weekly'] = array(
        'interval' => 604800, //that's how many seconds in a week, for the unix timestamp
        'display' => __('weekly')
    );
    return $schedules;
}
add_filter('cron_schedules', 're_not_add_weekly');

O que funciona muito bem, mas - o molho extra aqui está fazendo com que o cron seja executado em um dia específico:

if( !wp_next_scheduled( 're_not_mail' ) ) {
    wp_schedule_event( time(), 'weekly', 're_not_mail' );
}

Alguém tem alguma opinião sobre a melhor maneira de conseguir isso usando o WP Cron (supondo que isso não seja por um site específico que teremos controle sobre sua área cPanel / CRON). Obrigado!

Atualizar

Indo para essa força total e encontrei um artigo que pode ter esclarecido um pouco mais as coisas, mas não responde exatamente a minha pergunta. A essência básica desse artigo afirma que o WP Cron não é tão flexível (além dos params "horários, diários, semanais"), então estendê-lo para algo como semanal em um determinado dia parece um pouco improvável.

A questão (chamando isso de uma questão de confusão / frustração) Eu tenho com isso é - > Claro, eu poderia desabilitar o WP CRON e ter o WP CRON sendo executado uma vez por semana usando o servidor CRON, MAS, isso também significa que os itens que são normalmente executados, como atualizações de plugins / temas, apagamentos / publicações baseados em CRON são colocados em um backlog por uma semana inteira (se eu quisesse que o CRON fosse executado uma vez por semana toda segunda-feira, por exemplo).

Eu teria que assumir que outros se depararam com isso, então mais insights sobre isso seria uma grande ajuda. Obrigado!

    
por Zach 10.09.2012 / 20:00

3 respostas

2

O WP-Cron não se destina a ser tão preciso, e não deve ser usado se você tiver que agendar coisas em horários específicos. O WP-Cron é um mecanismo de escalonamento de "melhor esforço" e não pode garantir o tempo de execução como um verdadeiro sistema cron pode.

Se você precisar de precisão dessa natureza, a única resposta real é não usar o WP-Cron para isso. Não é projetado para isso e não pode ser feito. Qualquer código hacky que você tentar adicionar a ele para torná-lo capaz disso não corrigirá o problema subjacente.

Use um sistema cron real.

    
por Otto 12.09.2012 / 16:58
1

Se você tiver tarefas importantes do cronógrafo do WP em um cronograma, você deve ter uma tarefa cron do sistema em execução que regularmente chame o cronógrafo do WP para fazer com que as coisas sempre sejam acionadas quando você precisar delas.

Se você precisar de uma hora / data específica para suas execuções do WP cron, você sempre pode agendar um único evento e fazer com que o método chamado programe o próximo evento.

Exemplo simples:

function some_awesome_hook() {
    // Do stuff here

    // Run next Monday
    $next_run = strtotime('next monday');

    // Clear hook, just in case
    wp_clear_scheduled_hook('some_awesome_hook');

    // Add our event
    wp_schedule_single_event($next_run, 'some_awesome_hook');
}

// Run next Monday
$first_run = strtotime('next monday');

// Add our event
wp_schedule_single_event($first_run, 'some_awesome_hook');

Estilo OOP:

class My_Sweet_Plugin {

    public $cron_hook;

    public function __construct() {
        // Store our cron hook name
        $this->cron_hook = 'my_awesome_cron_hook';

        // Install cron!
        $this->setup_cron();

        // Add action that points to class method
        add_action($this->cron_hook, array($this, 'my_awesome_function'));
    }

    public function setup_cron() {
        // Clear existing hooks
        wp_clear_scheduled_hook($this->cron_hook);

        // Next run time
        $next_run = strtotime('next monday');

        // Add single event
        wp_schedule_single_event($first_run, $this->cron_hook);
    }

    public function my_awesome_function() {
        // Do stuff!

        // Setup our next run
        $this->setup_cron();
    }
}
    
por Michael Thompson 26.06.2015 / 16:31
0

De acordo com o Codex, você pode usar wp_get_schedules para adicionar uma opção como Weekly (que você já fez).

O WP-Cron não foi planejado para ter todas as funções do Cron, então porque não apenas fazer login no servidor e criar um cron job para chamar seu arquivo PHP somente na segunda-feira e adicionar algo assim ao seu crontab

* 07 * * Mon root cmd

    
por Damien 10.09.2012 / 21:42

Tags