wordpress Woocommerce订阅取消按钮

iswrvxsc  于 2022-11-02  发布在  WordPress
关注(0)|答案(1)|浏览(222)

我正在写一个函数,添加一个“取消”按钮到我的订阅列表与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”警报也不起作用。
任何帮助都是非常感谢的!

zdwk9cvp

zdwk9cvp1#

我终于想出了一个解决办法。
看起来我在使用“wp_nonce_url”时缺少了一些参数,woocommerce订阅需要在处理请求之前在操作中验证订阅的ID和当前状态。
我设法理解了这个逻辑,通过去通过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>';
    }
}

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

相关问题