我有一个酒店预订网站,它是用Wordpress制作的,使用以下插件:
最终目标
我的最终目标是在我的购物车/收银台页面和电子邮件上显示预订的开始和结束日期。
目前,我正在我的购物车中显示结束日期。
在Cart.php (位于Woocommerce-plugin中)中,元数据用以下代码显示:
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)“;
问题我怎样才能显示结束日期?并将其格式化,以便将其显示为日期?
Research
我在堆栈溢出中发现了这个问题:data with WooCommerce?,但我不知道如何为我的情况实现它?
产品加载项插件正确地显示了他的元数据,所以我查看了所使用的代码,插件使用了Woocommerce Hooks,,但我不明白最后两个数字意味着什么?。
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>当我在cart.php( Woocommerce )中使用它时,使用它不起作用,因为$booking是在Woocommerce预订插件的控制器中声明的,如下所示:
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;
}发布于 2016-01-20 16:22:21
第一个任务是在购物车中显示额外的元。您可以看到过滤器woocommerce_get_item_data是您可以向显示变化信息的定义列表中添加键/值的地方,或者产品添加到信息上,或者在预订的情况下是开始日期。
我从预订的开始和结束日期方法中复制了日期格式,并做了一些简化:
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;
}https://stackoverflow.com/questions/34900999
复制相似问题