우커머스 예약 – Snippets: Tips & Tweaks

우커머스 예약 – Snippets: Tips & Tweaks

이 문서에서는 Bookings의 기능을 사용자 지정하는데 유용한 많은 스니펫(Snippet)을 찾을 수 있습니다.

스니펫

스니펫을 사용하려면 포함된 코드를 자식 테마의 functions.php 파일에 복사할 수 있습니다.

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

커스터마이징

캘린더를 처음 사용 가능한 예약으로 기본 설정

기본적으로 ‘현재 달’은 성능상의 이유로 Bookings 캘린더에 표시됩니다. 이것은 사용 가능한 첫 번째 블록이 있는 달로 기본 설정됩니다.

/**
* 예약 캘린더를 첫 번째 예약 가능한 달로 기본 설정합니다. */
add_filter( 'wc_bookings_calendar_default_to_current_date', '__return_false' );

예약 요약에서 날짜 수정

요약의 예약 날짜는 wc_bookings_summary_list_date 필터를 사용하여 수정할 수 있습니다. 이 필터는 원래 날짜 문자열, 시작에 대한 타임 스탬프 및 종료에 대한 타임 스탬프의 세 가지 인수를 전달합니다.

이 예에서는 요약에 대해 시작 날짜만 반환되도록 날짜를 수정합니다.

/**
  * wc_bookings_summary_list_date는 예약 요약 날짜를 필터링하는데 사용됩니다.
  * 이 예에서는 여러 일의 예약의 종료 날짜를 제거합니다.
  *
  * @param string $booking_date 기본적으로 표시되는 형식화된 날짜입니다.
  * @param int $booking_start 예약 시작 시간/날짜에 대한 타임 스탬프입니다.
  * @param int $booking_end 예약 종료 시간/날짜에 대한 타임 스탬프입니다.
  * @return string 수정된 날짜 문자열입니다.
  */

function modify_summary_date_20170821( $booking_date, $booking_start, $booking_end ) {
	return date( 'F j, Y', $booking_start );
}
add_filter( 'wc_bookings_summary_list_date', 'modify_summary_date_20170821', 10, 3 );
시작 날짜만 반환

장바구니 내 예약 만료시기 수정

예약이 카트에 추가되면 즉시 생성됩니다. 이를 통해 블록이 달력에 적절하게 예약될 수 있습니다. 기본적으로 이러한 예약은 60분 후에 만료되며 WP Cron 이벤트에 의해 삭제됩니다.

woocommerce_bookings_remove_inactive_cart_time 필터를 사용하면 이 시간을 늘리거나 줄일 수 있습니다. 아래 예는 시간을 30분으로 단축합니다.

<?php // do not copy this line

/**
  * 장바구니 예약이 만료되는데 걸리는 시간 (분)이 변경됩니다.
  * 이 예에서는 숫자를 60에서 30으로 줄입니다.
  *
  * @param int $ minutes 60이 기본 전달됨
  * @return int 장바구니 예약이 만료되기를 원하는 시간 (분)입니다.
  */

function change_incart_bookings_expiry_minutes_20170825( $minutes ) {
	return 30;
}
add_filter( 'woocommerce_bookings_remove_inactive_cart_time', 'change_incart_bookings_expiry_minutes_20170825' );

참고: 이 시간이 단 몇 분으로 단축되면 고객이 결제를 완료하기 전에 고객의 장바구니에서 예약이 삭제될 수 있습니다. 최소 권장 시간은 15분입니다.

MAX_JOIN_SIZE 오류를 수정하려면 Big Selects 사용

때때로 공유 호스트는 MAX_JOIN_SIZE에 대한 낮은 임계 값을 가지고 있어 일반적으로 WooCommerce Bookings 및 WordPress에 문제가 발생합니다. 이 예제는 대부분의 경우 고칩니다.

/**
  * 호스트가 MAX_JOIN_SIZE에 대한 임계 값이 낮을 때 큰 선택을 활성화합니다.
  * 때때로 공유 호스팅인 경우입니다.
  */

function enable_big_selects_for_bookings_20170825() {
	global $wpdb;
	$wpdb->query( 'SET SQL_BIG_SELECTS=1' );
}
add_action( 'init', 'enable_big_selects_for_bookings_20170825' );

