在 WordPress 中使用页面模板创建自定义表单,让用户从前端页面输入数据过程是很麻烦的,主要麻烦的地方在于创建 HTML 表单并验证用户提交的数据,这一个过程需要写很多代码,一不小心,很容易会出错,导致表单提交不了,或出现一些安全性问题。
Nette From 类库是 PHP Nette 框架中的表单处理类,我们可以把这个类拿出来单独使用,使用方法也非常简单,我们来看一下,下面的代码都是写在一个 WordPress 标准的页面模板中的。
第一步,安装并引入 Nette-From 类库
通过 Composer 安装 Nette-From 类库
composer require nette/forms
如果不知道怎么使用 Composer,请参考本站之前的文章在WordPress主题或插件中使用 PHP Composer。
引入 Nette From 类
这一步很简单,通过 Composer 安装完成之后,直接在页面模板中引入 Composer 生成的 autoload.php 文件即可。
require_once( dirname( __FILE__ ) . '/vendor/autoload.php' );
use Nette\Forms\Form;
创建表单并显示
最重要的一步就是创建表单了,这也是和直接使用 HTML 创建表单不同的地方,在这里,创建表单的代码完全写在 PHP 中,不用再去写乱七八糟的 HTML 代码了,代码量减少了不少,出错的机会自然也少了。
// 获取用户数据,在为表单设置默认数据时使用
$uid = wp_get_current_user()->ID;
$nickname = get_user_meta($uid, 'nickname' ,true);
$card = get_user_meta($uid, 'card' ,true);
//创建表单
$form = new Form;
$form->setMethod( 'POST' );
$form->addText( 'nickname', '昵称:' )
->setRequired( '请输入昵称' ) // 这里设置了验证此项为必填项
->setDefaultValue($nickname);
$form->addText( 'card', ' 会员卡号:' )
->setDefaultValue($card);
$form->addSubmit( 'send', '修改资料' );
//显示表单
echo $forms;
提交到后台
最后一步就是把提交过来的数据提交到后台了,提交之前,我们可以先验证一下表单的数据是否符合我们设置的条件,验证过程 Nette From 帮我们处理了,我们只需要简单的判断一下是否验证成功就可以了,如果验证成功,就把数据保存到后台,这里直接使用 update_user_meta
把数据保存到了用户自定义字段。如果验证失败,就显示错误提示信息。
// 验证表单
if ( $form->isSuccess() ) {
// 获取表单的值,有了这个,就不用通过丑陋的$POST[*]来获取表单提交的值了。
$values = $form->getValues();
// 保存自定义字段,有了这个操作,才能保存数据到数据库中
update_user_meta( $uid, 'nickname', $values->nickname);
update_user_meta( $uid, 'card', $values->card);
// 显示成功提醒
echo '<div class="ui-c-alert ui-c-alert-success">用户资料修改成功</div>';
}
// 如果表单有错误,显示错误信息
$form->render( 'errors' );
到这里,一个功能完整的表单就处理好了,当然,演示代码中需要处理的数据比较少,看起来可能没什么必要,试想一下,如果表单项非常多的情况下,直接使用 HTML 创建表单,还是使用本文介绍的方法比较方便,相信结果是一目了然的。
2 thoughts on “在 WordPress 中使用 Nette Form 表单类创建表单并提交到后台”
樓主不是推薦是用piklist插件來做表單嗎?
是的,之前推荐过,解决问题的方法不止一个,这个方法相当于 Piklist,更灵活。