Nano Hash - криптовалюты, майнинг, программирование

Метаданные Echo Cart в Woocommerce (Woocommerce-bookings)

У меня есть сайт бронирования отелей, созданный в Wordpress с использованием следующих подключаемых модулей:

  • Woocommerce версии 2.4.12
  • WooCommerce-Bookings, версия 1.9.3
  • Дополнения к продукту Версия 2.7.14

Конечная цель

Моя конечная цель - показать дату начала и окончания бронирования на моей корзине / странице оформления заказа и в электронных письмах.

В настоящее время я работаю над отображением даты окончания в корзине покупок.

в Cart.php (расположенном в плагине Woocommerce) метаданные отображаются со следующим кодом:

foreach ( WC()->cart->get_cart() as $cart_item_key => $cart_item ) {
    echo WC()->cart->get_item_data( $cart_item );
}

Результат

Текущая корзина

Когда я выполняю var_dump () массива выше, используя следующий код:

echo '<pre>';

foreach( WC()->cart->get_cart() as $cart_item ) {
    var_dump( $cart_item );
}

echo '</pre>';

Я вижу, что значение даты окончания находится в этом массиве (как целое число, что странно?):

  ["booking"]=>
  array(19) {
    ["_year"]=>
    int(2016)
    ["_month"]=>
    int(1)
    ["_day"]=>
    int(23)
    ["_persons"]=>
    array(1) {
      [234]=>
      int(1)
    }
    ["_date"]=>
    string(9) "2016-1-23"
    ["date"]=>
    string(16) "January 23, 2016"
    ["_time"]=>
    string(0) ""
    ["_qty"]=>
    int(1)
    ["Adults"]=>
    int(1)
    ["_duration_unit"]=>
    string(3) "day"
    ["_duration"]=>
    int(3)
    ["duration"]=>
    string(8) "3 nights"
    ["_start_date"]=>
    int(1453507200)
    **["_end_date"]=>
    int(1453766399)**
    ["_all_day"]=>
    int(1)
    ["_resource_id"]=>
    int(223)
    ["type"]=>
    string(15) "Suite Saadienne"
    ["_cost"]=>
    int(360)
    ["_booking_id"]=>
    int(870)
  }

Полный код массива здесь: http://pastebin.com/1nmJHYMV

Вы можете видеть, что дата окончания присутствует, поэтому я попытался повторить ее:

echo WC()->cart->get_item_data( $cart_item ["booking"]["_end_date"]);

Но это приводит к следующему: String (0) "";

Вопрос Как я могу показать дату окончания? И отформатировать его так, чтобы он отображался как дата?

Исследования

Я нашел этот вопрос здесь, в stackoverflow: Как получить данные cart_item_data с помощью WooCommerce? Но я не знаю, как это реализовать в моем случае?

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

function __construct() {
// Add to cart
add_filter( 'woocommerce_add_cart_item', array( $this, 'add_cart_item' ), 20, 1 );

// Load cart data per page load
add_filter( 'woocommerce_get_cart_item_from_session', array( $this, 'get_cart_item_from_session' ), 20, 2 );

// Get item data to display
add_filter( 'woocommerce_get_item_data', array( $this, 'get_item_data' ), 10, 2 );

// Add item data to the cart
add_filter( 'woocommerce_add_cart_item_data', array( $this, 'add_cart_item_data' ), 10, 2 );

// Validate when adding to cart
add_filter( 'woocommerce_add_to_cart_validation', array( $this, 'validate_add_cart_item' ), 999, 3 );

// Add meta to order
add_action( 'woocommerce_add_order_item_meta', array( $this, 'order_item_meta' ), 10, 2 );

// order again functionality
add_filter( 'woocommerce_order_again_cart_item_data', array( $this, 're_add_cart_item_data' ), 10, 3 );
}

Я также нашел фрагмент кода, расположенный в шаблоне электронной почты, полученном администратором, который соответствует дате начала и окончания. Дата окончания просто отображается следующим образом:

<tr>
            <th style="text-align:left; border: 1px solid #eee;" scope="row"><?php _e( 'Booking End Date', 'woocommerce-bookings' ); ?></th>
            <td style="text-align:left; border: 1px solid #eee;"><?php echo $booking->get_end_date(); ?></td>
        </tr>

