sackrin/fusion
WordPress高级自定义字段的标准接口
v1.0.0
2018-02-16 11:58 UTC
Requires
- php: >=5.6.4
- anahkiasen/underscore-php: 2.0.0
This package is not auto-updated.
Last update: 2024-09-29 05:08:13 UTC
README
本项目旨在提供一个标准编程接口,用于流行的WordPress高级自定义字段插件。字段组可以通过编程方式创建和管理,无需使用图形前端或acf-json文件。
请注意,此库仅与使用fusion builder构建的字段组正确工作。理论上,与ACF字段组一起工作不应有任何问题,但是原生字段组的输出是不可预测的。建议使用fusion builder构建所有字段组。
安装Fusion
composer require sackrin/fusion
注册字段组
use Fusion\Builder; use Fusion\FieldGroup; use Fusion\Field\Tab; use Fusion\Field\Group; use Fusion\Field\Text; use Fusion\Field\Select; use Fusion\Field\Repeater; use Fusion\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 Fusion\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 Fusion\Field\ButtonGroup();
new Fusion\Field\Checkbox();
new Fusion\Field\ColorPicker();
new Fusion\Field\DatePicker();
new Fusion\Field\DateTimePicker();
new Fusion\Field\Email();
new Fusion\Field\File();
new Fusion\Field\Gallery();
new Fusion\Field\GoogleMap();
new Fusion\Field\Image();
new Fusion\Field\Message();
new Fusion\Field\Number();
new Fusion\Field\oEmbed();
new Fusion\Field\PageLink();
new Fusion\Field\Password();
new Fusion\Field\PostObject();
new Fusion\Field\Radio();
new Fusion\Field\Range();
new Fusion\Field\Relationship();
new Fusion\Field\Select();
new Fusion\Field\Tab();
new Fusion\Field\Taxonomy();
new Fusion\Field\Text();
new Fusion\Field\Textarea();
new Fusion\Field\TimePicker();
new Fusion\Field\User();
new Fusion\Field\Wysiwyg();
// Fields with subfields
new Fusion\Field\Repeater();
new Fusion\Field\Group();