sackrin / acf-fusion
v0.2.2
2017-11-01 20:13 UTC
Requires
- php: >=5.6.4
- anahkiasen/underscore-php: 2.0.0
README
请注意!此项目已不再维护,并已迁移到 https://github.com/sackrin/fusion
该项目旨在为流行的 WordPress 高级自定义字段插件提供标准编程接口。无需使用图形前端或 acf-json 文件即可通过编程方式创建和管理字段组。
请注意,此库仅适用于使用 fusion builder 创建的字段组。理论上,与 ACF 字段组一起使用不应有任何问题,但原生字段组的输出是不可预测的。建议使用 fusion builder 创建所有字段组。
安装 ACF Fusion
composer require sackrin/acf-fusion
注册字段组
use ACFFusion\Builder; use ACFFusion\FieldGroup; use ACFFusion\Field\Tab; use ACFFusion\Field\Group; use ACFFusion\Field\Text; use ACFFusion\Field\Select; use ACFFusion\Field\Repeater; use ACFFusion\Field\DatePicker; function fusion_register() { // Create a new builder instance and populate with field group fields // It may be a good idea to either store this instance somewhere or create a function to access // your builder instance later. You will need it to access and persist field values $builder = (new Builder()) ->addFieldGroup((new FieldGroup('example_settings', 'Settings')) // Add that we want these fields to appear on the page post type ->addLocation('post_type', 'page') // Add various fields, tabs etc ->addField((new Tab('profile', 'PROFILE DETAILS'))) ->addField((new Select('profile_title', 'Title')) ->setChoices([ 'mr' => 'Mr', 'mrs' => 'Mrs', 'ms' => 'Ms' ]) ->setDefault('mr') ->setWrapper(20) ) ->addField((new Text('profile_first_name', 'First Name')) ->setPlaceholder('Johnny') ->setWrapper(40) ) ->addField((new Text('profile_surname', 'Surname')) ->setPlaceholder('Acfseed') ->setWrapper(40) ) ->addField((new Group('foroffice', 'Office Use Only')) // Repeaters and groups allow for fields to be added directly against them ->addField((new DatePicker('signedup_on', 'Signed Up Date')) ->setWrapper(50)) ->addField((new Text('officer_name', 'Officer Name')) ->setDefault('') ->setWrapper(50)) ) ->addField((new Repeater('profile_emails', 'Email Addresses')) ->addField((new Text('address', 'Email Address')) ->setPlaceholder('') ->setWrapper(50) ) ->addField((new Text('label', 'Email Label')) ->setPlaceholder('') ->setWrapper(50) ) ) ); // Call the acf function to register the field group acf_add_local_field_group($builder->toArray()); } add_action('init', 'fusion_register');
创建字段组管理器
use ACFFusion\Manager; // The manager is used to interact with the builder // It gets and sets fields for post objects etc $manager = (new Manager($post_id, $builder))->load();
从字段组获取字段
对于非嵌套字段
$value = $manager->getField('profile_first_name', 'Some Default Value');
对于嵌套字段,您使用点表示法
$value = $manager->getField('foroffice.signedup_on', 'Some Default Value');
对于重复器内的字段,您使用点表示法与索引值
$value = $manager->getField('profile_emails.0.address', 'Some Default Value');
检索字段组所有当前值
使用字段名称检索所有值
$values = $manager->dumpNames();
使用字段键检索所有值
$values = $manager->dumpKeys();
设置字段字段组
设置字段的路径规则与获取相同,包括点表示法
$manager->setField('profile_first_name', 'A new name');
请注意:设置字段不会更新数据库。您可以在不持久化到数据库的情况下设置和交互字段。如果您想将值注入到文章中以进行计算等,这将非常有用。
保存字段组值
$manager->save();
可用字段
// Standard fields
new ACFFusion\Field\ButtonGroup();
new ACFFusion\Field\Checkbox();
new ACFFusion\Field\ColorPicker();
new ACFFusion\Field\DatePicker();
new ACFFusion\Field\DateTimePicker();
new ACFFusion\Field\Email();
new ACFFusion\Field\File();
new ACFFusion\Field\Gallery();
new ACFFusion\Field\GoogleMap();
new ACFFusion\Field\Image();
new ACFFusion\Field\Message();
new ACFFusion\Field\Number();
new ACFFusion\Field\oEmbed();
new ACFFusion\Field\PageLink();
new ACFFusion\Field\Password();
new ACFFusion\Field\PostObject();
new ACFFusion\Field\Radio();
new ACFFusion\Field\Range();
new ACFFusion\Field\Relationship();
new ACFFusion\Field\Select();
new ACFFusion\Field\Tab();
new ACFFusion\Field\Taxonomy();
new ACFFusion\Field\Text();
new ACFFusion\Field\Textarea();
new ACFFusion\Field\TimePicker();
new ACFFusion\Field\User();
new ACFFusion\Field\Wysiwyg();
// Fields with subfields
new ACFFusion\Field\Repeater();
new ACFFusion\Field\Group();