У меня есть сайт бронирования отелей, созданный в 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;
}
add_filter()
и _ 2_.woocommerce_bookings_get_end_date_with_time
- фильтр. Вы можете изменить положение, манипулируя массивом$item_data
во время его фильтрации. 20.01.2016