우커머스 – 프로그래밍 방식으로 예약 생성

우커머스 – 프로그래밍 방식으로 예약 생성

예약 또는 다른 플러그인에서 예약을 생성하려는 경우 PHP를 사용하여 프로그래밍 방식으로 예약을 생성할 수 있습니다. 사용하는 기능은 create_wc_booking 입니다.

참고: 이것은 개발자 수준의 문서입니다. 코드에 익숙하지 않고 잠재적 충돌을 해결하는 경우 WooExpert 또는 개발자에게 도움을 요청하십시오. 우커머스 지원 정책에 따라 사용자 지정에 대한 지원을 제공하지 않는다고 합니다.

create_wc_booking 함수

이 함수는 다음 인수를 사용합니다.

create_wc_booking($ product_id, $new_booking_data = array(), $status = 'confirmed', $exact = false)

  1. 제품 ID: 새 예약을 생성하는 예약 가능한 제품의 ID입니다.
  2. 새로운 예약 데이터: 예약 데이터의 배열. 아래의 “예약 데이터 배열”을 참조하십시오.
  3. 상태: 새 예약의 상태입니다. 유효한 상태에는 ‘미지급’, ‘보류 중’, ‘확인’, ‘취소’, ‘완료’가 있습니다.
  4. Exact: true 또는 false – false인 경우 예약하려는 날짜를 사용할 수 없는 경우 함수는 시작 날짜 이후에 사용 가능한 다음 슬롯을 찾습니다.

예약 데이터 배열

$new_booking_data 인수가 새 예약에 전달됩니다. 기본적으로 다음으로 구성됩니다.

$defaults = array(
        'product_id'  => $product_id, // Booking ID
        'start_date'  => '',
        'end_date'    => '',
        'resource_id' => '',
    );

새 예약의 시작일과 종료일을 전달하고 싶을 것입니다. Unix 타임 스탬프를 전달해야 합니다.

리소스 ID는 선택 사항이며 예약 가능한 제품에 여러 리소스가 있는 경우에만 전달되어야 합니다. 제품을 편집할 때 리소스 섹션에서 ID를 찾을 수 있습니다.

예약 데이터에 대해 다음과 같은 기본값이 아닌 인수도 지원됩니다.

  • user_id – 예약 대상인 사용자의 ID
  • order_item_id – 예약 가능한 제품이 포함된 주문에 예약을 연결하는 경우 주문 항목의 ID입니다.
  • persons– 이 예약에 해당하는 인원 수 또는 개수가 있는 개인 유형 배열
  • cost – 예약 비용
  • all_day – 종일 예약인 경우 true 또는 false
  • parent_id – 기존 예약에 대한 후속 조치 인 경우 이전 예약의 ID입니다.

사용 사례: 1주 후속 예약 만들기

이 예는 새로운 예약이 이루어진 후 일주일 후 후속 예약을 생성하는 방법을 보여줍니다.


/** 
 * 코드는 테마의 functions.php에 들어갑니다.
 * 이 예에서는 예약이 결제된 후 1주일 후에 예약을 생성합니다.
 * 이것은 다른 주문이나 결제를 생성하지 않고 단지 추가 예약을 생성합니다.
 * $exact는 false입니다. 즉, 슬롯이 사용되면 다음 사용 가능한 슬롯이 사용됩니다.

 * @link https://docs.woocommerce.com/document/creating-bookings-programatically/
 */
function auto_create_followup_booking( $booking_id ) {
	
	// ID에서 이전 예약 가져 오기
	$prev_booking = get_wc_booking( $booking_id );
	
	// 후속 조치에 대한 후속 조치를 원하지 않음
	if ( $prev_booking->get_parent_id() <= 0 ) {
		// 후속 데이터 설정
		$new_booking_data = array(
			'start_date'  => strtotime( '+1 week', $prev_booking->get_start() ), // same time, 1 week on
			'end_date'    => strtotime( '+1 week', $prev_booking->get_end() ),   // same time, 1 week on
			'resource_id' => $prev_booking->get_resource_id(),                   // same resource
			'parent_id'   => $booking_id,                                        // set the parent
		);
		// 이전 예약에 사람이 있었습니까?
		$persons = $prev_booking->get_persons();
		if ( is_array( $persons ) && 0 < count( $persons ) ) {
			$new_booking_data['persons'] = $persons;
		}
		// 이전 예약이 하루 종일 이었습니까?
		if ( $prev_booking->is_all_day() ) {
			$new_booking_data['all_day'] = true;
		}
		create_wc_booking( 
			$prev_booking->get_product_id(), // Creating a booking for the previous bookings product
			$new_booking_data,               // Use the data pulled above
			$prev_booking->get_status(),     // Match previous bookings status
			false                            // Not exact, look for a slot
		);
	}
}
add_action( 'woocommerce_booking_in-cart_to_paid', 'auto_create_followup_booking' );
add_action( 'woocommerce_booking_unpaid_to_paid', 'auto_create_followup_booking' );
add_action( 'woocommerce_booking_confirmed_to_paid', 'auto_create_followup_booking' );

원문: https://docs.woocommerce.com/document/creating-bookings-programatically/

코멘트 제출