Повторное использование формата даты в другом шаблоне.

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

Я использую плагин wp-hotelier. Страница /booking отображает даты/время $checkin и $checkout в удобочитаемом формате (например, 30 января 2025 (12:00 – 21:00) / 31 января 2025 (08:00 – 13:00))… и это выводится через <?php echo esc_html( $checkin ); ?> и <?php echo esc_html( $checkout ); ?> соответственно в шаблоне booking/reservation-details.php.

Я пытаюсь вывести тот же формат дат/времени через шорткод, который отображает шаблон room-content.php, но использование того же PHP-кода изменяет формат на 2025-01-30 и 2025-01-31.

Я нашел функцию, которая, как я полагаю, контролирует вывод этих дат на странице /booking, внутри class HTL_Booking, и похоже, что функция передает дату и формат в шаблон booking/reservation-details.php:

public function booking_details() {
    $checkin      = date_i18n( get_option( 'date_format' ), strtotime( $this->checkin ) ) . ' (' . HTL_Info::get_hotel_checkin() . ')';
    $checkout     = date_i18n( get_option( 'date_format' ), strtotime( $this->checkout ) ) . ' (' . HTL_Info::get_hotel_checkout() . ')';
    $pets_message = HTL_Info::get_hotel_pets_message();
    $cards        = HTL_Info::get_hotel_accepted_credit_cards();

    htl_get_template( 'booking/reservation-details.php', array(
        'booking'      => $this,
        'checkin'      => $checkin,
        'checkout'     => $checkout,
        'pets_message' => $pets_message,
        'cards'        => $cards,
    ) );
}

Я пытался изменить эту функцию, чтобы также передавать данные в шаблон room-content.php, но потерпел неудачу из-за ограниченных знаний PHP. Я пытался изменить первый аргумент в функции htl_get_template на массив с дополнительным шаблоном: htl_get_template( array('booking/reservation-details.php', 'room-list/room-content.php'), ..., но формат даты не изменился.

Я хотел бы получить помощь, чтобы правильно отформатировать дату в шаблоне room-content.php. Я, вероятно, также захочу использовать это в других шаблонах. Я заинтересован в обучении, поэтому буду благодарен за любые дополнительные объяснения и руководство! Спасибо

Извиняюсь за вопрос не по теме. Я нашел ответ на StackOverflow, это PHP вопрос, не специфический для WordPress. Следующий код изменяет формат как требуется. Из https://stackoverflow.com/questions/2487921/convert-a-date-format-in-php

<?php $new_checkin = date('jS F Y', strtotime($checkin)); ?>
<?php echo esc_html( $new_checkin ); ?>

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

Вопрос о повторном использовании формата даты в различных шаблонах в рамках работы с плагином WordPress wp-hotelier имеет не только технический, но и концептуальный аспект. В данном случае, задача заключается в том, чтобы единообразно выводить даты в нескольких шаблонах сайта, что подразумевает необходимость понимания того, как управлять форматированием данных на стороне сервера в рамках WordPress. Рассмотрим ситуацию более детально.

Теория

Веб-разработка на платформе WordPress осуществляется через использование PHP, что дает большие возможности для кастомизации, а именно выполнения пользовательских нужд за счет использования таких концептов, как шаблоны и короткие коды (shortcodes). В данном случае, вы столкнулись с проблемой различных форматов вывода дат на двух страницах, что связано с тем, как именно функция date_i18n и другие функции обработки данных реализованы в ваших PHP-файлах.

Функция date_i18n используется для форматирования даты в WordPress с учетом настроек локализации, что обычно определено в админпанели WordPress под "Настройки → Общие". Она позволяет выводить дату в зависимости от формата, который задает пользователь, что обеспечивает гибкость в отображении информации.

Пример

В вашем случае, функция в классе HTL_Booking формирует строку даты с использованием date_i18n, а затем добавляет к ней время заселения и выезда. Этот метод работает в шаблоне booking/reservation-details.php для корректного вывода данных. Вы пытаетесь применить этот же подход к шаблону room-content.php, однако сталкиваетесь с проблемой, что простой вывод переменной $checkin или $checkout не дает нужного результата.

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

public function booking_details() {
    // Форматирование даты под нужный нам вид
    $checkin  = date_i18n( get_option( 'date_format' ), strtotime( $this->checkin ) ) . ' (' . HTL_Info::get_hotel_checkin() . ')';
    $checkout = date_i18n( get_option( 'date_format' ), strtotime( $this->checkout ) ) . ' (' . HTL_Info::get_hotel_checkout() . ')';

    // Передача отформатированных строк в нужный шаблон
    htl_get_template('booking/reservation-details.php', array(
        'checkin'  => $checkin,
        'checkout' => $checkout
    ));
}

Применение

Чтобы повторно использовать это форматирование в других шаблонах, таких как room-content.php, необходима дополнительная функция, которая выполняла бы аналогичное преобразование данных даты и времени. Это может быть сделано путем создания нового метода в вашем классе, который будет возвращать правильно отформатированные строки:

public function format_checkin_checkout_dates() {
    return array(
        'checkin'  => date_i18n( get_option( 'date_format' ), strtotime( $this->checkin ) ) . ' (' . HTL_Info::get_hotel_checkin() . ')',
        'checkout' => date_i18n( get_option( 'date_format' ), strtotime( $this->checkout ) ) . ' (' . HTL_Info::get_hotel_checkout() . ')'
    );
}

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

$date_details = $your_class_instance->format_checkin_checkout_dates();
echo esc_html($date_details['checkin']);
echo esc_html($date_details['checkout']);

Ваша задача будет заключаться в интеграции данной методологии в систему, что позволит добиться консистентности в выведении информации и упростит дальнейшую работу с элементами UI. Теперь, независимо от того, в каком шаблоне вы хотите воспроизвести формат даты, будет достаточно вызвать ваш метод, что обеспечит копирование формата использования данных и позволит избежать избыточности кода. Это не только упрощает поддержание кода, но и повышает его читаемость и надежность.

Таким образом, переход от статического повторного использования к динамическому управлению форматированием на уровне методов класса — это мощный и практичный способ, который позволит решить вашу задачу и сделает систему более гибкой к изменениям требований в будущем. Надеюсь, данное разъяснение окажется полезным для вашей работы с WordPress и поможет успешно реализовать задуманное.

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

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