WordPress表单操作提交

7
在WordPress中拥有自定义表单。
action=<?php bloginfo('template_url'); ?>/send_form.php"

在提交时,它总是会进入send_form.php页面,但这个php页面只用于发送信息,我无法使用主题样式进行美化...
有没有办法在发送信息的同时停留在当前页面,并在一个字段中打印出表单已成功发送的消息?
有人能给我一些建议吗?
2个回答

16

这个问题的答案比较复杂,需要一些小心谨慎的处理。以下是一个方法的基本要点:

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

这应该可以给您一个起点。

如果有其他更简单的解决方案,我也很想听听。


谢谢帮助!我发现Ajax是解决这个问题的方案。所以我打算在这个问题上尝试使用Ajax。 - Cam
2
这是真的,我应该提到它。需要考虑的一件事是,没有启用Javascript的浏览器将不支持AJAX方法,因此当发生这种情况时,您需要考虑备用体验。这只占用户的一小部分,并且正在减少,因此根据您的流量,这可能不是问题。 - Greg
1
是的,这是真的。百分比非常小,因为90%以上的当前网站使用jQuery/Scriptaculous等技术。所以不要认为会有太大影响。 - Cam

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/

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接