+ 收藏我们

网站模板

网站模板搜索
404模板 营销型模板 外贸网站模板 单页模板 双语模板 标签大全
电话:18630701785
首页 > 站长学院 > 使用 Nette Form 简化创建文章分类自定义字段代码 >

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

时间:2024-08-01 09:22:54

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

有问题可以加入网站技术QQ群一起交流学习

本站会员学习、解决问题QQ群(691961965)

客服微信号:lpf010888

pbootcms教程

织梦教程

站长学院

SEO

wordpress

竞价教程

信息流

Title