COD를 통해 구매한 예약 자동 확인

COD를 통한 예약 주문은 미결제 상태로 유지됩니다. 일부 상점 소유자는 이러한 예약을 확인됨 상태로 이동하기를 원할 수 있습니다. 이 예에서는 다음을 수행합니다.

/**
  * COD를 통해 결제한 경우 예약을 확인됨 상태로 전환합니다.
  *
  * @param int $ order_id 주문 ID
  */
function set_cod_bookings_confirmed_20170825( $order_id ) {
	
	// 주문을 받은 다음 결제 수단이 COD인지 확인합니다.
	$order = wc_get_order( $order_id );
	if ( 'cod' !== $order->get_payment_method() ) {
		return;
	}
	// 주문에서 예약을 받을 수 있도록 데이터 저장소 클래스를 호출합니다.
	$booking_data = new WC_Booking_Data_Store();
	$booking_ids  = $booking_data->get_booking_ids_from_order_id( $order_id );
	// 예약이 있는 경우 각각을 거쳐 상태를 업데이트합니다.
	if ( is_array( $booking_ids ) && count( $booking_ids ) > 0 ) {
		foreach ( $booking_ids as $booking_id ) {
			$booking = get_wc_booking( $booking_id );
			$booking->update_status( 'confirmed' );
		}
	}
}
add_action( 'woocommerce_order_status_processing', 'set_cod_bookings_confirmed_20170825', 20 );

WooCommerce Product Dependencies 탭 표시

WooCommerce Product Dependencies는 A 제품을 구매한 경우 B 제품을 구매할 수 있도록 만드는 간단한 확장 기능입니다. 예약 가능한 제품에 대해 이 확장 기능 탭을 표시하려면 필터를 사용해야합니다.

/**
  * 예약 가능한 제품에 탭이 표시 되도록합니다.
  *
  * @param array $tabs 제품 설정의 탭 목록입니다.
  */
function add_bookable_product_to_dependencies( $tabs ) {
	// 클래스가 있는지, 탭이 설정되어 있는지 확인.
	if ( class_exists( 'WC_Product_Dependencies' ) && isset( $tabs['dependencies'] ) ) {
		// 맞으면, JS hooks에 대한 클래스를 추가.
		$tabs['dependencies']['class'][] = 'show_if_booking';
	}
	return $tabs;
}
add_filter( 'woocommerce_product_data_tabs', 'add_bookable_product_to_dependencies', 999 );

달력 선택기가 사용자 화면에서 사용되지 않는 경우 날짜 형식 변경

기본적으로 달력 선택기를 사용하지 않는 경우 고객이 날짜를 입력하는데 사용되는 필드는 MM/DD/YYYY 형식입니다. 이것을 DD/MM/YYYY 형식으로 업데이트하려면 다음 스니펫을 사용할 수 있습니다.

/**
 * 예약 가능한 제품에서 달력을 사용하지 않을 때 날짜 형식이 DD/MM/YYYY가 되도록합니다. 
 */
add_filter( 'woocommerce_bookings_mdy_format' , '__return_false' );

또한 Bookings에는 보다 맞춤화된 접근 방식을 위해 재정의할 수 있는 템플릿이 있습니다.

캘린더 통합을 위해 Google Developer Console의 맞춤 애플리케이션 사용

Bookings Google 캘린더 통합을 사용하려면 스토어에 Google 캘린더에 대한 액세스 권한을 부여하기 위해 공식 WooCommerce 앱에 권한을 부여해야 합니다. Google Developer Console에서 자체 앱 설정을 사용하려면 다음 스니펫으로 Google 클라이언트의 ID와 비밀번호를 업데이트하면 됩니다.

/**
 * Google Developer's Console에서 자체 애플리케이션의 클라이언트 ID와 비밀번호로 Google 클라이언트를 업데이트합니다.
 */
add_action(
	'woocommerce_bookings_update_google_client',
	function ( Google_Client $client ) {
		$client->setClientId( 'YourClientIDFromGoogleDevelopersConsole' );
		$client->setClientSecret( 'YourClientIDFromGoogleDevelopersConsole' );
	}
);

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

코멘트 제출