Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // SAVE the product meta to CART item (does not yet display it though)
- add_filter( 'woocommerce_add_cart_item_data', 'fs_save_my_custom_product_field', 10, 2 );
- function fs_save_my_custom_product_field( $cart_item_data, $product_id ) {
- $port = get_field( 'port', $product_id, true );
- $fs_duration_monday = get_field( 'custom_duration_monday', $product_id, true );
- $fs_duration_tuesday = get_field( 'custom_duration_tuesday', $product_id, true );
- $fs_duration_wednesday = get_field( 'custom_duration_wednesday', $product_id, true );
- $fs_duration_thursday = get_field( 'custom_duration_thursday', $product_id, true );
- $fs_duration_friday = get_field( 'custom_duration_friday', $product_id, true );
- $fs_duration_saturday = get_field( 'custom_duration_saturday', $product_id, true );
- $fs_duration_sunday = get_field( 'custom_duration_sunday', $product_id, true );
- if( !empty( $port ) ) {
- $cart_item_data['port'] = $port;
- // below statement make sure every add to cart action as unique line item
- $cart_item_data['unique_key'] = md5( microtime().rand() );
- }
- if( !empty( $fs_duration_monday ) ) {
- $cart_item_data['custom_duration_monday'] = $fs_duration_monday;
- // below statement make sure every add to cart action as unique line item
- $cart_item_data['unique_key'] = md5( microtime().rand() );
- }
- if( !empty( $fs_duration_tuesday ) ) {
- $cart_item_data['custom_duration_tuesday'] = $fs_duration_tuesday;
- // below statement make sure every add to cart action as unique line item
- $cart_item_data['unique_key'] = md5( microtime().rand() );
- }
- if( !empty( $fs_duration_wednesday ) ) {
- $cart_item_data['custom_duration_wednesday'] = $fs_duration_wednesday;
- // below statement make sure every add to cart action as unique line item
- $cart_item_data['unique_key'] = md5( microtime().rand() );
- }
- if( !empty( $fs_duration_thursday ) ) {
- $cart_item_data['custom_duration_thursday'] = $fs_duration_thursday;
- // below statement make sure every add to cart action as unique line item
- $cart_item_data['unique_key'] = md5( microtime().rand() );
- }
- if( !empty( $fs_duration_friday ) ) {
- $cart_item_data['custom_duration_friday'] = $fs_duration_friday;
- // below statement make sure every add to cart action as unique line item
- $cart_item_data['unique_key'] = md5( microtime().rand() );
- }
- if( !empty( $fs_duration_saturday ) ) {
- $cart_item_data['custom_duration_saturday'] = $fs_duration_saturday;
- // below statement make sure every add to cart action as unique line item
- $cart_item_data['unique_key'] = md5( microtime().rand() );
- }
- if( !empty( $fs_duration_sunday ) ) {
- $cart_item_data['custom_duration_sunday'] = $fs_duration_sunday;
- // below statement make sure every add to cart action as unique line item
- $cart_item_data['unique_key'] = md5( microtime().rand() );
- }
- return $cart_item_data;
- }
- add_filter( 'woocommerce_get_item_data', 'fs_woocommerce_get_item_data', 11, 2 );
- function fs_woocommerce_get_item_data( $item_data, $cart_item ) {
- $product_id = isset( $cart_item[ 'product_id' ] ) ? $cart_item[ 'product_id' ] : 0;
- if ( YITH_WCBK_Product_Post_Type_Admin::is_booking( $product_id ) ) {
- /** @var WC_Product_Booking $product */
- $product = wc_get_product( $product_id );
- $fs_duration_monday = $cart_item['custom_duration_monday'];
- $fs_duration_tuesday = $cart_item['custom_duration_tuesday'];
- $fs_duration_wednesday = $cart_item['custom_duration_wednesday'];
- $fs_duration_thursday = $cart_item['custom_duration_thursday'];
- $fs_duration_friday = $cart_item['custom_duration_friday'];
- $fs_duration_saturday = $cart_item['custom_duration_saturday'];
- $fs_duration_sunday = $cart_item['custom_duration_sunday'];
- $booking_data = $cart_item[ 'yith_booking_data' ];
- $from = $booking_data[ 'from' ];
- $to = $booking_data[ 'to' ];
- $duration = $booking_data[ 'duration' ];
- $has_time = in_array( $product->get_duration_unit(), array( 'hour', 'minute' ) );
- $date_format = wc_date_format();
- $date_format .= $has_time ? ' ' . wc_time_format() : '';
- // check current day of the Booking Date and see if it matches a particular day of week
- $fs_date_day = date_i18n( 'l', $from );
- // if it does, then force change the Duration display to match the length that was set in the settings
- if( $fs_date_day === 'Monday' && $fs_duration_monday) {
- $duration = $fs_duration_monday;
- $duration_display = $duration . ' hours';
- }
- elseif( $fs_date_day === 'Tuesday' && $fs_duration_tuesday) {
- $duration = $fs_duration_tuesday;
- $duration_display = $duration . ' hours';
- }
- elseif( $fs_date_day === 'Wednesday' && $fs_duration_wednesday) {
- $duration = $fs_duration_wednesday;
- $duration_display = $duration . ' hours';
- }
- elseif( $fs_date_day === 'Thursday' && $fs_duration_thursday) {
- $duration = $fs_duration_thursday;
- $duration_display = $duration . ' hours';
- }
- elseif( $fs_date_day === 'Friday' && $fs_duration_friday ) {
- $duration = $fs_duration_friday;
- $duration_display = $duration . ' hours';
- }
- elseif( $fs_date_day === 'Saturday' && $fs_duration_saturday) {
- $duration = $fs_duration_saturday;
- $duration_display = $duration . ' hours';
- }
- elseif( $fs_date_day === 'Sunday' && $fs_duration_sunday) {
- $duration = $fs_duration_sunday;
- $duration_display = $duration . ' hours';
- }
- // otherwise fallback to the default setting from YITH
- else {
- $duration_display = yith_wcbk_format_duration( $duration, $product->get_duration_unit() );
- }
- // get the original from date again
- $fs_from = $booking_data[ 'from' ];
- $fs_duration_minutes = $duration * 60;
- // get the custom end date by adding new duration in minutes
- $fs_until_new = strtotime('+'. $fs_duration_minutes .' minutes', $fs_from);
- $booking_item_data = array(
- 'yith_booking_from' => array(
- //'key' => yith_wcbk_get_booking_meta_label( 'from' ),
- 'key' => 'Cruising on',
- 'value' => $from,
- 'display' => date_i18n( 'l, F, j Y', $from ) .' from '. date_i18n( wc_time_format(), $from ) .' to '. date_i18n( wc_time_format(), $fs_until_new )
- ),
- 'yith_booking_to' => array(
- 'key' => yith_wcbk_get_booking_meta_label( 'to' ),
- 'value' => $to,
- 'display' => date_i18n( $date_format, $to )
- ),
- 'yith_booking_duration' => array(
- 'key' => yith_wcbk_get_booking_meta_label( 'duration' ),
- 'value' => $duration,
- 'display' => $duration_display
- )
- );
- $item_data = array_merge( $item_data, $booking_item_data );
- }
- return $item_data;
- }
- /**
- * get booking details from booking data
- *
- * @param array $booking_data
- * @param int $product_id
- *
- * @return array
- *
- * @since 2.0.6
- */
- public function get_booking_order_item_details( $booking_data, $product_id = 0 ) {
- $details = array();
- foreach ( $booking_data as $booking_data_key => $booking_data_value ) {
- $this_title = yith_wcbk_get_booking_meta_label( $booking_data_key );
- switch ( $booking_data_key ) {
- case 'person_types':
- if ( is_array( $booking_data_value ) ) {
- foreach ( $booking_data_value as $person_type ) {
- if ( !empty( $person_type[ 'number' ] ) ) {
- $details[] = array(
- 'key' => $person_type[ 'title' ],
- 'value' => $person_type[ 'number' ],
- );
- }
- }
- }
- break;
- case 'booking_services':
- if ( is_array( $booking_data_value ) ) {
- $booking_services = array();
- $hidden_booking_services = array();
- foreach ( $booking_data_value as $service ) {
- if ( !$service[ 'hidden' ] ) {
- $booking_services[] = $service[ 'title' ];
- } else {
- $hidden_booking_services[] = $service[ 'title' ];
- }
- }
- if ( !!$booking_services ) {
- $details[] = array(
- 'key' => yith_wcbk_get_label( 'booking-services' ),
- 'value' => yith_wcbk_booking_services_html( $booking_services ),
- );
- }
- if ( !!$hidden_booking_services ) {
- $details[] = array(
- 'key' => '_hidden_booking_services',
- 'value' => yith_wcbk_booking_services_html( $hidden_booking_services ),
- );
- }
- }
- break;
- case 'from':
- case 'to':
- /** @var WC_Product_Booking $product */
- $product = wc_get_product( $product_id );
- $date_format = wc_date_format();
- if ( $product && $product->is_type( 'booking' ) && $product->has_time() ) {
- $date_format .= ' ' . wc_time_format();
- }
- $this_value = date_i18n( $date_format, $booking_data_value );
- $details[] = array(
- 'key' => $this_title,
- 'value' => $this_value,
- );
- break;
- case 'duration':
- $this_value = $booking_data_value;
- $product = wc_get_product( $product_id );
- if ( $product && $product instanceof WC_Product_Booking ) {
- $duration_unit = $product->get_duration_unit();
- $duration_unit_label = yith_wcbk_get_duration_unit_label( $duration_unit, absint( $booking_data_value ) );
- $this_value .= ' ' . $duration_unit_label;
- }
- $details[] = array(
- 'key' => $this_title,
- 'value' => $this_value,
- );
- break;
- default:
- $details[] = array(
- 'key' => $this_title,
- 'value' => $booking_data_value,
- );
- break;
- }
- }
- return apply_filters( 'yith_wcbk_order_get_booking_order_item_details', $details, $booking_data, $product_id );
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement