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

文 / @WordPress主题

自定义WordPress分类项目自定义字段表单

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

使用Nette Form创建编辑自定义字段的表单

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

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

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);
}

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

添加UTHEME为好友
扫码添加UTHEME微信为好友
· 分享WordPress相关技术文章,主题上新与优惠动态早知道。
· 微信端最大WordPress社群,限时免费入群。