使用Nette Form 简化创建文章分类自定义字段代码

使用Nette Form 简化创建文章分类自定义字段代码

使用Nette Form 简化创建文章分类自定义字段代码

WordPress 在4.3版本中增加了分类项目自定义字段的支持,为主题和插件的开发提供了便利。在增加API的同时,WordPress 却没有提供添加和管理分类法项目的UI界面。由于是刚增加的功能,支持分类法项目的插件还没有跟上。虽然 WordPress 为我们提供了添加分类自定义字段的示例代码,遗憾的是该代码提供的方法直接使用 HTML 构建用户输入表单,把PHP 和 HTML 代码混杂在一起,效率低下不说,管理和维护非常困难。

在开发一个 WordPress 主题的时候,我发现我们可以用本站之前介绍过的 Nette Form 类库为自定义分类法项目添加自定义字段表单,相比 WordPress 官方提供的方法,可以节省不少时间,管理和维护自定义字段表单也变得比较容易了。

首先,引入 Nette Form 并创建编辑自定义字段的表单

Nette Form 表单支持Autoload,我们已经通过 Composer 安装好了这个类库,所以直接引入就可以了使用了。创建表单的方法非常简单,首先获取分类项目自定义字段已经保存的值,作为表单的默认值供用户编辑,如果之前没有添加过该自定义分类法自定义字段,默认值就是空的,用户添加自己的内容就可以了。下面的示例代码中可以很清楚的说明使用Nette Form添加表单的方法,更详细的类库文章可以参考Nette Form官方文档。

require_once( dirname( __FILE__ ) . '/../vendor/autoload.php' );

use Nette\Forms\Form;

// 添加自定义字段到编辑分类表单
add_action( 'product_cat_edit_form_fields', 'edit_feature_group_field', 10, 2 );

function edit_feature_group_field( $term, $taxonomy ) {

   $form = new Form;

   // 修改表单输出以适配 WordPress 后台的表单结构
   $renderer                                        = $form->getRenderer();
   $renderer->wrappers[ 'controls' ][ 'container' ] = '';
   $renderer->wrappers[ 'pair' ][ 'container' ]     = 'tr';
   $renderer->wrappers[ 'label' ][ 'container' ]    = 'th';
   $renderer->wrappers[ 'control' ][ 'container' ]  = 'td';

   // 获取表单默认值
   $hlf_url      = get_term_meta( $term->term_id, 'hlf_url', true );
   $hlf_text     = get_term_meta( $term->term_id, 'hlf_text', true );
   $show_in_home = get_term_meta( $term->term_id, 'show_in_home', true );

   // 添加表单字段并设置默认值
   $form->addText( 'hlf_url', '自定义链接:' )
        ->setAttribute( 'size', '80' )
        ->setDefaultValue( $hlf_url );

   $form->addText( 'hlf_text', '显示名称:' )
        ->setAttribute( 'size', '80' )
        ->setDefaultValue( $hlf_text );

   $form->addCheckbox( 'show_in_home', '在首页显示' )
        ->setDefaultValue( $show_in_home );

   // 显示表单
   echo $form;

}

保存用户提交的自定义字段数据

如果只是添加了分类法项目自定义字段数据的表单,没有保存用户输入的内容到数据库里面,那么这个表单是没有任何意义的,而保存的方法非常简单。基本上就是获取用户提交过的数据,然后使用 WordPress 提供的更新分类法项目自定义字段的函数 update_post_meta 保存获取到的数据到数据库里面即可。

// 保存分类法自定义字段数据
add_action( 'edited_product_cat', 'update_feature_meta', 10, 2 );
function update_feature_meta( $term_id, $tt_id ) {
   $hlf_url      = $_POST[ 'hlf_url' ];
   $hlf_text     = $_POST[ 'hlf_text' ];
   $show_in_home = sanitize_title( $_POST[ 'show_in_home' ] );

   update_term_meta( $term_id, 'hlf_url', $hlf_url );
   update_term_meta( $term_id, 'hlf_text', $hlf_text );
   update_term_meta( $term_id, 'show_in_home', $show_in_home );
}

除了直接使用官方的函数保存到数据库,我们还可以在保存之前做一个预处理,获取使用我们自己的函数保存用户提交到数据到其他数据表中,这期中有很大的发挥空间供我们想象。以上方法同样可用于添加文章自定义字段、用户自定义字段和增加设置选项表单,有需要的朋友可以尝试一下,相信会节省不少开发时间来看看美剧把把妹子啥的。

本站提供 WordPress 主题定制开发服务

本站长期承接WordPress主题、插件、基于 WooCommerce 的商店商城开发业务。 我们有7年 WordPress 开发经验, 如果你想用 WordPress 开发网站, 请联系 QQ: 470266798 或邮箱: 4626395@gmail.com 咨询。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*