Выполняется wp_schedule_event, но функция, связанная с крючком, не работает

У меня есть плагин OOP. Цель плагина – собирать запланированные сообщения, сохранять их в cron, а затем через 2 минуты после их публикации запускать на них пользовательскую функцию.

Это урезанный класс с соответствующими частями к вопросу:

class fb_linter { function __construct() { add_action('init', array($this,'init') ); add_action('admin_init', array($this,'admin_init') ); add_action('admin_menu', array($this,'admin_menu') ); add_action( 'future_post', array(&$this, 'on_post_scheduled'), 10, 2 ); add_action( 'activate_cron', array(&$this,'post_notification'), 10, 1); } function on_post_scheduled( $ID, $post ) { $title = $post->post_title; if ($post->post_status == 'future') { wp_schedule_single_event(get_post_time('U', true , $post->ID) + 120, 'activate_cron', array($post->ID)); } } function post_notification($post_id) { $title = get_the_title($post_id); $permalink = get_permalink($post_id); $headers = 'From: My Name <myname@example.com>' . "\r\n"; wp_mail('wp@gmail.com', 'Post ' . $title', $headers); } } 

Я могу получить действие в cron, означает, что я вижу Activ_cron внутри меню Crontrol & Crony, но функция post_notification никогда не выполняется.

Когда я переношу вызов add_action функции activate_cron и функции post_notifications в функции.php , все работает правильно.

Я продолжал копать последние 3 дня для решения, но я не мог заставить его работать.

Какие-нибудь советы?

Поэтому ваш конструктор, вероятно, не выполняется до запуска cron-события. Если ваш экземпляр класса fb_linter слишком поздно, ваш вызов add_action не произойдет вовремя. Попробуйте использовать шаблон дизайна singleton для своего класса, а затем создайте его сразу после объявления, и он должен работать нормально.

что-то вроде

 class fb_linter { public static function get_instance(){ static $instance; if( ! isset( $instance ) ) $instance = new self(); return $instance; } ... } fb_linter::get_instance();