Вопрос или проблема
Я создал плагин для отображения контента каждый день с определенной даты
на одной странице у меня есть [content_delay days=”1″]
день 1
[/content_delay] [content_delay days=”2″]
день 2
[/content_delay] [content_delay days=”3″]
день 3
[/content_delay] и так далее…
работает 2 дня, а потом не работает
какие-нибудь идеи, почему это не работает каждый день?
Код :
function display_content_with_delay($atts, $content = null) {
$atts = shortcode_atts(array(
'days' => '0',
), $atts);
if (is_user_logged_in()) {
$user_id = get_current_user_id();
$user_date_debut = get_user_meta($user_id, 'user_date_debut', true);
if ($user_date_debut) {
$start_date = DateTime::createFromFormat('Y-m-d', $user_date_debut);
if ($start_date === false) {
return "";
}
$start_date->modify('+' . intval($atts['days']) . ' days');
$start_of_day = clone $start_date;
$start_of_day->setTime(0, 0, 0);
$end_of_day = clone $start_date;
$end_of_day->setTime(23, 59, 59);
$current_date = new DateTime('now', new DateTimeZone('UTC'));
if ($current_date >= $start_of_day && $current_date <= $end_of_day) {
return do_shortcode($content);
} else {
return "";
}
} else {
return "";
}
} else {
return "";
}
}
add_shortcode('content_delay', 'display_content_with_delay');
Ответ или решение
Анализ проблемы с неработающим плагином
Введение
Созданный вами плагин предназначен для отображения контента на основе установленного пользователем времени ожидания. Однако вы столкнулись с проблемой: контент отображается только в течение двух дней, после чего перестает работать. Разберем причины, по которым это может происходить.
Первичная диагностика
-
Проверка метаданных пользователя: Код использует
get_user_meta
для получения даты начала (user_date_debut
). Убедитесь, что эта метаинформация корректно сохраняется для пользователя и обновляется по истечении заданного времени. Если пользователь не обновляет свою метадату, то это может быть главной причиной проблемы. -
Логика работы с датами: Рассмотрим блок, отвечающий за вычисления времени. Ваша функция добавляет определенное количество дней к начальной дате:
$start_date->modify('+' . intval($atts['days']) . ' days');
Здесь важно проверить, правильно ли вы задаете формат даты в
user_date_debut
. Ошибочный формат даты приведет к некорректной работе функции. -
Текущая дата и часовой пояс: Вы используете
new DateTime('now', new DateTimeZone('UTC'));
, которая может не совпадать с локальным временем пользователя. Проверьте, что часовой пояс установлен правильно и соответственно.
Проблемные участки кода
-
Логика отображения контента: Условие, отвечающее за вывод контента, требует, чтобы текущая дата находилась между
start_of_day
иend_of_day
. Если после двух дней значениеstart_date
выходит за пределы этого диапазона, контент не будет отображаться.if ($current_date >= $start_of_day && $current_date <= $end_of_day) { return do_shortcode($content); }
Возможно, вам потребуется перезагрузить
user_date_debut
по истечении каждого дня, чтобы пользователь мог видеть новый контент. -
Проверка на авторизацию пользователей: Скрипт работает только для авторизованных пользователей. Проверьте, что пользователи действительно находятся в системе и имеют соответствующие права доступа.
Рекомендации по исправлению
-
Логика обновления метаданных: Добавьте функционал, который будет обновлять
user_date_debut
на текущую дату по истечении предыдущего рабочего дня, чтобы пользователь продолжал получать контент. -
Локализация времени: Убедитесь, что время проверки совпадает с временными настройками сайта:
$current_date = new DateTime('now', new DateTimeZone(get_option('date_default_timezone_string')));
-
Отладка: Вставьте отладочные сообщения в код, чтобы отслеживать изменения значений переменных во время его выполнения. Это поможет точно определить, на каком этапе происходит сбой.
Заключение
Убедившись в корректности данных пользователя, обновлении необходимых метаданных и настройках часового пояса, вы должны быть в состоянии решить проблему с вашим плагином. Правильное исправление этих аспектов обеспечит стабильную работу контентной логики вашего плагина и повысит удовлетворенность пользователей.