我有一个酒店预订网站,使用以下插件在Wordpress
制作:
结束目标
我的最终目标是展示Start&我的购物车/结账页面上的预订结束日期&电子邮件。
目前我正在制作购物车中的结束日期。
在 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>';
我可以看到End Date值在这个数组中(作为一个整数,这很奇怪?):
["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)&#34;&#34 ;;
问题 我该如何显示结束日期?并将其格式化以便显示为日期?
研究
我在stackoverflow上找到了这个问题: How to retrieve cart_item_data with WooCommerce? 但我不知道如何为我的案子实施它?
product-add-ons插件正确显示他的元数据所以我查看了所使用的代码,插件使用的是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 );
}
我还在管理员收到的电子邮件模板中找到了一段代码,其中显示了Start&amp;结束日期。结束日期简单地回应如下:
<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->get_end_date();
并不起作用因为$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;
}
答案 0 :(得分:3)
第一项业务是在购物车中显示附加元。您可以看到过滤器woocommerce_get_item_data
,您可以将键/值添加到定义列表中,该列表显示变体信息或产品添加信息,或者在预订的情况下为开始日期。
我已经从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;
}