У меня есть сайт Hotel-бронирований, который сделан в Wordpress
с помощью следующей плагинов:Echo Корзина мета данные в WooCommerce (WooCommerce-бронирований)
- WooCommerce Версия 2.4.12
- WooCommerce-Заказ версии 1.9.3
- Продукт-дополнения Версия 2.7.14
End Цель
Моя конечная цель: показать & Конец даты бронирования на моей странице Корзина/Оформить заказ & email.
В настоящее время я работаю над показом Конечной даты в корзине.
в 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: How to retrieve cart_item_data with WooCommerce? Но я не знаю, как реализовать это для моего случая?
Продукт-надстроек плагин правильно показывает свои мета-данные, чтобы я посмотрел на код, используемый, и плагин использует WooCommerce Крючки, , но я не понимаю, что эти 2 последние цифры означают?
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);
}
Я также нашел кусок кода, расположенный в шаблоне электронной почты, полученном администратор, который correclty показывает начало & Дату окончания. Дата окончания просто повторил, как это:
<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'). Но, похоже, данные находятся в тележке. Можете ли вы точно указать, где вы пытаетесь отобразить данные? – helgatheviking
По этому вопросу я хочу отобразить данные в корзине покупок. Позже также на странице оформления и электронной почте заказа. $ booking я не могу использовать, потому что это переменная, сделанная в плагине для бронирования woocommerce. Но я хочу показать данные на странице из самого плагина woocommerce. Здесь переменная $ booking не объявлена, но, как вы можете видеть, конечная дата доступна в массиве $ cart_item. – Christophvh
Но где в корзине? Где в порядке? Я прошу, чтобы я знал, к чему добавить код. – helgatheviking