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

WordPress无插件实现发送邮件按钮短代码求助

解决WordPress短代码实现点击按钮给登录用户发邮件的问题

我看了你的两段代码,问题主要集中在这几个核心点:

  • 没有用表单包裹提交按钮,导致点击按钮时根本不会触发POST请求
  • 第二段代码把PHP逻辑当成字符串赋值,完全不会执行,只是输出文本
  • 缺少WordPress必要的安全验证,也没检查用户是否登录状态

下面是修正后的完整代码,我会一步步拆解关键改动:

function boutoncode($atts, $content = null) {
    // 初始化操作提示信息
    $message = '';

    // 先处理表单提交逻辑(放在最前面,确保请求触发时优先执行)
    if (isset($_POST['envoyer_promo_code']) && wp_verify_nonce($_POST['promo_code_nonce'], 'send_promo_code_action')) {
        // 检查用户是否已登录
        if (is_user_logged_in()) {
            $current_user = wp_get_current_user();
            $user_email = $current_user->user_email;
            $user_name = $current_user->display_name;

            // 配置邮件内容
            $subject = '你的专属促销码已送达';
            $email_content = "嗨 {$user_name},\n\n这是你的专属促销码:XYZ-123\n\n感谢你的支持!";
            $headers = array('Content-Type: text/plain; charset=UTF-8');

            // 使用WordPress内置函数发送邮件
            if (wp_mail($user_email, $subject, $email_content, $headers)) {
                $message = '<p style="color: green; margin: 10px 0;">邮件已成功发送到你的注册邮箱!</p>';
            } else {
                $message = '<p style="color: red; margin: 10px 0;">邮件发送失败,请稍后重试或联系管理员。</p>';
            }
        } else {
            $message = '<p style="color: orange; margin: 10px 0;">请先登录账户,才能获取专属促销码哦!</p>';
        }
    }

    // 解析短代码自定义属性
    extract(shortcode_atts(array(
        'couleur' => 'bleu'
    ), $atts));

    // 生成带表单的按钮HTML(添加安全验证字段)
    $button_html = '
        <form method="post" action="" style="margin: 10px 0;">
            ' . wp_nonce_field('send_promo_code_action', 'promo_code_nonce', true, false) . '
            <input class="bouton ' . esc_attr($couleur) . '" type="submit" name="envoyer_promo_code" value="Cliquez ICI pour recevoir par Email le CODE PROMO" />
        </form>
    ';

    // 返回提示信息+按钮HTML
    return $message . $button_html;
}
add_shortcode('boutoncode', 'boutoncode');

关键修正说明:

  • 表单包裹按钮:给submit按钮添加了<form>标签,method="post"确保点击时发送POST请求,action=""表示提交到当前页面
  • 安全验证:用wp_nonce_field生成CSRF验证字段,提交后用wp_verify_nonce验证请求合法性,避免恶意提交
  • 登录状态检查:用is_user_logged_in()确认用户已登录,避免给未登录用户发送无效邮件
  • 安全获取用户信息:用wp_get_current_user()获取当前登录用户的邮箱和昵称,比直接调用全局变量更安全
  • 适配WordPress邮件系统:用wp_mail()代替原生PHP mail函数,兼容WordPress的邮件配置(比如SMTP设置)
  • 操作反馈提示:添加了成功、失败、未登录三种状态的提示,用户能清晰知道操作结果

使用注意:

  1. 确保你的WordPress已正确配置邮件发送功能(比如设置SMTP,避免邮件被标记为垃圾邮件)
  2. 可以根据需求修改邮件主题、内容,或者按钮的样式类名
  3. 短代码支持自定义按钮类名,比如[boutoncode couleur="rouge"]就能给按钮添加rouge类

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:44:06