Trabajo cron de WordPress cada 3 minutos

3 minutos de lectura

hay muchas publicaciones en stackoverflow con este tema pero (no sé por qué) nada funcionará para mí.

Lo que tengo

function isa_add_every_three_minutes( $schedules ) {

    $schedules['every_three_minutes'] = array(
            'interval'  => 180,
            'display'   => __( 'Every 3 Minutes', 'textdomain' )
    );

    return $schedules;
}
add_filter( 'cron_schedules', 'isa_add_every_three_minutes' );


function every_three_minutes_event_func() 
{
    // do something
}

wp_schedule_event( time(), 'every_three_minutes', 'every_three_minutes_event_func' );

¿Alguna idea de lo que estoy haciendo mal?

necesitas usar add_action() para conectar su función al evento programado.

add_action( 'isa_add_every_three_minutes', 'every_three_minutes_event_func' );

Aquí está el código completo.

// Add a new interval of 180 seconds
// See http://codex.wordpress.org/Plugin_API/Filter_Reference/cron_schedules
add_filter( 'cron_schedules', 'isa_add_every_three_minutes' );
function isa_add_every_three_minutes( $schedules ) {
    $schedules['every_three_minutes'] = array(
            'interval'  => 180,
            'display'   => __( 'Every 3 Minutes', 'textdomain' )
    );
    return $schedules;
}

// Schedule an action if it's not already scheduled
if ( ! wp_next_scheduled( 'isa_add_every_three_minutes' ) ) {
    wp_schedule_event( time(), 'every_three_minutes', 'isa_add_every_three_minutes' );
}

// Hook into that action that'll fire every three minutes
add_action( 'isa_add_every_three_minutes', 'every_three_minutes_event_func' );
function every_three_minutes_event_func() {
    // do something
}
?>

parece que olvidaste usar el comando add_action()

Vea este ejemplo: http://wpguru.co.uk/2014/01/how-to-create-a-cron-job-in-wordpress-teach-your-plugin-to-do-something-automatically/

En primer lugar, es importante dónde se encuentra este código, ¿está en su functions.php para su tema? ¿O es un complemento personalizado que está desarrollando?

Según mi experiencia, es más fácil depurar y activar cron a través de un complemento personalizado, utilizando ganchos de activación para activar y desactivar eventos. He tenido dificultades para activar eventos cron a través de funciones php antes, prefiero activar estos eventos a través de complementos personalizados.

Comenzaría con una estructura de complemento como esta:

  • /mi-complemento-cron
  • /mi-complemento-cron/index.php
  • /mi-complemento-cron/mi-complemento-cron.php

contenido de index.php:

<?php // silence is golden

contenido de my-cron-plugin.php:

<?php

/**
 * Plugin name: My Custom Cron Plugin
 * Description: Simple WP cron plugin boilerplate.
 * Author: Your name
 * Version: 0.1
 */

// Security reasons...
if( !function_exists( 'add_action' ) ){
    die('...');
}

// The activation hook
function isa_activation(){
    if( !wp_next_scheduled( 'isa_add_every_three_minutes_event' ) ){
        wp_schedule_event( time(), 'every_three_minutes', 'isa_add_every_three_minutes_event' );
    }
}

register_activation_hook(   __FILE__, 'isa_activation' );

// The deactivation hook
function isa_deactivation(){
    if( wp_next_scheduled( 'isa_add_every_three_minutes_event' ) ){
        wp_clear_scheduled_hook( 'isa_add_every_three_minutes_event' );
    }
}

register_deactivation_hook( __FILE__, 'isa_deactivation' );


// The schedule filter hook
function isa_add_every_three_minutes( $schedules ) {
    $schedules['every_three_minutes'] = array(
            'interval'  => 180,
            'display'   => __( 'Every 3 Minutes', 'textdomain' )
    );
    return $schedules;
}

add_filter( 'cron_schedules', 'isa_add_every_three_minutes' );


// The WP Cron event callback function
function isa_every_three_minutes_event_func() {
    // do something
}

add_action( 'isa_add_every_three_minutes_event', 'isa_every_three_minutes_event_func' );

Después de haber configurado este complemento, el evento debe activarse al activar el complemento. Para probar si funciona, use este complemento: https://wordpress.org/plugins/wp-crontrol/

Otro buen recurso para comprender cómo funciona WP cron es: https://developer.wordpress.org/plugins/cron/

¿Ha sido útil esta solución?