使用PHP脚本和默认标题创建WordPress表单

时间:2016-10-06 作者:Stephen Rose

我正在尝试在WordPress中创建自定义表单。

表单的步骤1是HTML代码,它收集数据并通过post方法将其发送到PHP文件,然后将其写入MySQL数据库,并使用PHP代码创建表单的步骤2。

我的问题是,我想在WordPress在步骤1中使用的表单的步骤2中包括默认的WordPress页眉和页脚。有没有一种方法可以通过包含header.phpfooter.php 在我的PHP脚本中?

我曾尝试将此放在脚本的顶部:

<?php get_header(); ?>
但它给了我一个未定义的函数错误。

1 个回复
SO网友:Tom J Nowell

首先,不要将浏览器直接发送到主题或插件中的PHP文件。这是一个安全漏洞,导致设置非常脆弱。例如:

即使主题被停用,该文件也会工作,并适用于安装中的所有站点,而不仅仅是为其启用的站点。该文件需要访问并引导WordPress,导致冗长的包含路径很脆弱,由于需要指定表单处理程序文件的路径,在前端创建表单时可能会混淆插件的非标准上下文变得更加复杂,如果需要进行服务器端验证,需要知道再次显示表单时出现了什么问题,则会变得更加复杂,因此:

对于AJAX,使用register\\u rest\\u route和rest API创建接受表单处理所需数据的自定义端点,请使用现有页面。您不需要特殊的表单处理程序页面;您只需检查表单是否已提交,并采取相应的行动,例如:

<form method="post">
    <input type="hidden" name="doing_form" value="yes"/>
</form>
然后在初始化挂钩上:

add_action( \'init\', function() {
    if ( empty( $_POST[\'doing_form\'] ) ){
        return; // We didn\'t submit the form
    }
    // We did! Do the form handling
    ...
}
最后,对于在MySQL表中存储联系人表单,我建议不要这样做。改用自定义帖子类型。它将为您提供一个管理员界面,您可以使用WP_Query 而不是原始SQL,您可以导入和导出。如果您真的想用WordPress自动提供的URL、存档和模板在前端显示它们,您甚至可以将它们显示出来。

这就是流行的联系人表单插件的方式,这些插件已经完成了您尝试执行的操作,例如:

忍者形态接触形态7重力形态