Динамическое расписание Cron WordPress

#php #wordpress #cron

#php #wordpress #cron

Вопрос:

Я хотел бы создать интерфейс для создания простого cron creator для моего плагина, например WP-Control plugin. У меня есть страница настроек с простыми входными данными, такими как имя Cron, интервал и задача для достижения. В этом случае я хочу экспортировать некоторые данные, используя Cron. Функция уже существует и готова к использованию. Но я хочу динамически присвоить имя событию crons, которое будет создано после отправки моей формы.

 <?php

function admin_setting_page() {
  $content = '<h1>Crons</h1>
  <form method="post">
    <h2>Name</h2>
    <input name="name" type="text" />
    <br />

    <h3>Time of Occurence</h3>
    <input type="time" name="time"
      min="00:00" max="11:59">

    <h3>Repeat</h3>
    <select name="repeat">
        <option value="once">Once</option>
        <option value="daily">Daily</option>
        <option value="custom">Custom</option>
    </select>
    <h3>Action</h3>
    <select id="action" name="action">
      <optgroup label="Export">
        <option value="export1">Products</option>
        <option value="export2">Customer</option>
      </optgroup>
    </select>
    <br />
    <br />
    <input type="submit" name="create_cron" value="create_cron"/>
    </form>'
    ;
  
  echo $content;

  if (isset($_POST['create_cron'])) {
    $hookname = $_POST['name'];
    $time = $_POST['time'];
    $repeat = $_POST['repeat'];
    $action = $_POST['action'];

    if( !wp_next_scheduled( $hookname ) ) {
      wp_schedule_event( time(), $repeat, $action );
    }

    add_action($action, 'myExportFunction');
  }
 

К сожалению, созданные cron не имеют никаких действий, но при перемещении add_action($action, 'myExportFunction'); за пределы функции admin_setting_page() , в верхней части файла, cron создается успешно, при условии, что я даю имя крючку.
Но я хочу, чтобы имя крючка было динамическим, потому что оно должно быть уникальным.

После некоторых исследований я обнаружил, что, возможно, использование add_filter, подключенного к ‘scheduled_event’, может быть решением, но я не уверен, как его использовать.

Я полагаю, что проблема в том, что действие еще не создано, когда запланирован cron.

Любое предложение или помощь, пожалуйста?