Кнопка отмены подписки Woocommerce - PullRequest
0 голосов
/ 06 июля 2018

Я пишу функцию, которая добавляет кнопку «Отмена» в мои списки подписок с подписками woocommerce.

Проблема в том, что при нажатии я получаю сообщение об ошибке:

Ошибка безопасности. Пожалуйста, свяжитесь с нами, если вам нужна помощь.

Мой текущий код:

add_action('woocommerce_my_subscriptions_actions', 'cancelButton', 15);
function cancelButton( $subscription ) {
    $status = $subscription->get_status();
    $sub_id = $subscription->get_order_number();
    $cancel_url = wp_nonce_url( '?subscription_id=' . $sub_id . '&change_subscription_to=cancelled' );
    if ( $status == 'active' || $status == 'on-hold' || $status == 'pending' ) {
        echo '<a href="' . $cancel_url . '" class="button view" onclick="alert("Tem certeza que deseja cancelar sua assinatura?")">' .  __( 'Cancelar', 'starling' ) . '</a>';
    }
}

Я также попробовал другой метод, но он не работает, когда есть дата в следующем счете. Разница только внутри "эха".

echo '<a href="' . $subscription->get_cancel_order_url() . '" class="button view" onclick="alert("Tem certeza que deseja cancelar sua assinatura?")">' .  __( 'Cancelar', 'starling' ) . '</a>';

Я не смог найти правильный метод для вызова этой кнопки, поэтому я попытался создать свой собственный.

Я все еще учусь кодировать, так что может быть много улучшений. Предупреждение "onclick" также не работает.

Любая помощь высоко ценится!

1 Ответ

0 голосов
/ 06 июля 2018

Я наконец-то поработал над решением.

Похоже, мне не хватало нескольких аргументов при использовании "wp_nonce_url", для подписки woocommerce требуется идентификатор и текущий статус подписки внутри действия для проверки запроса перед его обработкой.

Мне удалось понять эту логику, пройдя ядро ​​подписок Woocommerce и посмотрев, как они создавали свои ссылки и как они их обрабатывали. Я не нашел никаких документов об этом.

wp_nonce_url( $url, $subscription_id . $current_status );

Так что мой код теперь выглядит так ...

add_action('woocommerce_my_subscriptions_actions', 'cancelButton', 15);
function cancelButton( $subscription ) {
    $current_status = $subscription->get_status();
    $subscription_id = $subscription->get_order_number();
    $subscription_url = $subscription->get_view_order_url();
    $cancel_url = $subscription_url . '?subscription_id=' . $subscription_id . '&change_subscription_to=cancelled';
    $cancel_subscription_url = wp_nonce_url( $cancel_url, $subscription_id . $current_status );

    if ( $current_status == 'active' || $current_status == 'on-hold' || $current_status == 'pending' ) {
        echo '<a href="' . $cancel_subscription_url . '" class="button view" onclick="alert("Tem certeza que deseja cancelar sua assinatura?")">' .  __( 'Cancelar', 'starling' ) . '</a>';
    }
}

Надеюсь, это поможет кому-то еще!

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