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

如何在MemberPress注册时捕获URL参数并保存到用户元数据?

解决MemberPress注册时无法获取URL中source参数并保存到用户元数据的问题

问题核心在于:MemberPress的注册流程通常包含页面跳转(比如表单提交后到处理页面),当mepr-event-member-signup-completed钩子触发时,原始请求的$_GET['source']参数已经丢失,无法直接获取。

解决方案思路

先将source参数临时存储到PHP会话中,待注册完成钩子触发时,再从会话中取出参数并保存到用户元数据,最后清理会话中的临时数据。

完整代码实现

  1. 初始化会话并临时存储source参数
// 初始化PHP会话
add_action('init', 'init_signup_referral_session');
function init_signup_referral_session() {
    if (!session_id()) {
        session_start();
    }
}

// 在注册页面加载时,将source参数存入会话
add_action('template_redirect', 'store_signup_source_to_session');
function store_signup_source_to_session() {
    // 替换为你的MemberPress注册页面的slug或ID
    $signup_page_slug = 'register';
    if (is_page($signup_page_slug) && isset($_GET['source']) && !empty($_GET['source'])) {
        $_SESSION['temp_signup_source'] = sanitize_text_field($_GET['source']);
    }
}
  1. 修改原钩子函数,从会话中获取参数并保存
add_action('mepr-event-member-signup-completed', 'save_signup_source_to_usermeta', 10, 1);
function save_signup_source_to_usermeta($membership_id){
    $current_user = wp_get_current_user();
    
    // 检查会话中是否存在临时存储的source参数
    if (!isset($_SESSION['temp_signup_source']) || empty($_SESSION['temp_signup_source'])) {
        return;
    }
    
    $source = sanitize_text_field($_SESSION['temp_signup_source']);
    update_user_meta($current_user->ID, 'source', $source);
    
    // 清理会话中的临时数据,避免后续请求复用
    unset($_SESSION['temp_signup_source']);
}

注意事项

  • 请确保$signup_page_slug变量的值与你的MemberPress注册页面的slug一致,如果使用页面ID,可将is_page($signup_page_slug)改为is_page(123)(123为页面ID)。
  • 若你的主机禁用了PHP会话,可改用WordPress的transient临时存储,结合用户的浏览器cookie标识来关联数据(比如生成一个临时cookie,将source值存入transient并以cookie值为键)。
  • 测试时需确保注册流程中没有清除会话的操作,部分缓存插件可能会影响会话,若遇到问题可临时禁用缓存插件排查。

内容的提问来源于stack exchange,提问作者Majid Ali shah

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 18:42:10