wordpress表单行动提交

Cam*_*Cam 5 forms wordpress

在wordpress中有自己的自定义表单.

action=<?php bloginfo('template_url'); ?>/send_form.php"
Run Code Online (Sandbox Code Playgroud)

在提交,它总是发送到send_form.php但这个PHP用于发送信息 - 我不能与主题风格....

有没有办法留在当前页面,同时它发送信息并打印出来并在表格已成功发送的字段中显示消息???

有人对我有什么建议吗?

Gre*_*reg 10

这个问题的答案是非常复杂的,正确的做法需要一点点关注,但这里有一个方法的要点:

  1. 必须将操作设置为加载当前页面,您可以通过action<form>标记中的属性更改为:action=""
  2. 在此页面的模板文件中,检测表单提交后何时加载页面.您可以通过检查$ _POST变量的状态来执行此操作.
  3. 如果有变量,请在模板文件中处理表单提交.您需要查看"send_form.php"中发生的事情以确定要执行的操作.请注意不要引入安全问题(例如,务必使用NONCE).
  4. 重定向回到同一页面以摆脱post变量.如果你不这样做,人们会得到那些"你想重新提交表单"的警告信息.请参阅PHP header()函数以执行重定向,并注意这必须在将任何输出发送到页面之前发生.
  5. 使用服务器会话显示"表单提交成功".在重定向之前将会话变量设置为您的消息,然后在页面加载时检测它,显示它并将其删除,以便下次加载页面时不显示该消息.

这应该给你一个起点.

如果其他人有更简单的解决方案,我也很乐意听到它.

  • 这是真的,我应该提到它.需要考虑的一件事是,没有启用Javascript的浏览器将不支持AJAX方法,因此您需要在发生这种情况时考虑后备体验.这是一小部分用户并且变小,因此根据您的流量,这可能不是问题. (2认同)

sud*_*dip 8

如果您想通过插件而不是主题来完成此操作,请使用“admin_post”(admin_post_YOUR_ACTION)和“admin_post_nopriv”(admin_post_nopriv_YOUR_ACTION)操作。(顺便说一句,您也可以通过主题使用这些操作)

这是一个很好的解释:https ://www.sitepoint.com/handling-post-requests-the-wordpress-way/