如何从表单处理脚本调用WordPress函数

时间:2018-11-18 作者:YAHsaves

我正在开发一个插件,它通过自定义管理页面的表单提交数据。这是我的表格的简化版本:

<form action="<?php echo plugin_dir_path(); ?>/process.php" method="post">
    <input type="text" name="keyName">
    <input type="submit" value="Update">
</form>
表单位于插件的主php文件中,因此它可以访问所有WordPress函数,如我上面调用的plugin\\u dir\\u path()。

但是,当用户单击“提交”按钮,并且$\\u POST变量被提交到“process.php”脚本时,我将无法访问该流程脚本中的所有WordPress函数。

我搜索了如何将WordPress函数添加到外部脚本中,发现了以下问题:How can I call WordPress core functions in external scripts?

提供的答案是,我在处理脚本的顶部包括这行代码:

require_once("wp-load.php");
但是,当我执行此操作时,“wp load.php”会附加到当前url的末尾,这会导致404类型的错误。我无法使用“get\\u site\\u directory()”函数指向WordPress主安装目录,因为它是WordPress函数。

我怎样才能做到这一点?与我自己的自定义提交按钮相比,我是否应该使用操作挂钩来提交表单?

1 个回复
最合适的回答,由SO网友:Krzysiek Dróżdż 整理而成

您不应该直接将任何内容发布到插件文件。这几乎总是一个安全缺陷,它会阻止网站所有者正确强化网站(在完美的情况下,不会请求内部的PHP文件wp-content 完全有必要)

好的做法是admin_post 操作。。。(类似于admin_ajax).

因此,您的表单应如下所示:

<form action="<?php echo esc_attr(\'admin-post.php\'); ?>" method="post">
    <input type="hidden" name="action" value="my_action" />
    <input type="text" name="keyName">
    <input type="submit" value="Update">
</form>
然后在插件中添加动作方法:

add_action( \'admin_post_my_action\', \'prefix_admin_my_action\' );
add_action( \'admin_post_nopriv_my_action\', \'prefix_admin_add_foobar\' );

function prefix_admin_my_action() {
    // Handle request then generate response using echo or leaving PHP and using HTML
}
附言:加入一些nonces 也在那张表格里面。

结束

相关推荐

Gantry4中的GravityForms不会显示

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