anthonypauwels / wp-acf-builder
使用 Closure 和辅助方法的高级自定义字段配置构建器
Requires
- php: ^8.0
README
使用流畅的 API 轻松创建 ACF 字段。
需要 WordPress 和 Advanced Custom Fields Pro。
安装
使用 composer 安装此包。
composer require anthonypauwels/wp-acf-builder
使用
基本
主 Builder 类提供了快捷方法来帮助您创建字段。以下是一个创建主页模板字段的示例
$home_group = Builder::pageTemplate('templates/home.php', 'Home Page', function ( Location $group ) { $group->group('Header', function ( Group $group ) { $group->text('Title'); $group->text('Tagline'); $group->text('Button'); $group->group('Background', function ( Group $group ) { $group->text('Video'); $group->image('Image')->returnUrl(); } ); } ); $group->group('Discover', function ( Group $group ) { $group->repeater('Subsection', function ( Repeater $group ) { $group->text('Title'); $group->text('Subtitle'); $group->wysiwyg('Content'); $group->image('Image')->returnUrl(); $group->group('Button', function ( Group $group ) { $group->text('Title'); $group->pageLink('Page')->postType('page'); } ); } ); } ); $group->group('Blog', function ( Group $group ) { $group->text('Title'); $group->text('Subtitle'); $group->group('Button', function ( Group $group ) { $group->text('Title'); $group->pageLink('Page')->postType('page'); } ); } ); } )->hideAll(); // group is stored into `$home_group` but not already build. You can call the method $home_group->build() to build the group into ACF.
Builder 类提供了用于为文章类型、选项页面和页面模板构建字段组的辅助方法。位置组也提供了一些辅助方法,可以通过条件参数显示它们
// Create fields for a post type Builder::postType('post', 'Post Field', function ( Location $group ) { // ... $group->postType('another_post_type', 'or'); // second parameter is optional and can be `or` or `and` } ); // Create fields for an options page Builder::optionsPage('Options', function ( Location $group ) { $group->image('Logo')->returnUrl(); $group->text('Copyright'); } );
可以导出子字段的组实例提供了创建子组的辅助方法。这涉及到组、布局、位置和重复器。这些方法可以帮助您创建子字段,如文本字段、文本区域字段、图片字段等。每个类都有自己的一组辅助方法来自定义配置。
例如,您可以使用如 returnUrl()
、returnArray()
或 returnId()
等辅助方法定义图片字段值的返回方式
带有子字段辅助方法的组也可以使用相同的方式创建子组。位置可以使用 repeater($name, $closure)
在其自身上创建重复字段。
创建组(重复器、组、布局)的辅助方法接受一个包含实例的闭包参数,该参数提供了相同的 API 来配置字段。
构建
您可以使用它们的 build
方法单独构建组。
$home_group->build(); // see example above $about_group->build(); $contact_group->build();
Builder 类提供了一个静态方法 build()
,该方法接受一个闭包参数。该方法首先调用闭包,然后创建 acf/init
动作。在闭包内部创建的每个组都将被内部标记为需要构建,并在 WordPress 动作内部构建。使用这种方式,您不需要调用每个组的 build()
方法,Builder 会为您完成。
Builder::build( function () { Builder::pageTemplate('templates/home.php', 'Home Page', function ( Location $group ) { // ... } ); // work also with optionsPage and postType methods } );
如果您想将字段导出到单独的文件,您也可以将其要求在闭包中
## AcfServiceProvider.php, by example Builder::build( function () { require 'acf.php'; } );
## acf.php Builder::pageTemplate('templates/home.php', 'Home Page', function ( Location $group ) { // ... } ); Builder::pageTemplate('templates/about.php', 'About Page', function ( Location $group ) { // ... } ); Builder::pageTemplate('templates/contact.php', 'Contact Page', function ( Location $group ) { // ... } );
命名空间
可以使用静态方法 Builder::namespace
来包装多个 Builder::pageTemplate
调用。命名空间只是存储您的模板的目录。
Builder::namespace( 'templates', function () { Builder::pageTemplate('home.php', 'Home Page', function ( Location $group ) { // ... } ); Builder::pageTemplate('about.php', 'About Page', function ( Location $group ) { // ... } ); } );
重用
以下是一个创建带有预定义字段的横幅组的示例。当您的组创建后,您可以将它们推入其他组的字段列表中,如位置、重复器和布局。
$banner_group = Builder::group('Banner', function (Group $group) { $group->text('Title'); $group->text('Subtitle'); $group->group('Button', function ( Group $group ) { $group->text('Title'); $group->pageLink('Page')->postType('page'); } ); $group->group('Background', function ( Group $group ) { $group->text('Video'); $group->image('Image')->returnUrl(); } ); } ); Builder::pageTemplate('templates/home.php', 'Home Page', function ( Location $group ) use ( $banner_group ) { // ... $group->addField( $banner_group ); // ... } ); Builder::pageTemplate('templates/contact.php', 'Contact Page', function ( Location $group ) use ( $banner_group ) { // ... $group->addField( $banner_group ); // ... } );
过滤器
字段和组提供了 ACF 过滤器的辅助方法。例如,您可以创建一个将返回值转换为大写字母的过滤器。
Builder::pageTemplate('home.php', 'Home Page', function ( Location $group ) { $group->text('Title')->onValue( function ( $field ) { $field['value'] = strtoupper( $field['value'] ); return $field; } ); // end of text field Title } );
或者预填充重复字段
Builder::pageTemplate('home.php', 'Home Page', function ( Location $group ) { $group->repeater( 'List', function ( Repeater $repeater ) { $repeater->text('Label' ); $repeater->text('Value' ); } )->onValue( function ( $value ) { // if the value is FALSE or NULL it means the field has never been updated // we don't want to change fields that have already been edited if ( !$value ) { // create a bi dimensional array return array_map( function ( $label ) { return [ '_acf_field_group_home_page_fields_list_label' => $label, '_acf_field_group_home_page_fields_list_value' => '', ]; }, ['First Label', 'Second Label', 'Third Label'] ); } return $value; } ); // end of repeater List } );
有关 ACF 过滤器的更多信息,请参阅 Advanced Custom Fields 的过滤器文档。
原始参数
如果您想设置包中不可用的 ACF 参数,您可以在字段上使用 param
方法。想象一下,如果您想使用 WPML 与 ACF 字段一起使用,您可以将 wpml_cf_preferences
设置为一个值,如下所示
// ... function ( Group $group ) { $group->text('Sub Title')->param('wpml_cf_preferences', 2 ); // This field will be translated $group->text('Sub Title')->params( ['wpml_cf_preferences' => 2 ] ); // you can pass array of parameters with `params` method } ) // ...
默认配置
为所有字段配置默认配置可能很冗长且令人望而却步,因此您也可以在 Builder
上使用 config
方法,该方法接受一个数组作为参数。
Builder 拥有一系列新方法和常量,以帮助您配置每个字段
Builder::config( [ // define a config value for all fields, like using `param` method Builder::all => [ 'wpml_cf_preferences' => 2, ], // define config for a field using the building methods Builder::text => Builder::text()->placeholder('Put some content here'), // methods can be chained Builder::wysiwyg => Builder::wysiwyg()->visualOnly()->basicToolbar()->required(), // raw parameters works too Builder::email => Builder::email()->param('wpml_cf_preferences', 0), // you can also pass the field type string as key 'url' => Builder::url()->placeholder('https://...'), // or a configuration array as value Builder::file => [ 'return_format' => 'id' ], // you can set your Google Map api key here Builder::googleMap => Builder::googleMap()->api('your_api_key_here', 'your_client_ID_here'), // works with repeater, group, location, flexible and layout too Builder::repeater => Builder::repeater()->max( 10 )->param( 'wpml_cf_preferences', 0 ), ] );
必须在构建字段之前设置默认配置,因为在调用 build
方法时,配置数组将被合并。
API 文档
WP ACF Builder 为每个实例提供了流畅的 API。
- Builder
- 子字段
- 灵活内容
- 组
- 布局组
- 位置组
- 重复组
- 抽象字段
- 手风琴字段
- 布尔字段
- 按钮组字段
- 复选框字段
- 颜色字段
- 日期字段
- 日期时间字段
- 电子邮件字段
- 文件字段
- 画廊字段
- 谷歌地图字段
- 图片字段
- 链接字段
- 信息字段
- 数字字段
- 嵌入字段
- 页面链接字段
- 密码字段
- 帖子对象字段
- 单选字段
- 范围字段
- 关系字段
- 选择字段
- 标签字段
- 分类字段
- 文本区域字段
- 文本字段
- 时间字段
- 用户字段
- 所见即所得字段
- 通用方法
Builder
Builder::build( function () { } ); Builder::namespace( 'templates', function () { } ); Builder::fieldsGroup( 'Group label', function ( Group $group ) { } ); Builder::repeaterGroup( 'Repeater label', function ( Repeater $repeater ) { } ); Builder::flexibleContent( 'Flexible Content label', function ( Flexible $flexible ) { } ); Builder::locationGroup( 'Group Location label', function ( Location $location ) { } ); Builder::postType( 'Location Post Type', function ( Location $location ) { } ); Builder::pageTemplate( 'Location Page Template', function ( Location $location ) { } ); Builder::optionsPage( 'Location Options Page', function ( Location $location ) { } );
子字段
类 Group
、Location
、Layout
和 Repeater
使用 Subfields
特性,该特性提供了创建字段的方法
$group->addField( $field ); // instance of Field $group->prependFields( $fields ); // array of Field instances $group->appendFields( $fields ); // array of Field instances $group->text( 'Label', 'name', 'key' ); $group->textarea( 'Label', 'name', 'key' ); $group->wysiwyg( 'Label', 'name', 'key' ); $group->number( 'Label', 'name', 'key' ); $group->email( 'Label', 'name', 'key' ); $group->url( 'Label', 'name', 'key' ); $group->boolean( 'Label', 'name', 'key' ); $group->pageLink( 'Label', 'name', 'key' ); $group->postObject( 'Label', 'name', 'key' ); $group->file( 'Label', 'name', 'key' ); $group->image( 'Label', 'name', 'key' ); $group->gallery( 'Label', 'name', 'key' ); $group->select( 'Label', 'name', 'key' ); $group->checkbox( 'Label', 'name', 'key' ); $group->user( 'Label', 'name', 'key' ); $group->password( 'Label', 'name', 'key' ); $group->taxonomy( 'Label', 'name', 'key' ); $group->relationship( 'Label', 'name', 'key' ); $group->oEmbed( 'Label', 'name', 'key' ); $group->googleMap( 'Label', 'name', 'key' ); $group->link( 'Label', 'name', 'key' ); $group->date( 'Label', 'name', 'key' ); $group->time( 'Label', 'name', 'key' ); $group->dateTime( 'Label', 'name', 'key' ); $group->buttonGroup( 'Label', 'name', 'key' ); $group->color( 'Label', 'name', 'key' ); $group->range( 'Label', 'name', 'key' ); $group->message( 'Label', 'name', 'key' ); $group->tab( 'Label', 'key' ); $group->accordion( 'Label', 'key' ); $group->group( 'Label', function ( Group $group ) { }, 'name', 'key' ); $group->repeater( 'Label', function ( Repeater $repeater ) { }, 'name', 'key' ); $group->flexible( 'Label', function ( Flexible $flexible ) { }, 'name', 'key' );
灵活内容
$flexible->onLayoutTitle( function () { ... } ); // check ACF documentation about Flexible Content title filter $flexible->layout('Layout Label', function ( Layout $layout ) { ... } ); $flexible->addLayout( $layout ); // instance of class Layout $flexible->button('Add a layout'); $flexible->min(3); // default to 0 $flexible->max(9); // default to 0 (infinity)
组
$group->layout('block'); // block | table | row $group->blockLayout(); $group->tableLayout(); $group->rowLayout();
布局组
$layout->layout('block'); // block | table | row $layout->blockLayout(); $layout->tableLayout(); $layout->rowLayout();
位置组
$location->showIf('page_template', '=', 'home.php', 'and'); $location->andShowIf('page_template', '=', 'home.php'); $location->orShowIf('page_template', '=', 'home.php'); $location->priorityOrder(); $location->position('normal'); // side | acf_after_title | normal $location->positionOnSide(); $location->positionAfterTitle(); $location->positionBelow(); $location->style(); // default | seamless $location->styleWithBox(); $location->styleWithoutBox(); $location->labelsOn('top'); // top | left $location->labelsAboveFields(); $location->labelsBesideFields(); $location->instructionsBelow('label'); // label | field $location->instructionsBelowLabels(); $location->instructionsBelowFields(); $location->hideOnScreen('revisions'); // hide listed elements $location->hideAll('the_content', 'featured_image'); // list exceptions on parameters $location->enable(); // pass `false` to disable $location->disable(); $location->showInApi(); // pass `false` to hide in API $location->hideInApi(); $location->description('Group description'); $location->page(2434, 'and'); $location->pageParent(4244, 'and'); $location->pageTemplate('home.php', 'and'); $location->post(2424, 'and'); $location->postType('post', 'and'); $location->postCategory('foobar', 'and'); $location->postTaxonomy('categories', 'and'); $location->postFormat('standard', 'and'); $location->postStatus('publish', 'and'); $location->menu('all', 'and'); $location->menuItem('all', 'and'); $location->widget('all', 'and'); $location->userRole('administrator', 'and'); $location->optionsPage('acf-options-common', 'and'); $location->build();
重复组
$repeater->layout('block'); // block | table | row $repeater->blockLayout(); $repeater->tableLayout(); $repeater->rowLayout(); $repeater->button('Add a row'); $repeater->min(3); // default to 0 $repeater->max(9); // default to 0 (infinity)
抽象字段
每个字段都继承自提供通用 API 的 AbstractField
类。以下示例适用于所有字段
$group->text(/* ... */)->param('key', 'value'); $group->text(/* ... */)->params( [ 'key' => 'value', 'foo' => 'bar' ] ); $group->text(/* ... */)->default('Here is a default value'); $group->text(/* ... */)->instructions('Here is an instruction message'); $group->text(/* ... */)->required(); // pass `false` to not required $group->text(/* ... */)->notRequired(); $group->text(/* ... */)->wrapper(460, '.foo .bar', 'random-id'); $group->text(/* ... */)->wrapperWidth(460); $group->text(/* ... */)->wrapperClass('.foo .bar'); $group->text(/* ... */)->wrapperId('random-id'); $group->text(/* ... */)->showIf('key', '=', 'value', 'and'); $group->text(/* ... */)->andShowIf('key', '=', 'value'); $group->text(/* ... */)->orShowIf('key', '=', 'value'); $group->text(/* ... */)->onLoad( function ( $field ) { ... } ); $group->text(/* ... */)->onValue( function ( $field ) { ... } ); $group->text(/* ... */)->onUpdate( function ( $field ) { ... } ); $group->text(/* ... */)->onFormat( function ( $field ) { ... } ); $group->text(/* ... */)->toArray();
手风琴字段
$group->accordion(/* ... */)->open(); // pass `false` to close $group->accordion(/* ... */)->close(); $group->accordion(/* ... */)->multiExpand(); // pass `false` to do not multi expand $group->accordion(/* ... */)->dontMultiExpand();
布尔字段
$group->boolean(/* ... */)->message('Here is an informative message');
按钮组字段
$group->buttonGroup(/* ... */)->choices( ['red' => 'Rouge', 'green' => 'Vert', 'blue' => 'Bleu'] ); $group->buttonGroup(/* ... */)->nullable(); // pass `false` to set not nullable $group->buttonGroup(/* ... */)->notNullable(); $group->buttonGroup(/* ... */)->layout('vertical'); // vertical | horizontal $group->buttonGroup(/* ... */)->vertical(); $group->buttonGroup(/* ... */)->horizontal();
复选框字段
$group->checkbox(/* ... */)->choices( ['red' => 'Rouge', 'green' => 'Vert', 'blue' => 'Bleu'] ); $group->checkbox(/* ... */)->allowCustom(); // pass `false` to disallow custom $group->checkbox(/* ... */)->disallowCustom(); $group->checkbox(/* ... */)->saveCustom(); // pass `false` to not save custom $group->checkbox(/* ... */)->dontSaveCustom(); $group->checkbox(/* ... */)->layout('vertical'); // vertical | horizontal $group->checkbox(/* ... */)->vertical(); $group->checkbox(/* ... */)->horizontal();
颜色字段
$group->color(/* ... */)->enableOpacity(); // pass `false` to disable opacity $group->color(/* ... */)->disableOpacity(); $group->color(/* ... */)->return('string'); // array | string $group->color(/* ... */)->returnArray(); $group->color(/* ... */)->returnString();
日期字段
$group->date(/* ... */)->display('g:i a'); $group->date(/* ... */)->return('Y-m-d'); $group->date(/* ... */)->weekStartsOn(0); // value must be between 0 (sunday) and 6 (saturday) $group->date(/* ... */)->weekStartsOnMonday(); $group->date(/* ... */)->weekStartsOnTuesday(); $group->date(/* ... */)->weekStartsOnWednesday(); $group->date(/* ... */)->weekStartsOnThursday(); $group->date(/* ... */)->weekStartsOnFriday(); $group->date(/* ... */)->weekStartsOnSaturday(); $group->date(/* ... */)->weekStartsOnSunday();
日期时间字段
$group->datetime(/* ... */)->display('g:i a'); $group->datetime(/* ... */)->return('Y-m-d H:i:s'); $group->datetime(/* ... */)->weekStartsOn(0); // value must be between 0 (sunday) and 6 (saturday) $group->datetime(/* ... */)->weekStartsOnMonday(); $group->datetime(/* ... */)->weekStartsOnTuesday(); $group->datetime(/* ... */)->weekStartsOnWednesday(); $group->datetime(/* ... */)->weekStartsOnThursday(); $group->datetime(/* ... */)->weekStartsOnFriday(); $group->datetime(/* ... */)->weekStartsOnSaturday(); $group->datetime(/* ... */)->weekStartsOnSunday();
电子邮件字段
$group->email(/* ... */)->placeholder('This is placeholder'); $group->email(/* ... */)->append('Append text'); $group->email(/* ... */)->prepend('Prepend text');
文件字段
$group->file(/* ... */)->previewSize('thumbnail'); $group->file(/* ... */)->previewThumbnail(); $group->file(/* ... */)->previewMedium(); $group->file(/* ... */)->previewMediumLarge(); $group->file(/* ... */)->previewLarge(); $group->file(/* ... */)->previewFullSize(); $group->file(/* ... */)->restrictLibrary('all'); // all | uploadedTo $group->file(/* ... */)->showAll(); $group->file(/* ... */)->onlyUploaded(); $group->file(/* ... */)->mimeTypes('pdf'); $group->file(/* ... */)->minSize(0); $group->file(/* ... */)->maxSize(1000); $group->file(/* ... */)->size(0, 1000); $group->file(/* ... */)->return('array'); // array | url $group->file(/* ... */)->returnObject(); $group->file(/* ... */)->returnArray(); $group->file(/* ... */)->returnUrl();
画廊字段
$group->gallery(/* ... */)->minWidth(25); $group->gallery(/* ... */)->maxWidth(1920); $group->gallery(/* ... */)->width(25, 1920); $group->gallery(/* ... */)->minHeight(25); $group->gallery(/* ... */)->maxHeight(960); $group->gallery(/* ... */)->height(25, 960); $group->gallery(/* ... */)->previewSize('thumbnail'); $group->gallery(/* ... */)->previewThumbnail(); $group->gallery(/* ... */)->previewMedium(); $group->gallery(/* ... */)->previewMediumLarge(); $group->gallery(/* ... */)->previewLarge(); $group->gallery(/* ... */)->previewFullSize(); $group->gallery(/* ... */)->restrictLibrary('all'); // all | uploadedTo $group->gallery(/* ... */)->showAll(); $group->gallery(/* ... */)->onlyUploaded(); $group->gallery(/* ... */)->mimeTypes('jpeg', 'png'); $group->gallery(/* ... */)->minSize(0); $group->gallery(/* ... */)->maxSize(1000); $group->gallery(/* ... */)->size(0, 1000); $group->gallery(/* ... */)->return('array'); // array | url $group->gallery(/* ... */)->returnObject(); $group->gallery(/* ... */)->returnArray(); $group->gallery(/* ... */)->returnUrl(); $group->gallery(/* ... */)->min(3); // default to 0 $group->gallery(/* ... */)->max(9); // default to 0 (infinity) $group->gallery(/* ... */)->insertNew('append'); // append | prepend $group->gallery(/* ... */)->insertAppend(); $group->gallery(/* ... */)->insertPrepend();
谷歌地图字段
$group->googleMap(/* ... */)->latitude(-37.81411); $group->googleMap(/* ... */)->longitude(144.96328); $group->googleMap(/* ... */)->coordinates(-37.81411, 144.96328); $group->googleMap(/* ... */)->zoom(14); $group->googleMap(/* ... */)->height(400); // set your Google Map api key and client ID here. Works for all GoogleMapField, you can set it globally via the config $group->googleMap(/* ... */)->api("your_api_key", "your_client_id");
图片字段
$group->image(/* ... */)->minWidth(25); $group->image(/* ... */)->maxWidth(1920); $group->image(/* ... */)->width(25, 1920); $group->image(/* ... */)->minHeight(25); $group->image(/* ... */)->maxHeight(960); $group->image(/* ... */)->height(25, 960); $group->image(/* ... */)->previewSize('thumbnail'); $group->image(/* ... */)->previewThumbnail(); $group->image(/* ... */)->previewMedium(); $group->image(/* ... */)->previewMediumLarge(); $group->image(/* ... */)->previewLarge(); $group->image(/* ... */)->previewFullSize(); $group->image(/* ... */)->restrictLibrary('all'); // all | uploadedTo $group->image(/* ... */)->showAll(); $group->image(/* ... */)->onlyUploaded(); $group->image(/* ... */)->mimeTypes('jpeg', 'png'); $group->image(/* ... */)->minSize(0); $group->image(/* ... */)->maxSize(1000); $group->image(/* ... */)->size(0, 1000); $group->image(/* ... */)->return('array'); // array | url $group->image(/* ... */)->returnObject(); $group->image(/* ... */)->returnArray(); $group->image(/* ... */)->returnUrl();
链接字段
$group->postObject(/* ... */)->return('array'); // array | url $group->postObject(/* ... */)->returnArray(); $group->postObject(/* ... */)->returnUrl();
信息字段
$group->message(/* ... */)->message('Here is an informative message'); $group->message(/* ... */)->append('Append text'); $group->message(/* ... */)->prepend('Prepend text'); $group->message(/* ... */)->escapeHtml(); // pass `false` to not escape HTML $group->message(/* ... */)->dontEscapeHtml(); $group->message(/* ... */)->newLines('wpautop'); // wpautop | br | '' (empty string) $group->message(/* ... */)->paragraphs(); $group->message(/* ... */)->breakLines(); $group->message(/* ... */)->noFormatting();
数字字段
$group->number(/* ... */)->placeholder('This is placeholder'); $group->number(/* ... */)->append('Append text'); $group->number(/* ... */)->prepend('Prepend text'); $group->number(/* ... */)->min(3); // default to 0 $group->number(/* ... */)->max(9); // default to 0 (infinity) $group->number(/* ... */)->step(3); // default to 0
嵌入字段
$group->oEmbed(/* ... */)->width(400); $group->oEmbed(/* ... */)->height(800); $group->oEmbed(/* ... */)->dimension(400, 800);
页面链接字段
$group->pageLink(/* ... */)->taxonomy( 'categories' ); $group->pageLink(/* ... */)->postType( 'posts' ); $group->pageLink(/* ... */)->nullable(); // pass `false` to set not nullable $group->pageLink(/* ... */)->notNullable(); $group->pageLink(/* ... */)->multiple(); // pass `false` to set not multiple $group->pageLink(/* ... */)->notMultiple();
密码字段
$group->password(/* ... */)->placeholder('This is placeholder'); $group->password(/* ... */)->append('Append text'); $group->password(/* ... */)->prepend('Prepend text');
帖子对象字段
$group->postObject(/* ... */)->taxonomies( ['categories'] ); $group->postObject(/* ... */)->postsType( ['posts'] ); $group->postObject(/* ... */)->return('object'); // object | id $group->postObject(/* ... */)->returnObject(); $group->postObject(/* ... */)->returnId(); $group->postObject(/* ... */)->onQuery( function () { ... } ); // check ACF documentation about Post Object field filters $group->postObject(/* ... */)->onResult( function () { ... } );
单选字段
$group->radio(/* ... */)->choices( ['red' => 'Rouge', 'green' => 'Vert', 'blue' => 'Bleu'] ); $group->radio(/* ... */)->allowOtherChoice(); // pass `false` to set disallow other choice $group->radio(/* ... */)->disallowOtherChoice(); $group->radio(/* ... */)->saveOtherChoice(); // pass `false` to set do not save other choice $group->radio(/* ... */)->dontSaveOtherChoice(); $group->radio(/* ... */)->layout('vertical'); // vertical | horizontal $group->radio(/* ... */)->vertical(); $group->radio(/* ... */)->horizontal();
范围字段
$group->range(/* ... */)->append('Append text'); $group->range(/* ... */)->prepend('Prepend text'); $group->range(/* ... */)->min(3); // default to 0 $group->range(/* ... */)->max(9); // default to 0 (infinity) $group->range(/* ... */)->step(3); // default to 0
关系字段
$group->relationship(/* ... */)->taxonomies( ['categories'] ); $group->relationship(/* ... */)->postsType( ['posts'] ); $group->relationship(/* ... */)->filters( ['search' => true, 'post_type' => false, 'taxonomy' => false] ); $group->relationship(/* ... */)->filterOnSearch(); // pass `false` to set not filter on search $group->relationship(/* ... */)->dontFilterOnSearch(); $group->relationship(/* ... */)->filterByPostType(); // pass `false` to set not filter by post type $group->relationship(/* ... */)->dontFilterByPostType(); $group->relationship(/* ... */)->filterByTaxonomy(); // pass `false` to set not filter by taxonomy $group->relationship(/* ... */)->dontFilterByTaxonomy(); $group->relationship(/* ... */)->return('object'); // object | id $group->relationship(/* ... */)->returnObject(); $group->relationship(/* ... */)->returnId(); $group->relationship(/* ... */)->onQuery( function () { ... } ); // check ACF documentation about relationship field filters $group->relationship(/* ... */)->onResult( function () { ... } ); $group->relationship(/* ... */)->min(3); // default to 0 $group->relationship(/* ... */)->max(9); // default to 0 (infinity)
选择字段
$group->select(/* ... */)->choices( ['red' => 'Rouge', 'green' => 'Vert', 'blue' => 'Bleu'] ); $group->select(/* ... */)->placeholder('This is placeholder'); $group->select(/* ... */)->nullable(); // pass `false` to set not nullable $group->select(/* ... */)->notNullable(); $group->select(/* ... */)->multiple(); // pass `false` to set not multiple $group->select(/* ... */)->notMultiple(); $group->select(/* ... */)->ui('default'); // default | select2 $group->select(/* ... */)->defaultUi(); $group->select(/* ... */)->select2Ui(); $group->select(/* ... */)->useAjax(); // pass `false` to not use ajax $group->select(/* ... */)->dontUseAjax();
标签字段
$group->tab(/* ... */)->placeholder('top'); // top | left $group->tab(/* ... */)->topAligned(); $group->tab(/* ... */)->leftAligned();
分类字段
$group->taxonomy(/* ... */)->which('category'); $group->taxonomy(/* ... */)->appearance('checkbox'); // checkbox || multi_select || radio || select $group->taxonomy(/* ... */)->asCheckbox(); $group->taxonomy(/* ... */)->asMultiSelect(); $group->taxonomy(/* ... */)->asRadio(); $group->taxonomy(/* ... */)->asSelect(); $group->taxonomy(/* ... */)->saveTerms(); // pass `false` to not save terms $group->taxonomy(/* ... */)->dontSaveTerms(); $group->taxonomy(/* ... */)->return(); $group->taxonomy(/* ... */)->returnObject(); $group->taxonomy(/* ... */)->returnId(); $group->taxonomy(/* ... */)->allowAddTerm(); // pass `false` to disallow add term $group->taxonomy(/* ... */)->disallowAddTerm(); $group->taxonomy(/* ... */)->onQuery( function () { ... } ); // check ACF documentation about taxonomy field filters $group->taxonomy(/* ... */)->onResult( function () { ... } );
文本区域字段
$group->textarea(/* ... */)->placeholder('This is placeholder'); $group->textarea(/* ... */)->append('Append text'); $group->textarea(/* ... */)->prepend('Prepend text'); $group->textarea(/* ... */)->readOnly(); // pass `false` to set not read only $group->textarea(/* ... */)->notReadOnly(); $group->textarea(/* ... */)->disable(); // pass `false` to enable $group->textarea(/* ... */)->enable(); $group->textarea(/* ... */)->maxLength(50); $group->textarea(/* ... */)->rows(10); $group->textarea(/* ... */)->rows(10); $group->textarea(/* ... */)->newLines('wpautop'); // wpautop | br | '' (empty string) $group->textarea(/* ... */)->paragraphs(); $group->textarea(/* ... */)->breakLines(); $group->textarea(/* ... */)->noFormatting();
文本字段
$group->text(/* ... */)->placeholder('This is placeholder'); $group->text(/* ... */)->append('Append text'); $group->text(/* ... */)->prepend('Prepend text'); $group->text(/* ... */)->readOnly(); // pass `false` to set not read only $group->text(/* ... */)->notReadOnly(); $group->text(/* ... */)->disable(); // pass `false` to enable $group->text(/* ... */)->enable(); $group->text(/* ... */)->maxLength(50);
时间字段
$group->time(/* ... */)->display('g:i a'); $group->time(/* ... */)->return('Y-m-d H:i:s');
URL 字段
$group->url(/* ... */)->placeholder('This is placeholder');
用户字段
$group->user(/* ... */)->nullable(); // pass `false` to set not nullable $group->user(/* ... */)->notNullable(); $group->user(/* ... */)->multiple(); // pass `false` to set not multiple $group->user(/* ... */)->notMultiple(); $group->user(/* ... */)->roles(['administrator', 'editor']); // array of roles
所见即所得字段
$group->wysiwyg(/* ... */)->tabs('all'); // all | visual | text $group->wysiwyg(/* ... */)->allTabs(); $group->wysiwyg(/* ... */)->visualOnly(); $group->wysiwyg(/* ... */)->textOnly(); $group->wysiwyg(/* ... */)->toolbar('full'); // full | basic $group->wysiwyg(/* ... */)->fullToolbar(); $group->wysiwyg(/* ... */)->basicToolbar(); $group->wysiwyg(/* ... */)->showMediaButton(); // pass `false` to hide media button $group->wysiwyg(/* ... */)->hideMediaButton();
通用方法
字段和组都可以使用这些方法
$field->toArray(); $field->toJson(); $field->dd();
要求
PHP 8.0 或更高版本