Плагин: он работает всего 2 дня, а затем перестает работать.

Вопрос или проблема

Я создал плагин для отображения контента каждый день с определенной даты

на одной странице у меня есть [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');

Ответ или решение

Анализ проблемы с неработающим плагином

Введение

Созданный вами плагин предназначен для отображения контента на основе установленного пользователем времени ожидания. Однако вы столкнулись с проблемой: контент отображается только в течение двух дней, после чего перестает работать. Разберем причины, по которым это может происходить.

Первичная диагностика

  1. Проверка метаданных пользователя: Код использует get_user_meta для получения даты начала (user_date_debut). Убедитесь, что эта метаинформация корректно сохраняется для пользователя и обновляется по истечении заданного времени. Если пользователь не обновляет свою метадату, то это может быть главной причиной проблемы.

  2. Логика работы с датами: Рассмотрим блок, отвечающий за вычисления времени. Ваша функция добавляет определенное количество дней к начальной дате:

    $start_date->modify('+' . intval($atts['days']) . ' days');

    Здесь важно проверить, правильно ли вы задаете формат даты в user_date_debut. Ошибочный формат даты приведет к некорректной работе функции.

  3. Текущая дата и часовой пояс: Вы используете new DateTime('now', new DateTimeZone('UTC'));, которая может не совпадать с локальным временем пользователя. Проверьте, что часовой пояс установлен правильно и соответственно.

Проблемные участки кода

  1. Логика отображения контента: Условие, отвечающее за вывод контента, требует, чтобы текущая дата находилась между 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 по истечении каждого дня, чтобы пользователь мог видеть новый контент.

  2. Проверка на авторизацию пользователей: Скрипт работает только для авторизованных пользователей. Проверьте, что пользователи действительно находятся в системе и имеют соответствующие права доступа.

Рекомендации по исправлению

  1. Логика обновления метаданных: Добавьте функционал, который будет обновлять user_date_debut на текущую дату по истечении предыдущего рабочего дня, чтобы пользователь продолжал получать контент.

  2. Локализация времени: Убедитесь, что время проверки совпадает с временными настройками сайта:

    $current_date = new DateTime('now', new DateTimeZone(get_option('date_default_timezone_string')));
  3. Отладка: Вставьте отладочные сообщения в код, чтобы отслеживать изменения значений переменных во время его выполнения. Это поможет точно определить, на каком этапе происходит сбой.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...