Как периодически очищать и кэшировать строки из удаленных текстовых файлов. - Мой Первый Плагин
Я поддерживаю веб-сайт ресурсов, Списки фильтров, который по сути представляет собой каталог текстовых файлов, размещенных в сети. Я пытаюсь создать свой первый плагин WordPress, чтобы (а) изучить и (б) добавить новую функцию в этот инструмент.
Я пытаюсь очистить время последнего изменения каждого из связанных текстовых файлов (как указано в фактическом тексте авторами). Как бы то ни было, мой первый проход к плагину работает правильно, но выполняет всю очистку и анализ на время, когда посетитель (или, в моем случае, CDN каждые несколько часов) запрашивает сайт, что занимает много времени для всех перечисленных файлов. В идеале я хотел бы периодически проверять каждый из файлов через регулярные промежутки времени, возможно, используя что-то вроде wp-cron (с которым я не знаком, если не знаю, что он существует) и кэшировать результаты. Если я смогу обновлять все последние измененные даты примерно раз в день, этого будет достаточно.
Вот плагин до сих пор, и вы можете его увидеть работа в прямом эфире по первым 5 текстовым ссылкам на сайте списков фильтров, указанном выше.
Может ли кто-нибудь указать мне в правильном направлении, чтобы [заставить wp-cron] периодически очищать даты, а не во время запроса страницы?
Я довольно новичок в разработке PHP и WP, поэтому многословие приветствуется.
Спасибо.
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 часов.