Как изменить URL отмены заказа плагина WooCommerce PayPal PLUS? - PullRequest
0 голосов
/ 29 июня 2019

У меня сейчас огромная проблема с моим магазином.Несколько дней назад я перешел на 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-адреса или ввести статический:

enter image description here

После проверки кода плагина 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 в плагине.Итак, мой вопрос сейчас, если у кого-то есть небольшой опыт работы с этим плагином и он знает, могу ли я как-то переписать их функцию, чтобы мой код снова заработал?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...