У меня сейчас огромная проблема с моим магазином.Несколько дней назад я перешел на PayPal PLUS для оплаты кредитной картой и всем этим для моих клиентов.
Это плагин: https://de.wordpress.org/plugins/woo-paypalplus/
Когда я сейчас размещаю заказ, но отменяю платеж, PayPal перенаправляет обратно в магазин.В магазине (WooCommerce) я могу определить не отмененный заказ URL с помощью хука:
add_filter( 'woocommerce_get_cancel_order_url', 'cancel_order_url', PHP_INT_MAX, 1 );
add_filter( 'woocommerce_get_cancel_order_url_raw', 'cancel_order_url', PHP_INT_MAX, 1 );
function cancel_order_url( $url ) {
// Default to home url
$return = get_permalink( wc_get_page_id( 'shop' ) );
// Extract order id and use order success page as return url
$search = preg_match( '/order_id=(\d+)/', $url, $matches );
if ( $search && isset( $matches[1] ) ) {
$order_id = absint( $matches[1] );
$order = wc_get_order( $order_id );
$return = apply_filters( 'woocommerce_attempt_order_cancellation_url', add_query_arg( array( 'retry' => true ), $order->get_checkout_order_received_url(), $order ) );
}
return $return;
}
Этот фильтр позволяет мне устанавливать динамический URL для каждого заказа.После тестирования нового платежного шлюза я запутался, потому что вернулся на неверную страницу отмены, которую я настроил в хуке.
Итак, я проверил настройки плагина PayPal PLUS и обнаружил, что есть выпадающий список, где я могу выбрать некоторые URL-адреса или ввести статический:
После проверки кода плагина PayPal PLUS я могу сказать, что они не используют этот хук.Вместо этого они используют такую функцию:
/**
* @inheritdoc
*/
const OPTION_CANCEL_URL_NAME = 'cancel_url';
public function cancelUrl()
{
$option = $this->get_option(Storable::OPTION_CANCEL_URL_NAME, '');
switch ($option) {
case 'cart':
$url = wc_get_cart_url();
break;
case 'checkout':
$url = wc_get_checkout_url();
break;
case 'account':
$url = wc_get_account_endpoint_url('dashboard');
break;
case 'custom':
$url = esc_url($this->cancelCustomUrl());
break;
case 'shop':
default:
$url = get_permalink(wc_get_page_id('shop'));
break;
}
return $url;
}
Это часть интерфейса Storable
в плагине.Итак, мой вопрос сейчас, если у кого-то есть небольшой опыт работы с этим плагином и он знает, могу ли я как-то переписать их функцию, чтобы мой код снова заработал?