예약 또는 다른 플러그인에서 예약을 생성하려는 경우 PHP를 사용하여 프로그래밍 방식으로 예약을 생성할 수 있습니다. 사용하는 기능은 create_wc_booking
입니다.
참고: 이것은 개발자 수준의 문서입니다. 코드에 익숙하지 않고 잠재적 충돌을 해결하는 경우 WooExpert 또는 개발자에게 도움을 요청하십시오. 우커머스 지원 정책에 따라 사용자 지정에 대한 지원을 제공하지 않는다고 합니다.
create_wc_booking 함수
이 함수는 다음 인수를 사용합니다.
create_wc_booking($ product_id, $new_booking_data = array(), $status = 'confirmed', $exact = false)
- 제품 ID: 새 예약을 생성하는 예약 가능한 제품의 ID입니다.
- 새로운 예약 데이터: 예약 데이터의 배열. 아래의 “예약 데이터 배열”을 참조하십시오.
- 상태: 새 예약의 상태입니다. 유효한 상태에는 ‘미지급’, ‘보류 중’, ‘확인’, ‘취소’, ‘완료’가 있습니다.
- 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/