Woocommerce 订阅取消按钮

dan*_*ues 1 wordpress woocommerce

我正在编写一个函数,将“取消”按钮添加到我的 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>';
    }
}
Run Code Online (Sandbox Code Playgroud)

我也尝试过另一种方法,但是当下一个帐单日期有日期时它不起作用。区别仅在于“回声”内部。

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

我找不到调用此按钮的正确方法,因此我尝试创建自己的方法。

我仍在学习编码,因此可能还有很多改进的空间。“onclick”警报也不起作用。

非常感谢任何帮助!

dan*_*ues 5

我终于找到了解决方案。

看起来我在使用“wp_nonce_url”时缺少一些参数,woocommerce 订阅需要操作中订阅的 ID 和当前状态来验证请求,然后再处理请求。

通过浏览 Woocommerce Subscriptions 的核心并查看他们如何创建链接以及如何处理链接,我成功地理解了这一逻辑。我还没有找到任何有关它的文档。

wp_nonce_url( $url, $subscription_id . $current_status );
Run Code Online (Sandbox Code Playgroud)

所以我的代码现在看起来像这样......

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>';
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望这也对其他人有帮助!