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

WordPress GiveWP插件自定义字段邮件标签无法正常显示内容求助

解决GiveWP自定义字段邮件标签显示"No support data found"的问题

作为PHP新手碰到这个问题太正常了,咱们一步步拆解排查,把问题解决掉:


1. 先确认自定义字段的存储键名是否匹配

这是最容易踩坑的点:你在邮件标签里调用的键名,必须和存储到捐赠记录里的元数据键名完全一致(大小写、下划线/连字符都不能错)。

你可以先去数据库的wp_postmeta表(如果你的WordPress前缀不是wp_就对应修改),找到对应测试捐赠记录的元数据,确认这个自定义字段的键名到底是什么——比如你以为是donation_purpose,实际可能存成了give_donation_purpose。


2. 检查邮件标签的注册代码是否规范

GiveWP注册自定义邮件标签依赖give_add_email_tags钩子,正确的写法应该是这样的:

add_action( 'give_add_email_tags', 'register_my_donation_purpose_tag' );
function register_my_donation_purpose_tag() {
    give_add_email_tag(
        'donation_purpose', // 这是你在邮件模板里用的标签,比如{donation_purpose}
        '显示捐赠者指定的捐赠用途',
        'get_donation_purpose_content' // 负责获取内容的回调函数
    );
}

function get_donation_purpose_content( $tag_args ) {
    $donation_id = $tag_args['payment_id'];
    // 这里的键名必须和存储时的完全一致!
    $purpose = get_post_meta( $donation_id, '你的自定义字段键名', true );
    
    // 没获取到值时返回友好提示,替换默认的"No support data found"
    return ! empty( $purpose ) ? $purpose : '未指定捐赠用途';
}

重点提醒:get_post_meta的第三个参数是true,确保返回单个字符串而非数组;键名一定要和存储逻辑里的对应上!


3. 验证自定义字段的存储逻辑是否正确

你创建自定义字段时,是不是用GiveWP的钩子来保存数据的?比如give_insert_payment,正确的存储代码应该类似:

add_action( 'give_insert_payment', 'save_my_donation_purpose_field', 10, 2 );
function save_my_donation_purpose_field( $payment_id, $payment_data ) {
    // 检查前端表单是否提交了这个字段
    if ( isset( $_POST['你的表单字段name属性'] ) ) {
        $purpose = sanitize_text_field( $_POST['你的表单字段name属性'] );
        // 存储到捐赠记录的元数据,键名要和邮件标签里的一致!
        update_post_meta( $payment_id, '你的自定义字段键名', $purpose );
    }
}

这里要注意:$_POST里的字段名必须和你前端表单输入框的name属性完全匹配,比如表单里是<input name="donation_purpose" ...>,那这里就得用$_POST['donation_purpose']。


4. 排除缓存和测试场景问题

  • 别用旧的捐赠记录测试!旧记录里没有这个自定义字段的数据,必须新建一笔测试捐赠来验证效果。
  • 如果用了缓存插件,先清空全站缓存,避免旧的邮件模板被缓存导致看不到更新。
  • 检查GiveWP的邮件模板设置,确保你正确输入了标签(比如{donation_purpose}),没有打错字或多打空格。

5. 调试技巧:直接看数据流向

如果还是不行,给回调函数加调试代码,看看数据到底有没有被存储:

function get_donation_purpose_content( $tag_args ) {
    $donation_id = $tag_args['payment_id'];
    // 把捐赠ID和所有元数据写入PHP错误日志,方便排查
    error_log( '当前测试捐赠ID:' . $donation_id );
    error_log( '该捐赠的所有元数据:' . print_r( get_post_meta( $donation_id ), true ) );
    
    $purpose = get_post_meta( $donation_id, '你的自定义字段键名', true );
    return ! empty( $purpose ) ? $purpose : '未指定捐赠用途';
}

然后查看你的PHP错误日志,就能清楚看到:这个捐赠ID下有没有存储对应的自定义字段值,这样就能快速定位是存储环节出问题,还是标签调用环节出问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:08:58