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

WordPress自定义PHP页面如何调用WP函数获取usermeta

WordPress自定义回调页无法调用WP函数问题解决

场景说明

基于PHP+Javascript开发第三方手机短信年龄认证功能,通过WordPress短代码add_shortcode实现认证发起入口,认证完成后第三方服务会回调自定义的success.php文件返回认证结果,需要在回调逻辑中判断用户登录状态、将认证结果写入用户元数据(usermeta)。

认证发起短代码实现

if (! function_exists ( 'register_mycustom_agecert_page' ) ) {
  function register_mycustom_agecert_page () {
    $mid ='**********';                                 // 服务商提供的商户ID
    $apiKey ='********************************';   // 对应商户ID的API密钥
    $mTxId ='***********';   
    $reqSvcCd ='01';

    // 生成商户身份校验哈希
    $plainText1 = hash("sha256",(string)$mid.(string)$mTxId.(string)$apiKey);
    $authHash = $plainText1;

    $userName = 'Anonymous';
    $userPhone = '01011112222';
    $userBirth ='19830000';

    $flgFixedUser = 'N'; // 固定用户传参时设为Y

    if($flgFixedUser=="Y") {
        $plainText2 = hash("sha256",(string)$userName.(string)$mid.(string)$userPhone.(string)$mTxId.(string)$userBirth.(string)$reqSvcCd);
        $userHash = $plainText2;
    }

    $output = '';
    $output .= '<div align="center" class="age-gate-wrapper">';
    $output .= '<form name="saForm">';
    $output .= '<input type="hidden" name="mid" value="' . $mid . '">';
    $output .= '<input type="hidden" name="reqSvcCd" value="' . $reqSvcCd . '">';
    $output .= '<input type="hidden" name="mTxId" value="' . $mTxId . '">';
    $output .= '<input type="hidden" name="authHash" value="' . $authHash .'">';
    $output .= '<input type="hidden" name="flgFixedUser" value="' . $flgFixedUser . '">';
    $output .= '<input type="hidden" id="userName" name="userName">';
    $output .= '<input type="hidden" id="userPhone" name="userPhone">';
    $output .= '<input type="hidden" id="userBirth" name="userBirth">';
    $output .= '<input type="hidden" name="userHash" value="' . $userHash . '">';
    $output .= '<input type="hidden" name="directAgency" value="">';
    $output .= '<input type="hidden" name="successUrl" value="' . esc_url( get_stylesheet_directory_uri() . '/kg/success.php' ) . '">';
    $output .= '<input type="hidden" name="failUrl" value="'. esc_url( get_stylesheet_directory_uri() . '/kg/success.php' ) . '">';
    $output .= '</form>';
    $output .= '<button onclick="callSa()">Proceed to Age Verification</button>';
    $output .= '</div>';

    echo $output;
  }
  add_shortcode( 'register_mycustom_agecert_page', 'register_mycustom_agecert_page');    
}

认证弹窗脚本

function callSa() {
    let authPopup = popupCenter();
    if(authPopup != undefined && authPopup != null) {
        document.saForm.setAttribute("target", "sa_popup");
        document.saForm.setAttribute("method", "post");
        document.saForm.setAttribute("action", "https://sa.inicis.com/auth");
        document.saForm.submit();
    }
}

function popupCenter() {
    let _width = 400;
    let _height = 620;
    var xPos = (document.body.offsetWidth/2) - (_width/2);
    xPos += window.screenLeft; // 适配双显示器居中

    return window.open("", "sa_popup", "width="+_width+", height="+_height+", left="+xPos+", menubar=yes, status=yes, titlebar=yes, resizable=yes");
}

问题表现

回调文件success.php放在子主题/kg/目录下,核心逻辑是接收第三方返回的认证结果,校验用户年龄是否满20岁,认证通过则给当前登录用户写入ageCert、ageCertDate两个usermeta字段。
测试时认证成功后可以正常输出Success - Process 01,但后续依赖WordPress函数的逻辑完全不执行,既不输出Success - Process 02也不输出Failure - Process 02。

原因定位

自定义的PHP文件默认不会加载WordPress运行环境,is_user_logged_in()、get_current_user_id()、update_user_meta()、wp_login_url()这些WordPress原生函数都未定义,代码执行到调用这些函数的位置就会中断。

初始方案梳理

一开始考虑过三个解决方向:

  • 对接WordPress REST API,把认证结果传到API接口,通过WP内置的接口逻辑写入用户数据
  • 直接写原生PHP连接WordPress数据库,手动操作usermeta表完成数据读写
  • 手动加载WordPress核心运行环境,让自定义页面可以直接调用WP原生函数

最终解决方法

在success.php文件最顶部引入WordPress根目录的wp-load.php文件,即可加载完整的WordPress运行时环境,所有原生函数、钩子都可以正常使用。
添加的代码如下:

// 替换为站点实际的WordPress根目录路径,常规站点可以直接用文档根目录
$wp_root = $_SERVER['DOCUMENT_ROOT'];
require_once( $wp_root . '/wp-load.php' );

添加后测试所有逻辑正常运行,可以正确判断用户登录状态、完成年龄校验、写入用户认证元数据。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 14:21:07