woocommerce_wpml = $woocommerce_wpml;
}
public function add_hooks() {
add_action( 'woocommerce_bookings_after_booking_base_cost', [ $this, 'wcml_price_field_after_booking_base_cost' ] );
add_action( 'woocommerce_bookings_after_booking_block_cost', [ $this, 'wcml_price_field_after_booking_block_cost' ] );
add_action( 'woocommerce_bookings_after_display_cost', [ $this, 'wcml_price_field_after_display_cost' ] );
add_action( 'woocommerce_bookings_after_booking_pricing_base_cost', [ $this, 'wcml_price_field_after_booking_pricing_base_cost' ], 10, 2 );
add_action( 'woocommerce_bookings_after_booking_pricing_cost', [ $this, 'wcml_price_field_after_booking_pricing_cost' ], 10, 2 );
add_action( 'woocommerce_bookings_after_person_cost', [ $this, 'wcml_price_field_after_person_cost' ] );
add_action( 'woocommerce_bookings_after_person_block_cost', [ $this, 'wcml_price_field_after_person_block_cost' ] );
add_action( 'woocommerce_bookings_after_resource_cost', [ $this, 'wcml_price_field_after_resource_cost' ], 10, 2 );
add_action( 'woocommerce_bookings_after_resource_block_cost', [ $this, 'wcml_price_field_after_resource_block_cost' ], 10, 2 );
add_action( 'woocommerce_bookings_after_bookings_pricing', [ $this, 'after_bookings_pricing' ] );
add_action( 'save_post', [ $this, 'save_custom_costs' ], \WCML_Bookings::PRIORITY_SAVE_POST_ACTION - 1 );
add_filter( 'woocommerce_bookings_process_cost_rules_cost', [ $this, 'wc_bookings_process_cost_rules_cost' ], 10, 3 );
add_filter( 'woocommerce_bookings_process_cost_rules_base_cost', [ $this, 'wc_bookings_process_cost_rules_base_cost' ], 10, 3 );
add_filter( 'woocommerce_bookings_process_cost_rules_override_block', [ $this, 'wc_bookings_process_cost_rules_override_block_cost' ], 10, 3 );
add_action( 'woocommerce_bookings_after_create_booking_page', [ $this, 'booking_currency_dropdown' ] );
add_action( 'init', [ $this, 'set_booking_currency' ] );
add_action( 'wp_ajax_wcml_booking_set_currency', [ $this, 'set_booking_currency_ajax' ] );
add_action( 'woocommerce_bookings_create_booking_page_add_order_item', [ $this, 'set_order_currency_on_create_booking_page' ] );
add_filter( 'woocommerce_currency_symbol', [ $this, 'filter_booking_currency_symbol' ] );
add_filter( 'wcml_filter_currency_position', [ $this, 'create_booking_page_client_currency' ] );
add_filter( 'wcml_client_currency', [ $this, 'create_booking_page_client_currency' ] );
if ( ! is_admin() || isset( $_POST['action'] ) && 'wc_bookings_calculate_costs' === $_POST['action'] ) {
add_filter( 'get_post_metadata', [ $this, 'filter_wc_booking_cost' ], 10, 4 );
}
}
/**
* @param int $postId
*
* @return void
*/
public function wcml_price_field_after_booking_base_cost( $postId ) {
$this->echo_wcml_price_field( $postId, 'wcml_wc_booking_cost' );
}
/**
* @param int $postId
*
* @return void
*/
public function wcml_price_field_after_booking_block_cost( $postId ) {
if ( self::isWcBookingsBefore_1_10_9() ) {
$this->echo_wcml_price_field( $postId, 'wcml_wc_booking_base_cost' );
} else {
$this->echo_wcml_price_field( $postId, 'wcml_wc_booking_block_cost' );
}
}
/**
* @param int $postId
*
* @return void
*/
public function wcml_price_field_after_display_cost( $postId ) {
$this->echo_wcml_price_field( $postId, 'wcml_wc_display_cost' );
}
/**
* @param array $pricing
* @param int $postId
*
* @return void
*/
public function wcml_price_field_after_booking_pricing_base_cost( $pricing, $postId ) {
$this->echo_wcml_price_field( $postId, 'wcml_wc_booking_pricing_base_cost', $pricing );
}
/**
* @param array $pricing
* @param int $postId
*
* @return void
*/
public function wcml_price_field_after_booking_pricing_cost( $pricing, $postId ) {
$this->echo_wcml_price_field( $postId, 'wcml_wc_booking_pricing_cost', $pricing );
}
/**
* @param int $personTypeId
*
* @return void
*/
public function wcml_price_field_after_person_cost( $personTypeId ) {
$this->echo_wcml_price_field( $personTypeId, 'wcml_wc_booking_person_cost', false, false );
}
/**
* @param int $personTypeId
*
* @return void
*/
public function wcml_price_field_after_person_block_cost( $personTypeId ) {
$this->echo_wcml_price_field( $personTypeId, 'wcml_wc_booking_person_block_cost', false, false );
}
/**
* @param int $resourceId
* @param int $postId
*
* @return void
*/
public function wcml_price_field_after_resource_cost( $resourceId, $postId ) {
$this->echo_wcml_price_field( $postId, 'wcml_wc_booking_resource_cost', false, true, $resourceId );
}
/**
* @param int $resourceId
* @param int $postId
*
* @return void
*/
public function wcml_price_field_after_resource_block_cost( $resourceId, $postId ) {
$this->echo_wcml_price_field( $postId, 'wcml_wc_booking_resource_block_cost', false, true, $resourceId );
}
/**
* @param int $postId
* @param string $field
* @param array|false $pricing
* @param bool $check
* @param int|false $resourceId
*
* @return void
*/
public function echo_wcml_price_field( $postId, $field, $pricing = false, $check = true, $resourceId = false ) {
if ( ( ! $check || $this->woocommerce_wpml->products->is_original_product( $postId ) ) ) {
$currencies = $this->woocommerce_wpml->multi_currency->get_currencies();
$wc_currencies = get_woocommerce_currencies();
if ( ! function_exists( 'woocommerce_wp_text_input' ) ) {
include_once dirname( WC_PLUGIN_FILE ) . '/includes/admin/wc-meta-box-functions.php';
}
echo '
';
foreach ( $currencies as $currency_code => $currency ) {
switch ( $field ) {
case 'wcml_wc_booking_cost':
woocommerce_wp_text_input(
[
'id' => 'wcml_wc_booking_cost',
'class' => 'wcml_bookings_custom_price',
'name' => 'wcml_wc_booking_cost[' . $currency_code . ']',
'label' => get_woocommerce_currency_symbol( $currency_code ),
'description' => __( 'One-off cost for the booking as a whole.', 'woocommerce-bookings' ),
'value' => get_post_meta( $postId, '_wc_booking_cost_' . $currency_code, true ),
'type' => 'number',
'desc_tip' => true,
'custom_attributes' => [
'min' => '',
'step' => '0.01',
],
]
);
break;
case 'wcml_wc_booking_block_cost':
case 'wcml_wc_booking_base_cost':
$block_cost_key = '_wc_booking_base_cost_';
if ( $field === 'wcml_wc_booking_block_cost' ) {
$block_cost_key = '_wc_booking_block_cost_';
}
$block_cost_key .= $currency_code;
woocommerce_wp_text_input(
[
'id' => $field,
'class' => 'wcml_bookings_custom_price',
'name' => $field . '[' . $currency_code . ']',
'label' => get_woocommerce_currency_symbol( $currency_code ),
'description' => __( 'This is the cost per block booked. All other costs (for resources and persons) are added to this.', 'woocommerce-bookings' ),
'value' => get_post_meta( $postId, $block_cost_key, true ),
'type' => 'number',
'desc_tip' => true,
'custom_attributes' => [
'min' => '',
'step' => '0.01',
],
]
);
break;
case 'wcml_wc_display_cost':
woocommerce_wp_text_input(
[
'id' => 'wcml_wc_display_cost',
'class' => 'wcml_bookings_custom_price',
'name' => 'wcml_wc_display_cost[' . $currency_code . ']',
'label' => get_woocommerce_currency_symbol( $currency_code ),
'description' => __( 'The cost is displayed to the user on the frontend. Leave blank to have it calculated for you. If a booking has varying costs, this will be prefixed with the word "from:".', 'woocommerce-bookings' ),
'value' => get_post_meta( $postId, '_wc_display_cost_' . $currency_code, true ),
'type' => 'number',
'desc_tip' => true,
'custom_attributes' => [
'min' => '',
'step' => '0.01',
],
]
);
break;
case 'wcml_wc_booking_pricing_base_cost':
if ( isset( $pricing[ 'base_cost_' . $currency_code ] ) ) {
$value = $pricing[ 'base_cost_' . $currency_code ];
} else {
$value = '';
}
echo '
';
echo '';
echo '';
echo '
';
break;
case 'wcml_wc_booking_pricing_cost':
if ( isset( $pricing[ 'cost_' . $currency_code ] ) ) {
$value = $pricing[ 'cost_' . $currency_code ];
} else {
$value = '';
}
echo '
';
echo '';
echo '';
echo '
';
break;
case 'wcml_wc_booking_person_cost':
$value = get_post_meta( $postId, 'cost_' . $currency_code, true );
echo '
';
echo '';
echo '';
echo '
';
break;
case 'wcml_wc_booking_person_block_cost':
$value = get_post_meta( $postId, 'block_cost_' . $currency_code, true );
echo '
';
echo '';
echo '';
echo '
';
break;
case 'wcml_wc_booking_resource_cost':
$resource_base_costs = maybe_unserialize( get_post_meta( $postId, '_resource_base_costs', true ) );
if ( isset( $resource_base_costs['custom_costs'][ $currency_code ][ $resourceId ] ) ) {
$value = $resource_base_costs['custom_costs'][ $currency_code ][ $resourceId ];
} else {
$value = '';
}
echo '
';
echo '';
echo '';
echo '
';
break;
case 'wcml_wc_booking_resource_block_cost':
$resource_block_costs = maybe_unserialize( get_post_meta( $postId, '_resource_block_costs', true ) );
if ( isset( $resource_block_costs['custom_costs'][ $currency_code ][ $resourceId ] ) ) {
$value = $resource_block_costs['custom_costs'][ $currency_code ][ $resourceId ];
} else {
$value = '';
}
echo '
';
echo '';
echo '';
echo '
';
break;
default:
break;
}
}
echo '
';
}
}
/**
* @param int $postId
*
* @return void
*/
public function after_bookings_pricing( $postId ) {
if ( in_array( 'booking', wp_get_post_terms( $postId, 'product_type', [ 'fields' => 'names' ] ) ) && $this->woocommerce_wpml->products->is_original_product( $postId ) ) {
$customCostsStatus = get_post_meta( $postId, Prices::CUSTOM_COSTS_STATUS_KEY, true );
$checked = ! $customCostsStatus ? 'checked="checked"' : ' ';
echo '';
echo '';
echo '';
$checked = 1 === (int) $customCostsStatus ? 'checked="checked"' : ' ';
echo '';
echo '';
wp_nonce_field( 'wcml_save_custom_costs', '_wcml_custom_costs_nonce' );
echo '
';
}
}
/**
* @param int $postId
*
* @return false|void
*/
public function save_custom_costs( $postId ) {
$nonce = filter_var( isset( $_POST['_wcml_custom_costs_nonce'] ) ? $_POST['_wcml_custom_costs_nonce'] : '', FILTER_SANITIZE_FULL_SPECIAL_CHARS );
if ( isset( $_POST['_wcml_custom_costs'] ) && isset( $nonce ) && wp_verify_nonce( $nonce, 'wcml_save_custom_costs' ) ) {
update_post_meta( $postId, Prices::CUSTOM_COSTS_STATUS_KEY, $_POST['_wcml_custom_costs'] );
if ( 1 === (int) $_POST['_wcml_custom_costs'] ) {
$currencies = $this->woocommerce_wpml->multi_currency->get_currencies();
if ( empty( $currencies ) || 0 === $postId ) {
return false;
}
$this->update_booking_costs( $currencies, $postId );
$this->update_booking_pricing( $currencies, $postId );
if ( isset( $_POST['wcml_wc_booking_person_cost'] ) && is_array( $_POST['wcml_wc_booking_person_cost'] ) ) {
$this->update_booking_person_cost( $currencies, $_POST['wcml_wc_booking_person_cost'] );
}
if ( isset( $_POST['wcml_wc_booking_person_block_cost'] ) && is_array( $_POST['wcml_wc_booking_person_block_cost'] ) ) {
$this->update_booking_person_block_cost( $currencies, $_POST['wcml_wc_booking_person_block_cost'] );
}
if ( isset( $_POST['wcml_wc_booking_resource_cost'] ) && is_array( $_POST['wcml_wc_booking_resource_cost'] ) ) {
$this->update_booking_resource_cost( $currencies, $postId, $_POST['wcml_wc_booking_resource_cost'] );
}
if ( isset( $_POST['wcml_wc_booking_resource_block_cost'] ) && is_array( $_POST['wcml_wc_booking_resource_block_cost'] ) ) {
$this->update_booking_resource_block_cost( $currencies, $postId, $_POST['wcml_wc_booking_resource_block_cost'] );
}
update_post_meta( $postId, '_price', '' );
} else {
return false;
}
}
}
/**
* @param array $currencies
* @param int $postId
*
* @return bool
*/
private function update_booking_costs( $currencies = [], $postId = 0 ) {
$bookingOptions = [
'wcml_wc_booking_cost' => '_wc_booking_cost_',
'wcml_wc_booking_block_cost' => '_wc_booking_block_cost_',
'wcml_wc_display_cost' => '_wc_display_cost_',
];
if ( self::isWcBookingsBefore_1_10_9() ) {
unset( $bookingOptions['wcml_wc_booking_block_cost'] );
$bookingOptions['wcml_wc_booking_base_cost'] = '_wc_booking_base_cost_';
}
foreach ( $currencies as $code => $currency ) {
foreach ( $bookingOptions as $bookingOptionsPostKey => $bookingOptionsMetaKeyPrefix ) {
if ( isset( $_POST[ $bookingOptionsPostKey ][ $code ] ) ) {
update_post_meta( $postId, $bookingOptionsMetaKeyPrefix . $code, sanitize_text_field( $_POST[ $bookingOptionsPostKey ][ $code ] ) );
}
}
}
return true;
}
/**
* @param array $currencies
* @param int $postId
*
* @return bool
*/
private function update_booking_pricing( $currencies = [], $postId = 0 ) {
$updatedMeta = [];
$bookingPricing = get_post_meta( $postId, '_wc_booking_pricing', true );
if ( empty( $bookingPricing ) ) {
return false;
}
foreach ( $bookingPricing as $key => $prices ) {
$updatedMeta[ $key ] = $prices;
foreach ( $currencies as $code => $currency ) {
if ( isset( $_POST['wcml_wc_booking_pricing_base_cost'][ $code ][ $key ] ) ) {
$updatedMeta[ $key ][ 'base_cost_' . $code ] = sanitize_text_field( $_POST['wcml_wc_booking_pricing_base_cost'][ $code ][ $key ] );
}
if ( isset( $_POST['wcml_wc_booking_pricing_cost'][ $code ][ $key ] ) ) {
$updatedMeta[ $key ][ 'cost_' . $code ] = sanitize_text_field( $_POST['wcml_wc_booking_pricing_cost'][ $code ][ $key ] );
}
}
}
update_post_meta( $postId, '_wc_booking_pricing', $updatedMeta );
return true;
}
/**
* @param array $currencies
* @param array $personCosts
*
* @return bool
*/
private function update_booking_person_cost( $currencies = [], $personCosts = [] ) {
if ( empty( $personCosts ) ) {
return false;
}
foreach ( $personCosts as $personId => $costs ) {
foreach ( $currencies as $code => $currency ) {
if ( isset( $costs[ $code ] ) ) {
update_post_meta( $personId, 'cost_' . $code, sanitize_text_field( $costs[ $code ] ) );
}
}
}
return true;
}
/**
* @param array $currencies
* @param array $blockCosts
*
* @return bool
*/
private function update_booking_person_block_cost( $currencies = [], $blockCosts = [] ) {
if ( empty( $blockCosts ) ) {
return false;
}
foreach ( $blockCosts as $personId => $costs ) {
foreach ( $currencies as $code => $currency ) {
if ( isset( $costs[ $code ] ) ) {
update_post_meta( $personId, 'block_cost_' . $code, sanitize_text_field( $costs[ $code ] ) );
}
}
}
return true;
}
/**
* @param array $currencies
* @param int $postId
* @param array $resourceCost
*
* @return bool
*/
private function update_booking_resource_cost( $currencies = [], $postId = 0, $resourceCost = [] ) {
if ( empty( $resourceCost ) ) {
return false;
}
$updatedMeta = get_post_meta( $postId, '_resource_base_costs', true );
if ( ! is_array( $updatedMeta ) ) {
$updatedMeta = [];
}
$wcBookingResourceCosts = [];
foreach ( $resourceCost as $resourceId => $costs ) {
foreach ( $currencies as $code => $currency ) {
if ( isset( $costs[ $code ] ) ) {
$wcBookingResourceCosts[ $code ][ $resourceId ] = sanitize_text_field( $costs[ $code ] );
}
}
}
$updatedMeta['custom_costs'] = $wcBookingResourceCosts;
update_post_meta( $postId, '_resource_base_costs', $updatedMeta );
self::triggerActionResourceCostsUpdated( $postId, '_resource_base_costs' );
return true;
}
/**
* @param array $currencies
* @param int $postId
* @param array $resourceBlockCost
*
* @return bool
*/
private function update_booking_resource_block_cost( $currencies = [], $postId = 0, $resourceBlockCost = [] ) {
if ( empty( $resourceBlockCost ) ) {
return false;
}
$updatedMeta = get_post_meta( $postId, '_resource_block_costs', true );
if ( ! is_array( $updatedMeta ) ) {
$updatedMeta = [];
}
$wc_booking_resource_block_costs = [];
foreach ( $resourceBlockCost as $resource_id => $costs ) {
foreach ( $currencies as $code => $currency ) {
if ( isset( $costs[ $code ] ) ) {
$wc_booking_resource_block_costs[ $code ][ $resource_id ] = sanitize_text_field( $costs[ $code ] );
}
}
}
$updatedMeta['custom_costs'] = $wc_booking_resource_block_costs;
update_post_meta( $postId, '_resource_block_costs', $updatedMeta );
self::triggerActionResourceCostsUpdated( $postId, '_resource_block_costs' );
return true;
}
/**
* This is an internal action hook required after splitting
* the original WC Bookings compatibility code.
*
* @see \WCML_Bookings::sync_resource_costs_with_translations
*
* @param int|string $postId
* @param string $key
*
* @return void
*/
private static function triggerActionResourceCostsUpdated( $postId, $key ) {
do_action( 'wcml_bookings_resource_costs_updated', $postId, $key );
}
/**
* @param float|int $cost
* @param array $fields
* @param string $key
*
* @return float|int
*/
public function wc_bookings_process_cost_rules_cost( $cost, $fields, $key ) {
return $this->filter_pricing_cost( $cost, $fields, 'cost_', $key );
}
/**
* @param float|int $base_cost
* @param array $fields
* @param string $key
*
* @return float|int
*/
public function wc_bookings_process_cost_rules_base_cost( $base_cost, $fields, $key ) {
return $this->filter_pricing_cost( $base_cost, $fields, 'base_cost_', $key );
}
/**
* @param float|int $override_cost
* @param array $fields
* @param string $key
*
* @return float|int
*/
public function wc_bookings_process_cost_rules_override_block_cost( $override_cost, $fields, $key ) {
return $this->filter_pricing_cost( $override_cost, $fields, 'override_block_', $key );
}
/**
* @param float|int $cost
* @param array $fields
* @param string $name
* @param string $key
*
* @return float|int|mixed|string
*/
public function filter_pricing_cost( $cost, $fields, $name, $key ) {
$currency = $this->woocommerce_wpml->multi_currency->get_client_currency();
if ( $currency === wcml_get_woocommerce_currency_option() ) {
return $cost;
}
if ( isset( $_POST['form'] ) ) {
parse_str( $_POST['form'], $posted );
$booking_id = $posted['add-to-cart'];
} elseif ( isset( $_POST['add-to-cart'] ) ) {
$booking_id = $_POST['add-to-cart'];
}
if ( isset( $booking_id ) ) {
$original_id = $this->woocommerce_wpml->products->get_original_product_id( $booking_id );
if ( $booking_id != $original_id ) {
$fields = maybe_unserialize( get_post_meta( $original_id, '_wc_booking_pricing', true ) );
$fields = $fields[ $key ];
}
}
$needs_filter_pricing_cost = $this->needs_filter_pricing_cost( $name, $fields );
if ( $needs_filter_pricing_cost ) {
if ( isset( $fields[ $name . $currency ] ) ) {
return $fields[ $name . $currency ];
} else {
return $this->woocommerce_wpml->multi_currency->prices->convert_price_amount( $cost, $currency );
}
}
return $cost;
}
/**
* @param string $name
* @param array $fields
*
* @return bool
*/
public function needs_filter_pricing_cost( $name, $fields ) {
$modifier_skip_values = [ 'divide', 'times' ];
if (
'override_block_' === $name ||
( 'cost_' === $name && ! in_array( $fields['modifier'], $modifier_skip_values ) ) ||
( 'base_cost_' === $name && ! in_array( $fields['base_modifier'], $modifier_skip_values ) )
) {
return true;
} else {
return false;
}
}
public function booking_currency_dropdown() {
$current_booking_currency = $this->get_cookie_booking_currency();
$wc_currencies = get_woocommerce_currencies();
$currencies = $this->woocommerce_wpml->multi_currency->get_currencies( true );
?>
|
|
__( 'Invalid nonce', 'woocommerce-multilingual' ) ] );
die();
}
$this->set_booking_currency( filter_input( INPUT_POST, 'currency', FILTER_SANITIZE_FULL_SPECIAL_CHARS ) );
die();
}
public function set_booking_currency( $currency_code = false ) {
$cookie_name = '_wcml_booking_currency';
if ( ! isset( $_COOKIE[ $cookie_name ] ) && ! headers_sent() ) {
$currency_code = $this->woocommerce_wpml->multi_currency->get_currency_code();
}
if ( $currency_code ) {
// @todo uncomment or delete when #wpmlcore-5796 is resolved
// do_action( 'wpsc_add_cookie', $cookie_name );
setcookie( $cookie_name, $currency_code, time() + 86400, COOKIEPATH, COOKIE_DOMAIN );
}
}
public function get_cookie_booking_currency() {
if ( isset( $_COOKIE ['_wcml_booking_currency'] ) ) {
$currency = $_COOKIE['_wcml_booking_currency'];
} else {
$currency = wcml_get_woocommerce_currency_option();
}
return $currency;
}
public function set_order_currency_on_create_booking_page( $order_id ) {
OrdersHelper::setCurrency( $order_id, $this->get_cookie_booking_currency() );
}
public function filter_booking_currency_symbol( $currency ) {
global $pagenow;
remove_filter( 'woocommerce_currency_symbol', [ $this, 'filter_booking_currency_symbol' ] );
if ( isset( $_COOKIE ['_wcml_booking_currency'] ) && $pagenow == 'edit.php' && isset( $_GET['page'] ) && $_GET['page'] == 'create_booking' ) {
$currency = get_woocommerce_currency_symbol( $_COOKIE ['_wcml_booking_currency'] );
}
add_filter( 'woocommerce_currency_symbol', [ $this, 'filter_booking_currency_symbol' ] );
return $currency;
}
public function create_booking_page_client_currency( $currency ) {
global $pagenow;
if ( wpml_is_ajax() && isset( $_POST['form'] ) ) {
parse_str( $_POST['form'], $posted );
}
if ( ( $pagenow == 'edit.php' && isset( $_GET['page'] ) && $_GET['page'] == 'create_booking' ) || ( isset( $posted['_wp_http_referer'] ) && strpos( $posted['_wp_http_referer'], 'page=create_booking' ) !== false ) ) {
$currency = $this->get_cookie_booking_currency();
}
return $currency;
}
public function filter_wc_booking_cost( $check, $object_id, $meta_key, $single ) {
if ( in_array(
$meta_key,
[
'_wc_booking_cost',
'_wc_booking_base_cost',
'_wc_display_cost',
'_wc_booking_pricing',
'cost',
'_wc_booking_block_cost',
'block_cost',
'_resource_base_costs',
'_resource_block_costs',
]
) ) {
$original_id = $this->woocommerce_wpml->products->get_original_product_id( $object_id );
$cost_status = get_post_meta( $original_id, Prices::CUSTOM_COSTS_STATUS_KEY, true );
$currency = $this->woocommerce_wpml->multi_currency->get_client_currency();
if ( $currency === wcml_get_woocommerce_currency_option() ) {
return $check;
}
if ( in_array( $meta_key, [ 'cost', 'block_cost' ] ) ) {
if ( get_post_type( $object_id ) == 'bookable_person' ) {
$original_id = apply_filters( 'translate_object_id', wp_get_post_parent_id( $object_id ), 'product', true, $this->woocommerce_wpml->products->get_original_product_language( wp_get_post_parent_id( $object_id ) ) );
$cost_status = get_post_meta( $original_id, Prices::CUSTOM_COSTS_STATUS_KEY, true );
$value = get_post_meta( $object_id, $meta_key . '_' . $currency, true );
if ( $cost_status && $value ) {
return $value;
} else {
remove_filter( 'get_post_metadata', [ $this, 'filter_wc_booking_cost' ], 10 );
$cost = get_post_meta( $object_id, $meta_key, true );
add_filter( 'get_post_metadata', [ $this, 'filter_wc_booking_cost' ], 10, 4 );
return $this->woocommerce_wpml->multi_currency->prices->convert_price_amount( $cost, $currency );
}
} else {
return $check;
}
}
if ( in_array(
$meta_key,
[
'_wc_booking_pricing',
'_resource_base_costs',
'_resource_block_costs',
]
) ) {
remove_filter( 'get_post_metadata', [ $this, 'filter_wc_booking_cost' ], 10 );
if ( $meta_key == '_wc_booking_pricing' ) {
if ( $original_id != $object_id ) {
$value = get_post_meta( $original_id, $meta_key );
} else {
$value = $check;
}
} else {
$costs = maybe_unserialize( get_post_meta( $object_id, $meta_key, true ) );
if ( ! $costs ) {
$value = $check;
} elseif ( $cost_status && isset( $costs['custom_costs'][ $currency ] ) ) {
$res_costs = [];
foreach ( $costs['custom_costs'][ $currency ] as $resource_id => $cost ) {
$trns_resource_id = apply_filters( 'translate_object_id', $resource_id, 'bookable_resource', true );
$res_costs[ $trns_resource_id ] = $cost;
}
$value = [ 0 => $res_costs ];
} elseif ( $cost_status && isset( $costs[0]['custom_costs'][ $currency ] ) ) {
$value = [ 0 => $costs[0]['custom_costs'][ $currency ] ];
} else {
$converted_values = [];
foreach ( $costs as $resource_id => $cost ) {
$converted_values[0][ $resource_id ] = $this->woocommerce_wpml->multi_currency->prices->convert_price_amount( $cost, $currency );
}
$value = $converted_values;
}
}
add_filter( 'get_post_metadata', [ $this, 'filter_wc_booking_cost' ], 10, 4 );
return $value;
}
$value = get_post_meta( $original_id, $meta_key . '_' . $currency, true );
if ( $cost_status && ( ! empty( $value ) || ( empty( $value ) && $meta_key == '_wc_display_cost' ) ) ) {
return $value;
} else {
remove_filter( 'get_post_metadata', [ $this, 'filter_wc_booking_cost' ], 10 );
$value = get_post_meta( $original_id, $meta_key, true );
$value = $this->woocommerce_wpml->multi_currency->prices->convert_price_amount( $value, $currency );
add_filter( 'get_post_metadata', [ $this, 'filter_wc_booking_cost' ], 10, 4 );
return $value;
}
}
return $check;
}
/**
* @return bool
*/
public static function isWcBookingsBefore_1_10_9() {
return version_compare( WC_BOOKINGS_VERSION, '1.10.9', '<' );
}
}