首先,我的问题类似于this thread. 然而,张贴在那里的解决方案对我不起作用。
我正在创建一个插件,它使用Shortcode API在页面上显示联系人表单。
插件文件夹内容:
请联系。php(主插件文件)验证。php(包括php文件)主文件有常用的插件头,其中调用的WordPress函数按预期工作[即:get\\u permalink()]
验证。php文件包含在contact中。php如下:
define ("PLUGIN_PATH", plugin_dir_path(__FILE__));
include_once dirname( __FILE__ ) . \'/validate.php\';
我的问题是在validate中调用的任何WordPress函数。php将抛出一个致命错误。PHP函数按预期工作,只有WordPress函数抛出致命错误:
Fatal error: Call to undefined function sanitize_text_field() in /{FULL WEBSITE PATH}/ralrom-contactform/validate.php
我应该如何包括验证。php文件是否能够从中调用WordPress函数?
我尝试了“require”和“include”变体,但都抛出了相同的致命错误。
Before using multiple files, I had a working version as a single file shown here:
单个php文件下的原始工作代码:
http://pastebin.com/qM5aj9qY两个php文件下的错误代码:http://pastebin.com/KUCbg6rJ
SO网友:Robert Al-Romhein
多亏了这些评论,我才明白我所要做的并不完全可能。
将数据发布到php页面的原因会将发布数据发送到WordPress循环或“框架”之外。因此,不会加载WordPress函数。解决此问题的一种方法是要求wordpress文件包含要在php页面中使用的函数,即:
require_once {path to wordpress wp-includes}/formatting.php;
然而,我觉得这是一种肮脏的做事方式。
相反,我跟着Otto\'s suggestion 在WordPress加载页面之前,通过在“init”挂钩上附加一个函数,截获了POST数据:
add_action("init", "intercept_post");
表单操作设置为当前页面,在intercept\\u post函数中,我运行数据验证,发送电子邮件并重定向到同一页面。这将有效地发送POST数据,并防止页面刷新再次提交数据。