Woocommerce中的Echo Cart元数据(Woocommerce-bookings)

时间:2016-01-20 13:11:37

标签: php wordpress woocommerce

我有一个酒店预订网站,使用以下插件Wordpress制作:

  • Woocommerce版本2.4.12
  • WooCommerce-Bookings Version 1.9.3
  • 产品附加组件版本2.7.14

结束目标

我的最终目标是展示Start&我的购物车/结账页面上的预订结束日期&电子邮件。

目前我正在制作购物车中的结束日期。

Cart.php (位于Woocommerce-plugin中),元数据显示如下:

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

结果

Current Cart

当我使用以下代码执行上面数组的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;
}

1 个答案:

答案 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;
}