Использование $booking->get_end_date(); не работает, когда я использую его в cart.php (Woocommerce), потому что $booking объявлен в контроллере плагина Woocommerce Bookings следующим образом:

public static function get_bookings_in_date_range( $start_date, $end_date, $product_or_resource_id = '', $check_in_cart = true ) {
    $transient_name = 'book_dr_' . md5( http_build_query( array( $start_date, $end_date, $product_or_resource_id, WC_Cache_Helper::get_transient_version( 'bookings' ) ) ) );

if ( false === ( $booking_ids = get_transient( $transient_name ) ) ) {
    $booking_ids = self::get_bookings_in_date_range_query( $start_date, $end_date, $product_or_resource_id, $check_in_cart );
    set_transient( $transient_name, $booking_ids, DAY_IN_SECONDS * 30 );
}

// Get objects
$bookings = array();

foreach ( $booking_ids as $booking_id ) {
    $bookings[] = get_wc_booking( $booking_id );
}

return $bookings;
}

  • +1 за очень хорошо задокументированный вопрос. Я предполагаю, что $booking->get_end_date() еще не работает, потому что у вас нет объекта $booking, и вы не можете определить его до тех пор, пока не оформите заказ (так что вы сможете использовать его на странице заказа и в электронных письмах, как только вы определите $booking). Но похоже, что данные находятся в сеансе корзины. Можете ли вы точно указать, где вы пытаетесь отобразить данные? 20.01.2016
  • Для этого вопроса я хочу отобразить данные в корзине покупок. Позже также на странице оформления заказа и в электронном письме с заказом. $ booking я не могу использовать, потому что это переменная, созданная в плагине woocommerce-bookings. Но я хочу показать данные на странице из самого плагина woocommerce. Здесь переменная $ booking не объявлена, но, как вы можете видеть, дата окончания доступна в массиве $ cart_item. 20.01.2016
  • Но где в тележке? Где в порядке? Я спрашиваю, чтобы я знал, к какой ловушке добавить код. 20.01.2016
  • Для корзины после других метаданных, поэтому после этого: foreach (WC () - ›cart-› get_cart () as $ cart_item_key = ›$ cart_item) {echo WC () -› cart- ›get_item_data ($ cart_item); } 20.01.2016

Ответы:


1

Первым делом для бизнеса отображается дополнительная мета в корзине. Вы можете увидеть фильтр woocommerce_get_item_data is где вы можете добавить ключи / значения в список определений, который отображает информацию об изменениях, или информацию о добавлении продукта, или, в случае бронирования, дату начала.

Я скопировал форматирование даты из методов даты начала и окончания Bookings с некоторыми небольшими упрощениями:

add_filter( 'woocommerce_get_item_data', 'so_34900999_display_cart_data', 10, 2 );
function so_34900999_display_cart_data( $item_data, $cart_item ){

    if ( ! empty( $cart_item['booking'] ) ) {

        $date_format = apply_filters( 'woocommerce_bookings_date_format', wc_date_format() );
        $time_format = apply_filters( 'woocommerce_bookings_time_format', ', ' . wc_time_format() );
        $end_date = apply_filters( 'woocommerce_bookings_get_end_date_with_time', date_i18n( $date_format . $time_format, $cart_item['booking']['_end_date'] ) );

        $item_data[] = array(
            'key'    => __( 'End Date', 'your-textdomain' ),
            'value'   => $cart_item['booking']['_end_date'],
            'display' => $end_date,
        );
    }
    return $item_data;
}
20.01.2016
  • Отличный ответ! пара быстрых вопросов, что означают последние 2 числа в конце фильтра? `, 10, 2);` & Мне не нужно показывать время, поэтому я предполагаю, что есть фильтр с именем get_end_date (без времени?). и могу ли я выбрать позицию, в которой он будет отображаться в корзине? теперь он на последней строчке 20.01.2016
  • 2 числа в конце - это приоритет и количество переданных параметров. Возможно, вы захотите узнать больше о add_filter() и _ 2_. woocommerce_bookings_get_end_date_with_time - фильтр. Вы можете изменить положение, манипулируя массивом $item_data во время его фильтрации. 20.01.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

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

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

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

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..