You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

需求:在WooCommerce的my-account>membership添加会员暂停/激活切换按钮

实现WooCommerce会员页面添加暂停/激活切换按钮

步骤1:在会员账户页面插入切换按钮

通过woocommerce_my_account_membership_actions钩子,在会员操作区域添加状态切换按钮,按钮文本会根据当前会员状态自动切换:

add_action( 'woocommerce_my_account_membership_actions', 'add_membership_pause_toggle_button', 10, 2 );
function add_membership_pause_toggle_button( $actions, $membership ) {
    // 仅允许在active/paused状态之间切换
    if ( ! in_array( $membership->get_status(), array( 'active', 'paused' ) ) ) {
        return $actions;
    }

    $target_status = $membership->get_status() === 'active' ? 'paused' : 'active';
    $button_text = $membership->get_status() === 'active' ? '暂停会员' : '激活会员';

    $actions['toggle_pause'] = array(
        'url'    => '#',
        'name'   => $button_text,
        'class'  => 'toggle-membership-status button',
        'data'   => array(
            'membership-id' => $membership->get_id(),
            'target-status' => $target_status,
        ),
    );

    return $actions;
}

步骤2:注册AJAX接口处理状态更新

添加AJAX动作,处理前端状态切换请求,同时验证用户权限和操作合法性:

// 登录用户AJAX处理
add_action( 'wp_ajax_toggle_membership_status', 'toggle_membership_status_handler' );
function toggle_membership_status_handler() {
    // 验证参数完整性
    if ( ! isset( $_POST['membership_id'] ) || ! isset( $_POST['target_status'] ) ) {
        wp_send_json_error( array( 'message' => '参数缺失' ) );
    }

    $membership_id = intval( $_POST['membership_id'] );
    $target_status = sanitize_text_field( $_POST['target_status'] );
    $membership = wc_memberships_get_user_membership( $membership_id );

    // 验证会员归属、状态合法性
    if ( ! $membership || $membership->get_user_id() != get_current_user_id() || ! in_array( $target_status, array( 'active', 'paused' ) ) ) {
        wp_send_json_error( array( 'message' => '操作无效' ) );
    }

    // 更新会员状态
    $updated = $membership->update_status( $target_status );

    if ( $updated ) {
        $new_text = $target_status === 'active' ? '暂停会员' : '激活会员';
        wp_send_json_success( array( 'message' => '状态更新成功', 'new_text' => $new_text, 'new_status' => $target_status ) );
    } else {
        wp_send_json_error( array( 'message' => '状态更新失败' ) );
    }
}

步骤3:添加前端交互脚本

通过wp_enqueue_scripts钩子加载JS,处理按钮点击事件,发送AJAX请求并更新页面元素:

add_action( 'wp_enqueue_scripts', 'enqueue_membership_toggle_script' );
function enqueue_membership_toggle_script() {
    // 仅在会员账户页面加载脚本
    if ( is_account_page() && isset( $_GET['page'] ) && $_GET['page'] === 'my-memberships' ) {
        wp_add_inline_script( 'jquery', '
            jQuery(document).ready(function($) {
                $(document).on("click", ".toggle-membership-status", function(e) {
                    e.preventDefault();
                    var $button = $(this);
                    var membershipId = $button.data("membership-id");
                    var targetStatus = $button.data("target-status");
                    var originalText = $button.text();

                    $button.prop("disabled", true).text("处理中...");

                    $.ajax({
                        url: "' . admin_url( 'admin-ajax.php' ) . '",
                        type: "POST",
                        data: {
                            action: "toggle_membership_status",
                            membership_id: membershipId,
                            target_status: targetStatus
                        },
                        dataType: "json",
                        success: function(response) {
                            if (response.success) {
                                $button.text(response.data.new_text);
                                $button.data("target-status", response.data.new_status === "active" ? "paused" : "active");
                                alert(response.data.message);
                            } else {
                                alert(response.data.message);
                                $button.prop("disabled", false).text(originalText);
                            }
                        },
                        error: function() {
                            alert("请求失败,请重试");
                            $button.prop("disabled", false).text(originalText);
                        }
                    });
                });
            });
        ' );
    }
}

注意事项

  • 确保WooCommerce Memberships插件已激活并正常运行
  • 代码需添加到主题的functions.php文件或自定义插件中
  • 状态切换仅限制在active和paused之间,避免触发不可逆的会员取消操作

内容的提问来源于stack exchange,提问作者Bruno Bros

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 00:25:17