Мероприятие По Расписанию WP - Каждый День, Когда Приходит Первый Посетитель


У меня есть ежедневное мероприятие по расписанию wp.

Я знаю, что это происходит, когда пользователь посещает сайт и если проходит запланированное время.

Если бы я начал это сегодня в 12 часов утра, и если завтра первый посетитель придет завтра в 1:20 утра, это событие произойдет завтра в 1:20 утра.

День за днем это происходит после 1.20 ночи или после 12 часов ночи?

Author: Max Yudin, 2016-03-31

2 answers

wp-cron часто называют псевдо-cron, потому что он не выполняется по строгому расписанию. Если никто не посещает сайт, он не запускается. Если вы запланируете запуск события wp-cron, скажем, каждые 12 часов, оно будет выполняться не чаще каждые 12 часов. Но, если на вашем сайте очень мало трафика, между запусками может пройти гораздо больше 12 часов.

Если вам нужно, чтобы событие происходило каждые 12 часов или каждый день в одно и то же время, вам нужно будет использовать что-то за пределами WordPress. Общий подходы к этому включают использование планировщика системных задач (в Linux это обычно называется "cron") или сторонней службы, такой как EasyCron.

Предполагая, что вы находитесь на сервере Linux (безусловно, наиболее распространенной среде хостинга), создайте небольшой сценарий оболочки, который выглядит следующим образом:

#!/bin/bash
curl http://yoursite.name.com/wp-cron.php >/dev/null

При этом будет запущена команда "curl", чтобы загрузить содержимое вашего сайта. wp-cron.php страницу, затем немедленно игнорируйте результаты (сбрасывая выходные данные в /dev/null). Вас не волнует, какие выходные данные могут быть на странице, и на самом деле обычно никакого выхода нет. Вы просто хотите убедиться, что страница загружена.

Затем добавьте строку в свой crontab ("crontab -e" откроет файл crontab в вашем редакторе по умолчанию, вероятно, vi), которая выглядит примерно так:

0 0,12 * * *             /home/user/touch-site.sh

(Очевидно, измените расположение файла туда, куда вы поместили свой скрипт. Кроме того, убедитесь, что скрипт является исполняемым, запустив "chmod 700 touch-site.sh ".)

Этот пример будет посещать ваш сайт ежедневно, в полдень и полночь (время сервера) и запустите сценарий wp-cron. Для получения более подробной информации о том, как работает этот файл, запустите "man crontab".

 2
Author: David E. Smith, 2016-03-31 14:03:11

Чтобы ответить на ваш этот запрос

@ сумит, ты уверен в этом? Один мой друг сказал, что если сегодня это произойдет в 1.20 утра, то на следующий день это произойдет после 1.20 утра, а не в 12 утра.

Как это работает:

  1. Вы планируете мероприятие, используя отметку текущего времени, т.е. 12:00 утра в понедельник

    wp_schedule_event(time(), 'daily', 'my_schedule_hook');
    
  2. Кто-то посетил сайт в понедельник в 1:20 утра.

WP назовем этот фрагмент кода

    if ( $schedule != false ) {
            $new_args = array($timestamp, $schedule, $hook, $v['args']);
            call_user_func_array('wp_reschedule_event', $new_args);
    }

    wp_unschedule_event( $timestamp, $hook, $v['args'] );

   /**
    * Fires scheduled events.
    *
    * @ignore
    * @since 2.1.0
    *
    * @param string $hook Name of the hook that was scheduled to be fired.
    * @param array  $args The arguments to be passed to the hook.
    */
    do_action_ref_array( $hook, $v['args'] );

Здесь он вызывает функцию wp_reschedule_event(), которая использует ту же метку времени, поэтому следующее расписание будет во вторник 12:00 утра , А НЕ 1:20 утра. Затем он вызовет крючок действия по расписанию.

  1. Распространенная ошибка людей заключается в том, что они звонят wp_schedule_event() непосредственно в functions.php, поэтому WP планирует событие на каждой новой отметке времени. Правильный способ - проверить, есть ли расписание, только затем создать его.

    $my_schedule_hook = wp_next_scheduled('my_schedule_hook');
    if (!$my_schedule_hook) {
        wp_schedule_event(time(), 'daily', 'my_schedule_hook');
    }
    

Таким образом, он войдет внутрь блока if только в первый раз, когда там не будет никакого расписания вообще. Тем не менее, вы можете просмотреть все расписание с помощью этого плагина WP Crontrol

 0
Author: Sumit, 2016-03-31 17:51:08