callum-ne6 / acf
Corcel的Advanced Custom Field (ACF)插件
Requires
- php: >=7.2
- jgrossi/corcel: ^5.0
Requires (Dev)
- phpunit/phpunit: ^9.0
README
轻松获取Corcel中所有Advanced Custom Fields (ACF)字段。
此Corcel插件允许您使用Laravel框架(Laravel框架)相同的语法从ACF插件(ACF插件)获取WordPress自定义字段,使用Eloquent模型和集合来改进开发,使用WordPress后端与任何PHP应用程序。
有关Corcel如何工作的更多信息,请访问存储库。
安装
安装Corcel的ACF插件很简单
composer require corcel/acf
此插件需要Corcel,但不用担心,如果它缺失,它也会被安装。
使用方法
这是一个开发版本,所以使用方法可能会进一步更改。此插件期望的行为是允许这样做
$post = Post::find(1); echo $post->acf->url; // returns the url custom field created using ACF
性能
当使用类似$post->acf->url
的东西时,插件必须执行一些额外的SQL查询以根据ACF方法获取字段类型。因此,我们创建了一种方法来获取它,而不必执行这些额外的查询。您只需通知插件要获取的帖子类型,作为一个函数
// Extra queries way echo $post->acf->author_username; // it's a User field // Without extra queries echo $post->acf->user('author_username');
PS:方法名称应该写成
camelCase()
格式。例如,对于字段类型date_picker
,您应该编写$post->acf->datePicker('fieldName')
。插件会为您将camelCase
转换为snake_case
。
想法
使用默认的$post->meta->field_name
在Corcel中返回wp_postmeta
表中的meta_value
列的值。它可以是字符串、整数,甚至是序列化数组。问题是,当您使用ACF时,该值可能比这更多。例如,如果您有一个整数,它可以是帖子ID、用户ID,甚至是帖子ID数组。
ACF必须执行2(两个)SQL查询以找出字段类型,因此根据类型,它与meta_value
有不同的行为。例如,如果值是45
且帖子类型是post_object
,则值45
是ID为45
的帖子。因此,在这种情况下,Corcel应返回一个Corcel\Post
实例,而不仅仅是整数。
首先,ACF从wp_postmeta
表中的meta_value
获取,其中meta_key
类似于_field_name
,帖子ID是您想要获取自定义字段的帖子ID。返回的值是字段键,看起来像这样field_57f421a2b81bd
。使用此键,它从wp_posts
中获取相应的帖子,其中post_name = 'field_57f421a2b81bd'
。使用结果,它获取post_content
值,一个序列化数组,反序列化它并获取type
键上的内容。这是字段类型。根据ACF(以及此插件)执行正确的操作。
此插件与Corcel\Acf\Field\BasicField
抽象类中的基本逻辑一起工作,该类具有许多有用的功能,可以返回字段键
、值
等。Corcel\Acf\FieldFactory
负责根据字段类型返回正确的字段实例,因此,如果字段类型是post_object
,它将返回一个Corcel\Acf\Field\PostObject
的实例,并在get()
方法中返回一个Corcel\Post
的实例。
缺少的内容
首先,我们应该创建字段类和测试用例。然后,我们需要设置Corcel如何与corcel/acf
插件一起工作,返回格式为$post->meta->field
或$post->acf->field
的自定义字段值,具有不同的行为(已完成)。
- 为
Repeater
字段创建更多单元测试; - 实现
Flexible Content
字段并附带单元测试(已完成); - 提高性能。目前,该插件为每个字段执行一个SQL查询。这个目标是使用
whereIn()
子句来改进这一点。
一些字段仍然缺失(请查看下表并贡献)。
字段
字段 | 状态 | 开发者 | 返回值 |
---|---|---|---|
文本 | ok | @jgrossi | 字符串 |
文本区域 | ok | @jgrossi | 字符串 |
数字 | ok | @jgrossi | 数字 |
电子邮件 | ok | @jgrossi | 字符串 |
URL | ok | @jgrossi | 字符串 |
密码 | ok | @jgrossi | 字符串 |
所见即所得(编辑器) | ok | @jgrossi | 字符串 |
oEmbed | ok | @jgrossi | 字符串 |
图片 | ok | @jgrossi | Corcel\Acf\Field\Image |
文件 | ok | @jgrossi | Corcel\Acf\Field\File |
相册 | ok | @jgrossi | Corcel\Acf\Field\Gallery |
选择 | ok | @jgrossi | 字符串 或数组 |
复选框 | ok | @jgrossi | 字符串 或数组 |
单选按钮 | ok | @jgrossi | 字符串 |
是/否 | ok | @jgrossi | 布尔值 |
帖子对象 | ok | @jgrossi | Corcel\Post |
页面链接 | ok | @jgrossi | 字符串 |
关系 | ok | @jgrossi | Corcel\Post 或Post 的Collection |
分类法 | ok | @jgrossi | Corcel\Term 或Term 的Collection |
用户 | ok | @jgrossi | Corcel\User |
谷歌地图 | 缺失 | ||
日期选择器 | ok | @jgrossi | Carbon\Carbon |
日期时间选择器 | ok | @jgrossi | Carbon\Carbon |
时间选择器 | ok | @jgrossi | Carbon\Carbon |
颜色选择器 | ok | @jgrossi | 字符串 |
重复 | ok | @jgrossi | 字段的Collection |
灵活内容 | ok | @marcoboom | 集合 |
贡献
欢迎所有贡献。在提交Pull Request之前,请查看以下指南
- 在基于
develop
分支的新git分支中进行您的更改:git checkout -b my-fix-branch develop
; - 创建您的补丁/功能,包括适当的测试用例。测试是必要的,以确保您所做的工作是有效的,并且没有破坏插件中的任何内容;
- 运行单元测试并确保所有测试都通过。请在提交您的PR时粘贴
phpunit
命令的结果,以方便审批工作; - 在GitHub上,向
corcel/acf:develop
发送pull request,始终。不要向我们的master
分支发送PR!我们鼓励您使用git flow
(https://github.com/petervanderdoes/gitflow-avh)工作流程来使您的生活更加轻松。这不是必需的,但它也将对您的职业发展有所帮助; - 确保您的代码遵循
PSR-2
约定(http://www.php-fig.org/psr/psr-2/)。
运行测试
要运行phpunit测试,执行phpunit
(如果您有一个全局的PHPUnit可执行文件)或尝试以下命令
./vendor/bin/phpunit
您应将database.sql
文件导入到本地环境中的数据库中,以便测试运行。只需解压缩tests/config/database.sql.zip
文件,并在tests/config/bootstrap.php
中设置数据库、用户和密码字段。
如果您想访问WordPress管理面板,请使用用户名
admin
和密码123456
。
许可协议
MIT 许可协议 © Junior Grossi