Form Processing

时间:2020-04-14 作者:TomC

我在处理表单时遇到问题。该项目是独立的PHP,我正在使用以下方法将其集成到Wordpress中:

require_once("../../../wp-load.php");
表单元素定义为:

<form id="new_post" name="new_post" class="form-horizontal" method="post" enctype="multipart/form-data">
现在,我对测试很满意,我正在尝试将其移动到wordpress插件中,并使用is_page()

现在,表单看起来还可以,但当我提交表单时,我看到的是主题的404页面,而不是我在测试版本中得到的所需输出。

我已尝试将表单元素更改为:

<form action="<?php echo esc_url( admin_url(\'admin-post.php\') ); ?> id="new_post" name="new_post" class="form-horizontal" method="post" enctype="multipart/form-data">
但我只得到一个白色屏幕。我的日志中没有显示错误。

对我做错了什么有什么建议吗?

3 个回复
最合适的回答,由SO网友:TomC 整理而成

我通过添加一个隐藏字段来实现这一点:

<input type="hidden" name="action" value="process_form">
并将表单操作更新为:

<form action="<?php echo admin_url( \'admin-post.php\' ); ?>" id="new_post" name="new_post" class="form-horizontal" method="post" enctype="multipart/form-data">
然后,我将表单处理打包到一个函数中:

function process_form() 
然后使用以下工具钩住它:

add_action( \'admin_post_process_form\', \'process_form\' );
这是因为发送到admin post。然后,php在表单隐藏字段中按名称查找函数,可以使用

admin_post_YOUR_HIDDEN_VALUE_HERE

SO网友:Kevin Meboe

我不确定你的问题的根本原因是什么。但我确实在您的上一个代码块中看到了语法错误,这可能是导致出现白色屏幕的原因。您的“操作”属性缺少右引号。请尝试以下操作:

<form action="<?php echo esc_url( admin_url(\'admin-post.php\') ); ?>" id="new_post" name="new_post" class="form-horizontal" method="post" enctype="multipart/form-data">

SO网友:Kevin Meboe

我没有足够的声誉给你的答案加上评论,这就是我的答案。这仍然是有用的信息,所以我正在添加另一个答案。

我今天找到的这篇文章详细介绍了您正在尝试做的事情:https://www.sitepoint.com/handling-post-requests-the-wordpress-way/

你已经把这一切都弄清楚了,但这对其他有同样问题的人可能会有帮助,他们希望看到更多关于这一切如何运作的细节。

如果管理员可以将其转换为TomC回答下的注释,那可能会更有用。

相关推荐

Gantry4中的GravityForms不会显示

在将表单插入页面之前,在Gantry4模板中实现GravityForms效果良好。表单(包括条件)不会显示在页面的公共视图中。经过7个小时的研究,问题似乎来自主题(甘特瑞4),因为将其更改为另一个主题确实会显示表单,但GravityForms的支持团队没有给出任何直接的解决方案,他们宁愿建议更改主题。尝试将主题更改为Gantry5似乎需要几天的时间,而且无法确定问题是否会得到解决(因为问题可能是由于使用了mootools),而且由于控制台上没有出现错误,几乎不可能找到真正的原因。使用控制台进行一些测试,这