Задания Wordpress PHP Cron


У меня есть плагин, который импортирует данные csv в таблицы wordpress. Он проходит через панель управления Wordpress, где вы вводите некоторые данные и нажимаете кнопку, чтобы выполнить его.

Я изменил плагин так, чтобы входные данные были статическими (каждый раз из одного и того же csv) и теперь все они находятся в одном php-файле. Я хочу запланировать задание Cron для выполнения этого сценария каждый час или около того.

Я попытался настроить его с помощью cPanel и прямого доступа к php-файлу, но он не работает (ничего отображается). Я считаю, что это связано с тем, что плагин использует функции WordPress, такие как wp_insert_post.

Как я могу запустить этот скрипт, как если бы он был запущен через панель управления wordpress, как запланированное событие?

Примечание: файл также содержит некоторые javascript.

Author: Lance, 2012-12-06

3 answers

Вам нужно включить 2 файла, чтобы получить доступ к функциям администратора: Во-первых, wp-load.php . wp-load.php настраивает все и запускает wordpress. Однако вы вызываете эту функцию из папки плагина, внутри каталога содержимого (в отличие от каталога администратора), поэтому при вызове wp–load вы не будете находиться в разделе администратора и не получите доступ к этим функциям. С другой стороны, вам также не придется иметь дело с WordPress, заставляющим вас авторизоваться. Поскольку вам все еще нужны эти функции администратора, включите wp-admin/admin-functions.php . Это загружает административную часть и предоставляет вам доступ к функциям администратора – и вы готовы перейти

 4
Author: Udan, 2012-12-06 09:55:31

Вам следует использовать wp_schedule_event. Смотрите в кодексе WordPress здесь: http://codex.wordpress.org/Function_Reference/wp_schedule_event . Используйте что-то вроде этого:

            register_activation_hook(__FILE__, 'my_activation');
            add_action('my_hourly_event', 'do_this_hourly');

            function my_activation() {
                wp_schedule_event( time(), 'hourly', 'my_hourly_event');
            }

            function do_this_hourly() {
                // do something every hour
            }

Вы вполне можете вызвать PHP-файл внутри вашей функции do_this_hourly().

 1
Author: barakadam, 2012-12-06 10:24:27

Принятый ответ хорошо сработал для меня. Я смоделировал это, и вот мои выводы. Это тот случай, когда вы можете использовать это решение вне сценария плагина. В принципе, вы можете запустить свой сервер с помощью заданий cron, используя собственные функции wordpress, как показано ниже. Вы можете создать файл на верхнем уровне вашего приложения WordPress, а затем include /wp-load.php; в нем.

Это загружается в родной wordpress и позволяет вам вызывать класс, который вы можете определить как часть ваших обязательных плагинов. Тогда ваш хороший чтобы перейти к основным функциям wordpress, таким как $wpdb и get_usermeta()

Теперь вы можете создать экземпляр своего класса с помощью $class_variable = new YourClass; и оттуда вызывать функции класса. Самое замечательное в этом то, что вы можете планировать задания cron, как обычно, на своем сервере, и когда вы это делаете, ваша функция wordpress работает так же, как и внутри wordpress. Это означает, что вам не нужно поддерживать работу cron как часть плагина, который может быть полезен или не полезен в зависимости от того, что вы делаете до.

 0
Author: usumoio, 2013-04-17 01:09:39