sackrin/fusion

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

v1.0.0 2018-02-16 11:58 UTC

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