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

如何在WordPress中处理表单并将其数据生成XML文件

在WordPress中实现自定义表单生成XML文件的方案

一、修正表单代码

WordPress中无需单独指定PHP文件路径,表单可提交到当前页面,同时补充安全验证和必要属性:

<form action="<?php echo esc_url($_SERVER['REQUEST_URI']); ?>" method="post" enctype="multipart/form-data">
    <input type="hidden" name="action" value="XMLBanf">
    <?php wp_nonce_field('xml_banf_nonce', 'banf_nonce'); ?> <!-- 安全验证令牌 -->

    <label for="name">Name:</label>
    <input type="text" name="name" required>

    <label for="departement">Abteilung</label>
    <select name="departement"> <!-- 统一name属性与后续处理代码 -->
        <option value="keine_angabe">Keine Angabe</option>
        <option value="vertrieb">Vertrieb</option>
        <option value="it">IT</option>
        <option value="service">Service</option>
        <option value="lager">Lager</option>
    </select>

    <label for="order">Was soll bestellt werden: </label>
    <textarea name="order" cols="30" rows="10" required></textarea>

    <label for="reason_order">Grund der Bestellung</label>
    <input type="text" name="reason_order" required>

    <label for="price">Angebotspreis</label>
    <input type="number" name="price" required>

    <label for="offer_file">Angebotsdatei</label>
    <input type="file" name="offer_file"> <!-- 添加name属性以支持文件上传 -->

    <input type="submit" name="submit_button" value="Abschicken">
</form>

二、添加表单处理逻辑(主题functions.php)

将数据处理代码放到当前主题的functions.php文件中,利用WordPress的AJAX钩子完成请求处理:

// 绑定表单处理钩子(登录/未登录用户均支持)
add_action('wp_ajax_XMLBanf', 'handle_xml_banf_submission');
add_action('wp_ajax_nopriv_XMLBanf', 'handle_xml_banf_submission');

function handle_xml_banf_submission() {
    // 安全验证:检查令牌有效性
    if (!isset($_POST['banf_nonce']) || !wp_verify_nonce($_POST['banf_nonce'], 'xml_banf_nonce')) {
        wp_die('Ungültiges Sicherheits-Token.');
    }

    // 检查表单提交触发条件
    if (!isset($_POST['submit_button'])) {
        wp_die('Formular wurde nicht korrekt übermittelt.');
    }

    // 清洗用户输入,避免恶意数据
    $name = sanitize_text_field($_POST['name']);
    $departement = sanitize_text_field($_POST['departement']);
    $order = sanitize_textarea_field($_POST['order']);
    $reason_order = sanitize_text_field($_POST['reason_order']);
    $price = sanitize_text_field($_POST['price']);

    // 创建XML结构
    $xml = new SimpleXMLElement('<?xml version="1.0" encoding="utf-8" ?><order></order>');
    $xml->addChild('name', $name);
    $xml->addChild('departement', $departement);
    $xml->addChild('order', $order);
    $xml->addChild('reason_order', $reason_order);
    $xml->addChild('price', $price);

    // 处理文件上传(可选)
    if (!empty($_FILES['offer_file']['tmp_name'])) {
        $upload = wp_handle_upload($_FILES['offer_file'], array('test_form' => false));
        if (!isset($upload['error']) || $upload['error'] === 0) {
            $xml->addChild('offer_file_url', $upload['url']);
            $xml->addChild('offer_file_path', $upload['file']);
        }
    }

    // 获取WordPress上传目录(安全存储文件)
    $upload_dir = wp_upload_dir();
    $upload_path = $upload_dir['path'] . '/';
    $file_name = md5(uniqid(mt_rand(), true)) . 'banf.xml';
    $full_path = $upload_path . $file_name;

    // 保存XML文件并反馈结果
    if ($xml->asXML($full_path)) {
        $xml_url = $upload_dir['url'] . '/' . $file_name;
        echo '<div style="padding:20px;background:#d4edda;color:#155724;">';
        echo 'Formular erfolgreich übermittelt! XML-Datei: <a href="' . esc_url($xml_url) . '" target="_blank">Hier anzeigen</a>';
        echo '</div>';
    } else {
        echo '<div style="padding:20px;background:#f8d7da;color:#721c24;">';
        echo 'Fehler beim Speichern der XML-Datei.';
        echo '</div>';
    }

    wp_die(); // 必须调用,终止AJAX请求
}

三、生成的XML文件访问方式

  1. 存储路径:XML文件默认保存在WordPress上传目录,格式为wp-content/uploads/[年份]/[月份]/xxxxbanf.xml
  2. 访问URL:直接使用网站域名拼接上传目录URL,例如https://你的域名/wp-content/uploads/2024/05/xxxxbanf.xml
  3. 快捷访问:表单提交成功后,页面会显示生成的XML文件链接,点击即可直接打开

注意事项

  • 确保WordPress上传目录具备写入权限(通常为755或775)
  • 若无需支持未登录用户提交,可删除wp_ajax_nopriv_XMLBanf钩子
  • 可根据需求添加文件类型限制,避免上传恶意文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 20:49:50