我正在编写我的第一个Wordpress插件,需要添加一个处理表单的页面。我有一个短代码,可以向任何页面添加表单。该表单需要发布到我可以处理数据的URL(保存到数据库并发送电子邮件)。
我最初在我的插件目录中添加了一个process.php文件并发布到该文件,该文件用于获取发布的数据,但我无法访问任何wordpress功能(我需要访问我创建的数据库表)。
理想情况下,我想拥有一个可以使用/ plugin-name / process的网址。我假设必须有一种方法可以直接使用我的主插件代码文件中的函数,但我似乎无法找到如何做到这一点。
我是一个使用Wordpress的完全菜鸟(主要是.NET开发人员,但有PHP经验),所以任何帮助都会受到赞赏。
答案 0 :(得分:3)
很少有事情不清楚,但根据我的理解,我可以建议以下解决方案:
使用wordpress'init'操作来捕获发布的数据,例如
add_action('init', 'ur_form_process_fun');
function ur_form_process_fun(){
if(isset($_POST['unique_hidden_field'])) {
// process form data here
}
}
在上面的代码ur_form_process_fun()函数触发wordpress的初始化阶段,你的表单的动作应该是默认的站点url action="<?php site_url()?>"
,这样,提交的数据将被发布到站点的基本URL并且它可以被提供到init
行动。
unique_hidden_field
可以是表单的唯一隐藏输入字段,这只是为了确认数据来自您的表单。
希望这可以解决您的问题。 :)
答案 1 :(得分:0)
您可以使用add_feed函数创建操作路径页面,编写与插件functions.php类似的内容或您定义wordpress操作的任何位置:
add_action('init', function () {
add_feed('/plugin/form_id_action', function(){
include 'your-action-file.php');
})
});
在你的action-file.php中你应该像往常一样使用wordpress功能。
<form action="/pluging/form_id_action" id="form_id_action">
...
</form>
参考文献: https://codex.wordpress.org/Rewrite_API/add_feed https://www.pmg.com/blog/a-mostly-complete-guide-to-the-wordpress-rewrite-api/