从 WooCommerce Booking Google 未付款状态的日历同步中排除产品
Exclude a product from WooCommerce Booking Google calendar sync in unpaid status
我无法从 woocommerce 预订中排除 1 个产品 Google 处于未付款状态的日历同步。我有一个客户在他们付款的地方预订个人 类。这些 类 我需要在未付费状态下与我的 google 日历同步。 1 个产品供更多人使用,每个人都必须在课程开始前付款。我想在这些预订付款到我的日历后同步它们。
我使用此代码将未付款的预订添加到我的 google 日历中。
add_filter('woocommerce_booking_is_paid_statuses', 'woocommerce_booking_add_unpaid_to_is_paid_statuses');
function woocommerce_booking_add_unpaid_to_is_paid_statuses( $statuses ) {
$statuses[]= 'unpaid';
return $statuses;
}
我需要从该函数中排除产品 ID 946。你能给我一些建议吗?谢谢!
更新
我试过像这样修改函数,但我在 wp 中仍然遇到一些错误。
代码
function woocommerce_bookings_kalendar( $statuses, $order ) {
// Get items in order
$items = $order->get_items();
// Loop for all items
foreach ( $items as $item ) {
$product_id = $item['product_id'];
if ( $product_id == 946 ) {
$statuses[]= 'unpaid';
return $statuses;
}
}
}
add_filter('woocommerce_booking_is_paid_statuses', 'woocommerce_bookings_kalendar');
错误:
Fatal error: Uncaught ArgumentCountError: Too few arguments to function woocommerce_bookings_kalendar()
更新 2
为了避免"Fatal error: Uncaught ArgumentCountError: Too few arguments: ..."错误,应该需要声明hook参数的个数(variables),当有多个时,在add_filter()
函数中如:
add_filter( 'woocommerce_booking_is_paid_statuses', 'filter_booking_is_paid_statuses', 10, 2 );
function filter_booking_is_paid_statuses( $statuses, $order ) {
// Do something
return $statuses;
}
这将解决此错误。
But the hook woocommerce_booking_is_paid_statuses
, located in includes/class-wc-bookings-google-calendar-connection.php
file of WooCommerce booking plugin and has a unique variable argument $statuses
.
So in your code $order
will be always null
and $items = $order->get_items();
will throw another error.
因此无法使用此挂钩获取订单详细信息。
要从 WooCommerce Booking Google 日历同步中排除特定的未付款预订,您可以尝试另外使用 woocommerce_bookings_gcalendar_sync
过滤器挂钩。
因此您的代码替换将是:
add_filter( 'woocommerce_booking_is_paid_statuses', 'filter_booking_is_paid_statuses' );
function filter_booking_is_paid_statuses( $statuses ) {
return array_merge( $statuses, array('unpaid') );
}
add_filter( 'woocommerce_bookings_gcalendar_sync', 'filter_bookings_gcalendar_sync', 10, 2 );
function filter_booking_has_status( $event, $booking ){
$excl_product_id = 946;
if( $booking->get_status() === 'unpaid' && $booking->get_product_id() !== $excl_product_id ) {
$event = new Google_Service_Calendar_Event(); // Get an empty event Object
$event->setid( $booking->get_google_calendar_event_id() ); // Set Id
}
return $event;
}
代码进入活动子主题(或活动主题)的 functions.php 文件。未经测试它可以工作。
我无法从 woocommerce 预订中排除 1 个产品 Google 处于未付款状态的日历同步。我有一个客户在他们付款的地方预订个人 类。这些 类 我需要在未付费状态下与我的 google 日历同步。 1 个产品供更多人使用,每个人都必须在课程开始前付款。我想在这些预订付款到我的日历后同步它们。
我使用此代码将未付款的预订添加到我的 google 日历中。
add_filter('woocommerce_booking_is_paid_statuses', 'woocommerce_booking_add_unpaid_to_is_paid_statuses');
function woocommerce_booking_add_unpaid_to_is_paid_statuses( $statuses ) {
$statuses[]= 'unpaid';
return $statuses;
}
我需要从该函数中排除产品 ID 946。你能给我一些建议吗?谢谢!
更新
我试过像这样修改函数,但我在 wp 中仍然遇到一些错误。
代码
function woocommerce_bookings_kalendar( $statuses, $order ) {
// Get items in order
$items = $order->get_items();
// Loop for all items
foreach ( $items as $item ) {
$product_id = $item['product_id'];
if ( $product_id == 946 ) {
$statuses[]= 'unpaid';
return $statuses;
}
}
}
add_filter('woocommerce_booking_is_paid_statuses', 'woocommerce_bookings_kalendar');
错误:
Fatal error: Uncaught ArgumentCountError: Too few arguments to function woocommerce_bookings_kalendar()
更新 2
为了避免"Fatal error: Uncaught ArgumentCountError: Too few arguments: ..."错误,应该需要声明hook参数的个数(variables),当有多个时,在add_filter()
函数中如:
add_filter( 'woocommerce_booking_is_paid_statuses', 'filter_booking_is_paid_statuses', 10, 2 );
function filter_booking_is_paid_statuses( $statuses, $order ) {
// Do something
return $statuses;
}
这将解决此错误。
But the hook
woocommerce_booking_is_paid_statuses
, located inincludes/class-wc-bookings-google-calendar-connection.php
file of WooCommerce booking plugin and has a unique variable argument$statuses
.So in your code
$order
will be alwaysnull
and$items = $order->get_items();
will throw another error.
因此无法使用此挂钩获取订单详细信息。
要从 WooCommerce Booking Google 日历同步中排除特定的未付款预订,您可以尝试另外使用 woocommerce_bookings_gcalendar_sync
过滤器挂钩。
因此您的代码替换将是:
add_filter( 'woocommerce_booking_is_paid_statuses', 'filter_booking_is_paid_statuses' );
function filter_booking_is_paid_statuses( $statuses ) {
return array_merge( $statuses, array('unpaid') );
}
add_filter( 'woocommerce_bookings_gcalendar_sync', 'filter_bookings_gcalendar_sync', 10, 2 );
function filter_booking_has_status( $event, $booking ){
$excl_product_id = 946;
if( $booking->get_status() === 'unpaid' && $booking->get_product_id() !== $excl_product_id ) {
$event = new Google_Service_Calendar_Event(); // Get an empty event Object
$event->setid( $booking->get_google_calendar_event_id() ); // Set Id
}
return $event;
}
代码进入活动子主题(或活动主题)的 functions.php 文件。未经测试它可以工作。