web-dev-qa-db-fra.com

WP_cron ne déclenchera pas mon action

Je suis dans une impasse avec une tâche prévue dans un plugin wordpress pour un multisite. D'une manière ou d'une autre l'action que j'ai ajoutée ne se déclenche pas. La tâche commence à être programmée et renvoie un horodatage lorsque j'exécute wp_next_scheduled (), mais l'action elle-même ne se déclenche pas et ne déclenche pas la fonction.

Informations pouvant donner des indices:

  • Il tourne sur un site WPMU
  • Le cronjob fait partie d'un plugin
  • J'utilise l'approche OOP
  • Les éléments que j'importe sont un type de publication personnalisé.

Exemple de code:

class Cronjobs
{
    function Cronjobs()
    {
        add_action('init', array(&$this, 'add_cronjobs'));
    }

    function add_cronjobs()
    {
        add_action('update_properties_daily', array(&$this, 'do_updates'));

        if(!wp_next_scheduled('update_properties_daily') )
        {
           wp_schedule_event( time(), 'daily', 'update_properties_daily');
        }
    }

    function do_updates()
    {
        /* Do updates */
    }
}

Pourrait vraiment utiliser l'aide de certains wises sur celui-ci, merci!


METTRE À JOUR

Solution: Créez une fonction globale et appelez-la à partir de l'action personnalisée.

Apparemment, y a-t-il un problème avec la création d'actions personnalisées lors de la référence à un objet. Depuis les actions personnalisées sont stockées dans la base de données (autant que je sache), l'objet ne le sera pas être instancié et par conséquent ne peut pas utiliser ses méthodes . Pour cela: retour aux sources et utiliser une fonction globale.

1
user47608

Vous devez appeler add_action de l'extérieur de la classe, avec une référence à l'objet. Exemple:

$cj = new Cronjobs;
add_action('update_properties_daily', array(&$cj, 'do_updates'));
3
windyjonas