我有一个表单,我想用这个表单提交的数据创建一个XML文件,并将这个文件保存到一个特定的路径。
我不知道如何在WordPress中将数据传递到PHP文件。通常我会在action属性中传递PHP文件的路径并处理数据。
但是我如何在WordPress中做到这一点呢?我创建了没有插件的表单。
我是新的WordPress和仍然试图弄清楚的事情。
这是一种形式:
<form action="???" method="post">
<input type="hidden" name="action" value="XMLBanf">
<label for="name">Name:</label>
<input type="text" name="name" required="">
<label for="departement">Abteilung</label>
<select name="Abteilung">
<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"></label>
<input type="file">
<input type="submit" name="submit_button" value="Abschicken">
</form>
字符串
然后我会尝试这样处理数据:
if(isset($_POST['submit'])){
$xml = new SimpleXMLElement("<?xml version=\"1.0\" encoding=\"utf-8\" ?><order></order>");
$xml->addChild('name',$_POST['name']);
$xml->addChild('departement',$_POST['departement']);
$xml->addChild('order',$_POST['order']);
$xml->addChild('reason_order',$_POST['reason_order']);
$xml->addChild('price',$_POST['price']);
$fileName = md5(uniqid(mt_rand(), true))."banf.xml";
$asXML= $xml->asXML();
$file = fopen($fileName, "w+");
fwrite($file, $asXML);
fclose($file);
print_r(error_get_last());
if(file_exists("./".$fileName)){
$myXML = file_get_contents("./".$fileName);
$xml = new SimpleXMLElement($myXML);
$xmlpretty = $xml->asXML();
// pretty print the XML in browser
header('content-type: text/xml');
echo $xmlpretty;
}
型
我现在如何访问此文件?
1条答案
按热度按时间yftpprvb1#
您可以在functions.php文件或自定义插件中挂钩到
init
操作(https://developer.wordpress.org/reference/functions/add_action/)。字符串
您可以将表单操作的URL设置为
home_url()
,例如:action="<?php esc_url( home_url() ); ?>"
。任何WordPress生成的页面都会触发您的init
操作,运行您的代码。有几件事需要注意:
1.“submit”太模糊,可能会与其他提交冲突,因此请确保为您的操作添加一个具有唯一且清晰名称的隐藏输入。
1.确保您对表单使用nonce来对抗CSRFs。虽然您可能认为您现在没有漏洞,但重要的是要习惯将nonce添加到所有表单中,作为安全最佳实践:https://developer.wordpress.org/apis/security/nonces/#adding-a-nonce-to-a-form
1.不要忘记
exit;
和短路您的输出,以防止WordPress从加载主页进一步。