sackrin / acf-fusion

此包已被 弃用 并不再维护。作者建议使用 sackrin/fusion 包。

WordPress 高级自定义字段的标准接口

v0.2.2 2017-11-01 20:13 UTC

This package is not auto-updated.

Last update: 2022-02-01 13:10:38 UTC


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();