Динамически создавать события wp_cront при представлении пользователя

Можно ли динамически создавать новые задания wp_cron при определенном действии?

У меня есть форма представления (я использую Gravity Forms, так что у меня уже есть несколько функций, установленных на некоторых из их крючков), который создает пост определенного типа сообщения, когда пользователь завершает и отправляет форму.

То, что я хотел бы сделать, это настроить работу cron, когда это подчинение произойдет. В каждом представлении формы будет создано новое событие cron (не беспокойтесь, они будут очищены через определенное время, обычно в течение 48 часов).

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

т.е. что-то вроде

 function lmk_alter_method_name( $entry, $form ) { //.... some code (which sets up a $post object) ... wp_update_post( $post ); //Call some dynamic wp_cron -related thing here lmk_set_up_cron( $post->ID ); } add_action( 'gform_after_submission', 'lmk_alter_method_name', 10, 2 ); function lmk_set_up_cron( $post_id ) { if( !wp_next_scheduled( 'lmk_cron_' . $post_id ) ) wp_schedule_event( time() + 3600, 'hourly', 'lmk_cron_' . $post_id, $post_id ); } 

Идея заключается в том, что он создаст крючок под названием lmk_cron_123, но тогда я как-то по-настоящему подключаюсь к нему динамически.

Я убежден, что есть более простой способ, но я не могу сейчас это увидеть. Какие-либо предложения?

Solutions Collecting From Web of "Динамически создавать события wp_cront при представлении пользователя"

Простым и динамичным способом использования WordPress cron было бы настроить крючок действия для вашего расписания, а затем добавлять только запланированные события по мере необходимости. События вызовут общую функцию и передадут ваши конкретные данные типа сообщения через $ args –

 add_action('my_schedule_event', 'generic_function'); function set_schedule($post_id) { $time = strtotime(date('Ymd H') . ':00:00'); $args = array('post_id' => $post_id); wp_schedule_event( $time, 'hourly', 'my_schedule_event', $args); } function generic_function($post_id) { // do your thing } 

Итак, в lmk_alter_method_name () вы вызываете set_schedule ($ post_id).

Надеюсь, это поможет!