Как периодически очищать и кэшировать строки из удаленных текстовых файлов. - Мой Первый Плагин


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

Я пытаюсь очистить время последнего изменения каждого из связанных текстовых файлов (как указано в фактическом тексте авторами). Как бы то ни было, мой первый проход к плагину работает правильно, но выполняет всю очистку и анализ на время, когда посетитель (или, в моем случае, CDN каждые несколько часов) запрашивает сайт, что занимает много времени для всех перечисленных файлов. В идеале я хотел бы периодически проверять каждый из файлов через регулярные промежутки времени, возможно, используя что-то вроде wp-cron (с которым я не знаком, если не знаю, что он существует) и кэшировать результаты. Если я смогу обновлять все последние измененные даты примерно раз в день, этого будет достаточно.

Вот плагин до сих пор, и вы можете его увидеть работа в прямом эфире по первым 5 текстовым ссылкам на сайте списков фильтров, указанном выше.

Может ли кто-нибудь указать мне в правильном направлении, чтобы [заставить wp-cron] периодически очищать даты, а не во время запроса страницы?

Я довольно новичок в разработке PHP и WP, поэтому многословие приветствуется.

Спасибо.

Author: Joshua, 2016-02-29

1 answers

Переходный API может помочь вам здесь. Переходный процесс - это переменная, сохраняемая в течение определенного периода времени.

function filemtime_remote( $url )
{
    $list = file_get_contents( $url , null , null , 0 , 200);
    $important = explode("Last modified: ",$list)[1];
    $mydate = substr($important, 0, 21);
    return $mydate;
}

Выше приведен ваш текущий код, который ищет "Последнее изменение" при каждой загрузке страницы.

Вы можете преобразовать его в:

function filemtime_remote( $url ){   
        # Get the transient
        $mydate = get_transient( 'lm_' . esc_url( $url ) );

        if( false === $mydate ) {
            # The transient expired or does not exist, so we fetch the last modified again
            $list = file_get_contents( $url , null , null , 0 , 200);
            $important = explode("Last modified: ",$list)[1];
            $mydate = substr($important, 0, 21);

            # We then save that date in a transient(which we can prefix with something like "lm_")
            # We are saving the transient for 12 hours
            set_transient( 'lm_' . esc_url( $url ), $mydate , 12 * HOUR_IN_SECONDS );
        }

        return $mydate;
    }

Я не пробовал, но логика здесь такова: Используйте get_transient() чтобы узнать, есть ли у нас значение, записанное за последние 12 часов. Если у нас есть значение (возвращаемое значение не будет FALSE), используйте это значение. Если мы это сделаем не имеют значения (возвращаемое значение будет FALSE), затем запросите данные, а затем сохраните их в переходном режиме, используя set_transient(), срок его действия истекает через 12 часов.

 1
Author: RRikesh, 2016-02-29 06:15:41