我的商店目前有个大问题。几天前,我改用PayPal PLUS来为我的客户提供信用卡付款以及所有这些东西。
这是插件:https://de.wordpress.org/plugins/woo-paypalplus/
现在我下订单但取消付款时,PayPal会重定向回商店。在商店(WooCommerce),我无法通过挂钩定义取消订单的网址:
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;
}
此过滤器允许我为每个订单设置动态网址。在测试了新的支付网关之后,我感到困惑,因为我回到了在钩子上设置的错误取消页面。
因此,我检查了PayPal PLUS插件设置,发现其中存在一个下拉列表,可以在其中选择一些URL或输入静态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
的一部分。因此,我的问题是,现在是否有人对这个插件有一定的经验,并且知道我是否可以以某种方式重新编写其功能,以使我的代码再次正常工作?