wp_schedule_event() en el complemento que no programa un evento cron

4 minutos de lectura

Estoy creando un complemento de WordPress, cuando el complemento está activado, necesito que se programe un trabajo cron para que se ejecute cada 5 minutos.

Aquí está mi código;

// Register plugin activation hook
function my_plugin_activate() {
    if( !wp_next_scheduled( 'my_function_hook' ) ) {  
       wp_schedule_event( time(), '5', 'my_function_hook' );  
    }
}
register_activation_hook( __FILE__, 'my_plugin_activate' );

// Register plugin deactivation hook
function my_plugin_deactivate(){
    wp_clear_scheduled_hook('my_function_hook');
}
register_deactivation_hook(__FILE__,'my_plugin_deactivate');

// Function I want to run when cron event runs
function my_function(){
    //Function code
}
add_action( 'my_function_hook', 'my_function');

Cuando uso este complemento https://wordpress.org/plugins/wp-crontrol/ para verificar los eventos cron, no se ha agregado nada, espero que se agregue un evento cron que ejecute ‘my_function’ a intervalos de 5 minutos, no tengo errores

  • El cron de WordPress no es lo mismo que el cron del servidor. Para que se ejecute, debe visitar la página (usted o cualquier otra persona), de lo contrario, no se ejecutará;)

    – dingo_d

    16 de noviembre de 2017 a las 20:06

avatar de usuario
jaswrks

Ver: wp_schedule_event()

Los valores válidos para la recurrencia son cada hora, diariamente y dos veces al día. Estos se pueden ampliar usando el filtro ‘cron_schedules’ en wp_get_schedules().

Por lo tanto, solo necesita agregar un horario personalizado que se ejecute cada 5 minutos.

<?php // Requires PHP 5.4+.

add_filter( 'cron_schedules', function ( $schedules ) {
    $schedules['every-5-minutes'] = array(
        'interval' => 5 * MINUTE_IN_SECONDS,
        'display'  => __( 'Every 5 minutes' )
    );
    return $schedules;
} );

if( ! wp_next_scheduled( 'my_function_hook' ) ) {  
    wp_schedule_event( time(), 'every-5-minutes', 'my_function_hook' );  
}

  • Soy consciente de que el cron de WordPress funciona de manera diferente: este fue el problema, le pasé a la función wp_schedule_event() un número en lugar de un horario válido, gracias por su ayuda jaswrks

    – usuario3574766

    23 de noviembre de 2017 a las 14:32

WP Cron se ejecuta cuando alguien visita su sitio web. Por lo tanto, si nadie visita, el cron nunca se ejecuta.

Ahora hay 2 soluciones:

  1. Deshabilite WP Cron, use un trabajo cron real y personalícelo.

https://support.hostgator.com/articles/specialized-help/technical/wordpress/how-to-replace-wordpress-cron-with-a-real-cron-job

  1. Usar un intervalo personalizado en wp_schedule_event():

    function myprefix_custom_cron_schedule( $schedules ) {
        $schedules['every_six_hours'] = array(
            'interval' => 21600, // Every 6 hours
            'display'  => __( 'Every 6 hours' ),
        );
        return $schedules;
    }
    add_filter( 'cron_schedules', 'myprefix_custom_cron_schedule' );
    
    //Schedule an action if it's not already scheduled
    if ( ! wp_next_scheduled( 'myprefix_cron_hook' ) ) {
        wp_schedule_event( time(), 'every_six_hours', 'myprefix_cron_hook' );
    }
    
    ///Hook into that action that'll fire every six hours
     add_action( 'myprefix_cron_hook', 'myprefix_cron_function' );
    
    //create your function, that runs on cron
    function myprefix_cron_function() {
        //your function...
    }
    

y puedes ver estos tuts

http://www.nextscripts.com/tutorials/wp-cron-scheduling-tasks-in-wordpress/

http://www.iceablethemes.com/optimize-wordpress-replace-wp_cron-real-cron-job/

http://www.smashingmagazine.com/2013/10/16/schedule-events-using-wordpress-cron/

cron Wp personalizado

http://codex.wordpress.org/Plugin_API/Filter_Reference/cron_schedules

http://www.smashingmagazine.com/2013/10/16/schedule-events-using-wordpress-cron/

http://www.viper007bond.com/2011/12/14/how-to-create-custom-wordpress-cron-intervals/

http://www.sitepoint.com/mastering-wordpress-cron/

https://tommcfarlin.com/wordpress-cron-jobs/

http://www.paulund.co.uk/create-cron-jobs-in-wordpress

linux cron

http://www.cyberciti.biz/faq/how-do-i-add-jobs-to-cron-under-linux-or-unix-oses/

http://www.thesitewizard.com/general/set-cron-job.shtml

http://code.tutsplus.com/tutorials/scheduling-tasks-with-cron-jobs–net-8800

búsqueda de Google

Como comentó @dingo_d, WordPress Cron no funciona como el servidor Cron. el cron de WordPress se ejecuta al cargar la página. Comprueba la base de datos en busca de un evento programado y, si hay un evento programado, ejecuta la tarea. Entonces, si nadie visita el sitio web en un período de tiempo de 5 minutos no el trabajo se ejecutará en ese período. Cuando alguien lo hace visite el sitio web, se ejecuta el proceso de carga de la página y se lleva a cabo el evento programado.

Se configuró así para que WordPress funcionara sin necesidad de ninguna funcionalidad Cron particular en el servidor.

Para eludir esto, puede usar un servicio que visite automáticamente su sitio web o puede configurar un script Cron en su servidor para cargar automáticamente la página.

Suponiendo que un servidor Linux ingresa a la terminal y luego escribe crontab -e y pulsa enter. Ingresará el archivo cron para configurar trabajos cron. Agregue al archivo la siguiente línea:

/5 * * * wget -q -O - http://yourdomain.com/wp-cron.php?doing_wp_cron

sustituyendo http://yourdomain.com para su sitio web real. Esto asegura que su sitio web sea visitado cada 5 minutos.

Agarré la información sobre cómo hacer esto de https://tommcfarlin.com/wordpress-cron-jobs/ así que le doy crédito y ese enlace tiene mucha más información de cron de WordPress.

¿Ha sido útil esta solución?