使用 Nette Form 简化创建文章分类自定义字段代码
自定义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);
}
除了直接使用官方的函数保存到数据库,我们还可以在保存之前做一个预处理,获取使用我们自己的函数保存用户提交到数据到其他数据表中,这期中有很大的发挥空间供我们想象。以上方法同样可用于添加文章自定义字段、用户自定义字段和增加设置选项表单,有需要的朋友可以尝试一下,相信会节省不少开发时间来看看美剧把把妹子啥的。
-
如何创建WordPress古腾堡编辑器的区块(PHP+原生JS) 2024-01-10 01:01:06
-
搭建一个WordPress网站需要多少成本 2023-11-06 00:09:51
-
Symlink介绍(附:如何使用Symlink进行WordPress开发) 2023-11-05 23:38:32
-
让WordPress实现数据库同步的插件:HyperDB 2023-10-24 23:40:49
-
allegro电商平台值得做吗(附:2023年Allegro注册流程指南) 2023-10-08 21:53:39
-
印度跨境电商平台有哪些(附:印度跨境电商做什么产品好) 2023-10-08 21:34:23
-
跨境电商必看的几大海外二手电商平台 2023-10-08 18:04:42
-
WordPress同城互联网产品解决方案:UBASE 2023-10-03 16:40:39
-
WordPress网站的安全插件:wordfence 2023-09-14 09:25:18
-
WordPress 6.3 支持在手动更新插件和主题失败后回滚旧版本 2023-08-28 16:58:45