我正在开发一个插件,它通过自定义管理页面的表单提交数据。这是我的表格的简化版本:
<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函数。
我怎样才能做到这一点?与我自己的自定义提交按钮相比,我是否应该使用操作挂钩来提交表单?
最合适的回答,由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 也在那张表格里面。