Обновление WordPress для публикации sh записей с помощью cron-job - PullRequest
0 голосов
/ 20 февраля 2020

Я искал помощи в конкретной теме c в WordPress, в которой я раньше не работал. Я не могу понять, как работать

с cron-job и его настройками.

В WordPress есть три поста, теперь эти три поста - это посты с указанием названия события, события день, дата события и время события.

Мне нужно работать только с « дата события ». Проведя небольшое исследование, я обнаружил, что мне нужно настроить задание cron в

трех сообщениях для обновления полей «дата события».

В этих трех сообщениях ниже приведены их соответствующие данные из которого мне нужно работать только с « дата события », то есть с разделом

, который важен для меня в данный момент.

Название события 1: - НОЧЬ ИСЦЕЛЕНИЯ Событие 1 Дата: - 21 февраля 2020 г. Событие 1 День: - Пятница Событие 1 Время: - 19:30

Событие 2 Название: - СЛУЖБА ВОСКРЕСНОЙ ЦЕРКВИ Событие 2 Дата: - 23 февраля 2020 г. 2 день: - воскресенье Событие 2 Время: - 10:00

Событие 2 Имя: - МОЛИТВА ВМЕСТЕ Событие 2 Дата: - 25 февраля 2020 г. Событие 2 День: - Вторник Событие 2 Время: - 7:30 pm

Теперь для этих трех событий есть 3 поста, как я упоминал ранее. Я объясняю, взяв, к примеру, событие, а затем объясню все 3 события вместе.

В первом случае « Дата события 1 » равна « 21 февраля 2020 года ». Мне нужно настроить cron-job (согласно моим представлениям) для автоматического обновления « Event 1 Date » на СЛЕДУЮЩИЙ СЕДЬМОЙ ДЕНЬ сразу после 12:00 (полночь 21 февраля) , 2020) я это АВТОМАТИЧЕСКИ ОБНОВЛЯЕТСЯ до «Событие 1 Дата: - 28 февраля 2020 года », а затем автоматически до «Событие 1 Дата: - 6 марта» , 2020"и так далее. Этот процесс будет выполняться в отношении всех трех должностей соответственно.

Как, например, для второго события следующая «дата события» будет «Дата события 2: - 1 марта 2020 года », а затем «Дата события 2: - марта 8, 2020"и т. Д.

Как, например, для третьего события следующая" дата события "будет" Дата события 2: - 3 марта 2020 года"и затем «Событие 3 Дата: - 10 марта 2020 года » и так далее.

Все эти даты и дни будут относиться к Австралийскому стандартному часовому поясу .

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 20 февраля 2020

Во-первых, этот код будет искать 3 сообщения по имени - это безобразно. Было бы лучше создать категорию (например, «События») и добавить в нее только эти 3 сообщения. Таким образом, их можно искать по категории, а не по имени.

Код будет выполнять следующее:

  1. в дневном кроне, искать идентификаторы этих сообщений
  2. , извлекать дату их публикации и видеть, старше ли они чем сегодня
  3. Если старше, добавьте 7 дней к дате до даты после сегодняшнего дня
  4. Обновите дату публикации с новой датой
function mycron_event_dates()
{
  $post_names = array('HEALING NIGHT', 'SUNDAY CHURCH SERVICE', 'PRAYING TOGETHER');
  foreach ($post_names as $post_name) {
    $post_id = post_exists($post_name);
    if ($post_id) {
      $post = get_post($post_id);
      $post_datetime = $post->post_date;
      $post_date = date('Y-m-d', strtotime($post_datetime)); // without time
      $date_now = date('Y-m-d', strtotime(current_time('mysql'))); // right now
      $date_changed = false;
      while ($post_date < $date_now) {
        $post_new_date = strtotime("+7 day", strtotime($post_datetime));
        $post_date = date('Y-m-d', $post_new_date);
        $post_datetime = date('Y-m-d H:i:s', $post_new_date);
        $date_changed = true;
      }
      if ($date_changed) {
        update_post(array(
          'ID' => $post_id,
          'post_date' => $post_datetime,
        )); // modify the post date
      }
    } else {
      error_log("Event schedule: post '$post_name' not found");
    }
  }
}

add_action( 'init', 'mycron_setup_cron');

function mycron_setup_cron()
{
  if ( ! wp_next_scheduled( 'mycron_event_dates' ) ) {
    wp_schedule_event( strtotime(date('Y-m-d')), 'daily', 'mycron_event_dates' );
  }
}

Вам придется попробуйте с этим и посмотрите, действительно ли он найдет $post_names (в противном случае он выдаст ошибку в журнале отладки. Они должны точно соответствовать реальным именам постов. Если это не сработает, вы можете попробовать заменить его на массив идентификаторов записей и вместо этого выполните

$post_ids = array(1111, 2222, 3333); // replace by real post IDs of the events
foreach ($post_ids as $post_id) {

l oop. Чтобы проверить это, вы можете просто добавить прямой вызов к mycron_event_dates() в функцию mycron_setup_cron, чтобы он вызывался при каждом загрузка страницы для целей отладки. Как только она заработает, вы можете удалить ее и оставить для задания cron.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...