webempresa sistema plugin optimizar doing_wp_cron disable_wp_cron cronjob crear codex php wordpress cron

php - sistema - wp cron plugin



Wordpress cronjob cada 3 minutos (3)

hay muchos post 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?



Primero de su importancia donde está este código, ¿está en tus funciones.php para tu tema? ¿O es un plugin personalizado que está desarrollando?

A través de mi experiencia, es más fácil depurar y activar cron a través de un complemento personalizado, usando 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 plugins como esta:

  • / mi-cron-plugin
  • /my-cron-plugin/index.php
  • /my-cron-plugin/my-cron-plugin.php

contenidos index.php:

<?php // silence is golden

Contenidos 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 tras la activación del complemento. Para probar si funciona, use este complemento: https://wordpress.org/plugins/wp-crontrol/

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


add_action() 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 } ?>