Formmanager
Formbuilder 已改用 WordPress FieldManager 的方案, 请参考文档 Fieldmanager
Formbuilder 的数据结构中,很多类型的数据都是以数组的方式保存的,这种方式可能会在获取和更新数据的时候带来一些不便,不过好处在于可以提高性能。
Frommanager 插件支持以 tab 的形式显示自定义字段,对于自定义字段比较多的站点,可以提升后台的用户体验。
自定默认支持的属性
所有自定义字段类型都继承自 Fieldmanager_Field 字段,Fieldmanager_Field 字段的属性也会被自动继承。
属性可见性 | 属性名称 | 属性说明 |
---|---|---|
public static boolean |
$debug | #如果设置为 true,显示调试信息 |
public integer |
$limit | #显示多少字段,不限制设置为 0 |
public integer |
$minimum_count | #$limit != 1 时最少显示多少个字段, 如果$limit == $minimum_count, 或元素数量少于这个数字时,移除按钮将被隐藏 |
public integer |
$extra_elements | #$limit != 1 时显示多少空字段,已加载数据中的元素数量 + $extra_elements > $minimum_count. |
public string |
$add_more_label | #添加更多按钮的文本 |
public string |
$name | #表单元素的名称 |
public string |
$label | #表单元素的标签 |
public boolean |
$inline_label | #如果设置为 true,标签将和元素显示在一行 |
public boolean |
$label_after_element | #如果为 true,标签在表单元素后面 |
public string |
$description | #表单元素的描述 |
public boolean |
$description_after_element | #如果为 true,描述在表单元素后面 |
public string or boolean[] |
$attributes | #附加 HTML 元素,设置为 true 应用独立属性,如:'required' => true |
public string |
$field_class | #表单元素的 CSS 类 |
public boolean |
$one_label_per_item | #如果是可重复项,是否为每个重复项显示标签 |
public boolean |
$sortable | #是否允许为可重复项排序 |
public string |
$label_element | #表单标签的 HTML 元素 |
public callable |
$sanitize | #净化输入的函数 |
public callback[] |
$validate | #验证输入的函数 |
public string or array |
$validation_rules | #jQuery 验证规则,输入自负或关联数组,规则会自动被转化为 Javascript format,更多信息参考 jQuery 文档 |
public string or array |
$validation_messages | #jQuery 验证规则消息,输入自负或关联数组,规则会自动被转化为 Javascript format,更多信息参考 jQuery 文档 |
public boolean |
$required | # 使已经具有内置验证的 WordPress 字段为必填项,仅在添加分类法项目时使用 |
public string or null |
$data_type | #表单元素的数据类型,一般会自动设置好 |
public integer or null |
$data_id | #$this->data_type 的 ID, 如 $post->ID, 一般会默认设置好 |
public boolean |
$save_empty | #如果设置为 true,保存空元素到数据库中 (如果 $this->limit != 1; 单元素值永远保存) |
public boolean |
$skip_save | #不保存此项目 (自定处理数据时使用) |
public boolean |
$index | #Save this field additionally to an index |
public boolean |
$serialize_data | #保存字段的值到他们自己的键中(只在某些情况下有用),默认为 true |
public Fieldmanager_Datasource |
$datasource | #从数据源中获取数据,Fieldmanager_Autocomplete 和 Fieldmanager_Options 使用 |
public array[] |
$display_if | #根据条件显示表单元素,如: $element->display_if = array( 'src' => 'display-if-src-element', 'value' => 'display-if-src-value' ); |
public string |
$add_more_position | #新项目应该被添加到什么地址(头部或底部)可选的值为 "top 或 bottom" |
public boolean |
$remove_default_meta_boxes | #如果设置为 true, 移除被 Fieldmanager 字段覆盖的默认元数据盒子 |
public string |
$template | #字段的模板路径 |
public array |
$meta_boxes_to_remove | #如果 $remove_default_meta_boxes 为 true, 这个数组将指定被移除的默认元数据盒子 |
public mixed |
$default_value | #表单元素的默认值 |
public callable or null |
$index_filter | #解析索引值并返回修改侯的值的功能 |
public string |
$input_type | #输入类型,支持所有HTML 5 类型 |
public array |
$escape | #标签、描述自定义 escaping,如:$field => $callable 关联数组 |
public boolean |
$is_attachment | #是否在编辑媒体页面显示 |
支持的字段类型
Text 文本字段
add_action( 'fm_post_post', function() {
$fm = new Fieldmanager_TextField( array(
'name' => 'demo-field',
) );
$fm->add_meta_box( 'TextField Demo', array( 'post' ) );
} );
html5 支持
add_action( 'fm_post_post', function() {
$fm = new Fieldmanager_TextField( array(
'name' => 'demo-field',
'input_type' => 'color',
) );
$fm->add_meta_box( 'TextField Demo', array( 'post' ) );
} );
Media 文件上传
add_action( 'fm_post_post', function() {
$fm = new Fieldmanager_Media( array(
'name' => 'demo-media',
) );
$fm->add_meta_box( 'Media Field', array( 'post' ) );
} );
带选项
add_action( 'fm_post_post', function() {
$fm = new Fieldmanager_Media( array(
'name' => 'demo-media',
'button_label' => 'Add Icon',
'modal_title' => 'Select Icon',
'modal_button_label' => 'Use Image as Icon',
'preview_size' => 'icon',
) );
$fm->add_meta_box( 'Media Field', array( 'post' ) );
} );
TextArea 多段文本
add_action( 'fm_post_post', function() {
$fm = new Fieldmanager_TextArea( array(
'name' => 'demo-field',
) );
$fm->add_meta_box( 'TextArea Demo', array( 'post' ) );
} );
自定义尺寸
add_action( 'fm_post_post', function() {
$fm = new Fieldmanager_TextArea( array(
'name' => 'demo-field',
'attributes' => array(
'rows' => 3,
'cols' => 30,
),
) );
$fm->add_meta_box( 'TextArea Demo', array( 'post' ) );
} );
RichTextArea 富文本编辑器
add_action( 'fm_post_post', function() {
$fm = new Fieldmanager_RichTextArea( array(
'name' => 'demo-field',
) );
$fm->add_meta_box( 'RichTextArea Demo', array( 'post' ) );
} );
编辑器设置
add_action( 'fm_post_post', function() {
$fm = new Fieldmanager_RichTextArea( array(
'name' => 'demo-field',
'editor_settings' => array(
'media_buttons' => false,
),
) );
$fm->add_meta_box( 'RichTextArea Demo', array( 'post' ) );
} );
可视化编辑器可用选项参考 :https://codex.wordpress.org/Function_Reference/wp_editor#Arguments
简单编辑器
add_action( 'fm_post_post', function() {
$fm = new Fieldmanager_RichTextArea( array(
'name' => 'demo-mini-field',
'buttons_1' => array( 'bold', 'italic', 'bullist', 'numlist', 'link' ),
'buttons_2' => array(),
'editor_settings' => array(
'quicktags' => false,
'media_buttons' => false,
),
) );
$fm->add_meta_box( 'RichTextArea Demo', array( 'post' ), 'side' );
} );
Radios 单选项
add_action( 'fm_post_post', function() {
$fm = new Fieldmanager_Radios( array(
'name' => 'demo-field',
'options' => array(
'red' => 'Red',
'green' => 'Green',
'blue' => 'Blue',
),
) );
$fm->add_meta_box( 'Radio Fields', array( 'post' ) );
} );
数据来源
add_action( 'fm_post_post', function() {
$fm = new Fieldmanager_Radios( array(
'name' => 'demo-field',
'datasource' => new Fieldmanager_Datasource_User,
) );
$fm->add_meta_box( 'Radio Buttons Demo', array( 'post' ) );
} );
Checkbox 选项
add_action( 'fm_post_post', function() {
$fm = new Fieldmanager_Checkbox( array(
'name' => 'demo-field',
'label' => 'Checkbox Label',
) );
$fm->add_meta_box( 'Basic Checkbox', array( 'post' ) );
} );
设置选中项值
add_action( 'fm_post_post', function() {
$fm = new Fieldmanager_Checkbox( array(
'name' => 'demo-field',
'label' => 'Sample Checkbox',
'checked_value' => 'yes',
'unchecked_value' => 'no',
) );
$fm->add_meta_box( 'Custom Checkbox Values', array( 'post' ) );
} );
CheckBoxes 多选项
add_action( 'fm_post_post', function() {
$fm = new Fieldmanager_Checkboxes( array(
'name' => 'demo-field',
'options' => array(
'red' => 'Red',
'green' => 'Green',
'blue' => 'Blue',
),
) );
$fm->add_meta_box( 'Checkboxes Demo', array( 'post' ) );
} );
数据来源
add_action( 'fm_post_post', function() {
$fm = new Fieldmanager_Checkboxes( array(
'name' => 'demo-field',
'datasource' => new Fieldmanager_Datasource_User,
) );
$fm->add_meta_box( 'Checkboxes Demo', array( 'post' ) );
} );
Select 下拉选择
add_action( 'fm_post_post', function() {
$fm = new Fieldmanager_Select( array(
'name' => 'demo-field',
'options' => array(
'red' => 'Red',
'green' => 'Green',
'blue' => 'Blue',
),
) );
$fm->add_meta_box( 'Select Demo', array( 'post' ) );
} );
第一项为空
add_action( 'fm_post_post', function() {
$fm = new Fieldmanager_Select( array(
'name' => 'demo-field',
'first_empty' => true,
'options' => array(
'red' => 'Red',
'green' => 'Green',
'blue' => 'Blue',
),
) );
$fm->add_meta_box( 'Select Demo', array( 'post' ) );
} );
数据来源
add_action( 'fm_post_post', function() {
$fm = new Fieldmanager_Select( array(
'name' => 'demo-field',
'datasource' => new Fieldmanager_Datasource_User,
) );
$fm->add_meta_box( 'Select Demo', array( 'post' ) );
} );
下拉选择多选
add_action( 'fm_post_post', function() {
$fm = new Fieldmanager_Select( array(
'name' => 'demo-field',
'multiple' => true,
'attributes' => array(
'size' => 3,
),
'options' => array(
'red' => 'Red',
'green' => 'Green',
'blue' => 'Blue',
),
) );
$fm->add_meta_box( 'Select Demo', array( 'post' ) );
} );
使用 Choosen 效果
add_action( 'fm_post_post', function() {
$fm = new Fieldmanager_Select( array(
'name' => 'demo-field',
'type_ahead' => true,
'options' => array(
'red' => 'Red',
'green' => 'Green',
'blue' => 'Blue',
),
) );
$fm->add_meta_box( 'Select Demo', array( 'post' ) );
} );
Color Picker 颜色选择
$fm = new Fieldmanager_Colorpicker( array(
'name' => 'basic_colorpicker',
) );
$fm->add_meta_box( 'Basic Colorpicker', 'post' );
Date Picker 日期选择
add_action( 'fm_post_post', function() {
$fm = new Fieldmanager_Datepicker( array(
'name' => 'demo-field',
) );
$fm->add_meta_box( 'Datepicker Demo', array( 'post' ) );
} );
带时间
add_action( 'fm_post_post', function() {
$fm = new Fieldmanager_Datepicker( array(
'name' => 'demo-field',
'use_time' => true,
) );
$fm->add_meta_box( 'Datepicker Demo', array( 'post' ) );
} );
自定义日期格式
add_action( 'fm_post_post', function() {
$fm = new Fieldmanager_Datepicker( array(
'name' => 'demo-field',
'date_format' => 'Y-m-d',
'js_opts' => array(
'dateFormat' => 'yy-mm-dd',
),
) );
$fm->add_meta_box( 'Datepicker Demo', array( 'post' ) );
} );
Hidden 隐藏字段
add_action( 'fm_post_post', function() {
$fm = new Fieldmanager_Hidden( array(
'name' => 'demo-field',
) );
$fm->add_meta_box( 'Uninteresting Demo', array( 'post' ) );
} );
Link 链接
add_action( 'fm_post_post', function() {
$fm = new Fieldmanager_Link( array(
'name' => 'demo-link',
) );
$fm->add_meta_box( 'Basic Link Field', array( 'post' ) );
} );
Password 密码
add_action( 'fm_post_post', function() {
$fm = new Fieldmanager_Password( array(
'name' => 'demo-password',
) );
$fm->add_meta_box( 'Password Field', array( 'post' ) );
} );
Autocomplete 自动完成
$fm = new Fieldmanager_Autocomplete( array(
'name' => 'size',
'datasource' => new Fieldmanager_Datasource( array(
'options' => array( 'Small', 'Medium', 'Large' ),
) ),
) );
$fm->add_meta_box( 'Autocomplete Field', 'post' );
数据来源
$fm = new Fieldmanager_Autocomplete( array(
'name' => 'related_post',
'show_edit_link' => true,
'datasource' => new Fieldmanager_Datasource_Post( array(
'query_args' => array( 'post_type' => 'post' ),
) ),
) );
$fm->add_meta_box( 'Related Post', 'post' );
元数据盒子显示的位置
文章类型
$fm->add_meta_box( 'Basic Field', 'post' );
分类项目
$fm->add_term_meta_box( 'Basic Field', 'category' );
子菜单页面
if ( function_exists( 'fm_register_submenu_page' ) ) {
fm_register_submenu_page( 'my_fields', 'tools.php', 'Meta Fields' );
}
add_action( 'fm_submenu_my_fields', function() {
$fm = new Fieldmanager_TextField( array(
'name' => 'my_fields',
) );
$fm->activate_submenu_page();
} );
用户资料
$fm-> add_user_form( 'Basic Field' );
文章快速编辑
$fm->add_quickedit_box( 'Basic Field', 'post', function( $values ) {
return ! empty( $values['demo'] ) ? $values['demo'] : '';
} );
字段组
add_action( 'after_setup_theme', function() {
$fm = new Fieldmanager_Group( array(
'name' => 'demo-group',
'serialize_data' => false,
'add_to_prefix' => false,
'children' => array(
'field-one' => new Fieldmanager_TextField( 'First Field' ),
'field-two' => new Fieldmanager_TextField( 'Second Field' ),
),
) );
$fm->add_meta_box( 'Basic Group', array( 'post' ) );
} );
上面的代码中:
- name: 字段组的名称,children 以数组的形式保存为自定义字段。
- serialize_data: 是否序列化字段组的数据,不序列化方便访问自断组中的数据,序列化提高访问效率,酌情使用。
- add_to_prefix: 序列化后,是否添加前缀。
- children: 字段组中的字段
- array('post'): 字段支持的自定义文章类型
字段组字段带选项
add_action( 'after_setup_theme', function() {
$fm = new Fieldmanager_Group( array(
'name' => 'demo-group',
'serialize_data' => false,
'add_to_prefix' => false,
'children' => array(
'field-one' => new Fieldmanager_TextField( 'First Field' ),
'field-two' => new Fieldmanager_RichTextArea( [
'label' => '使用方法',
'attributes' => [
'rows' => 5,
'cols' => 50,
'readonly' => true,
],
] ),
),
) );
$fm->add_meta_box( 'Basic Group', array( 'post' ) );
} );
带选项卡的自定义字段盒子
add_action( 'after_setup_theme', function() {
$fm = new Fieldmanager_Group( array(
'name' => 'tabbed_meta_fields',
'tabbed' => 'vertical',
//'tabbed' => 'horizontal',
'serialize_data' => false,
'add_to_prefix' => false,
'children' => array(
'tab-1' => new Fieldmanager_Group( array(
'serialize_data' => false,
'add_to_prefix' => false,
'label' => 'First Tab',
'children' => array(
'text' => new Fieldmanager_Textfield( 'Text Field' ),
)
) ),
'tab-2' => new Fieldmanager_Group( array(
'label' => 'Second Tab',
'serialize_data' => false,
'add_to_prefix' => false,
'children' => array(
'textarea' => new Fieldmanager_TextArea( 'TextArea' ),
'media' => new Fieldmanager_Media( 'Media File' ),
)
) ),
)
) );
$fm->add_meta_box( 'Tabbed Group', 'post' );
} );