corcel / acf
Corcel的ACF插件(高级自定义字段)
Requires
- php: >=7.2
- jgrossi/corcel: ^4.0|^5.0
Requires (Dev)
- phpunit/phpunit: ^8.4|^9.0
README
轻松获取Corcel内所有高级自定义字段(ACF)字段。
此Corcel插件允许您使用与Laravel框架相同的语法(https://laravel.net.cn)来检索由ACF插件(http://advancedcustomfields.com)创建的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
。
想法
在Corcel中使用默认的$post->meta->field_name
返回wp_postmeta
表中的meta_value
列的值。这可能是一个字符串、一个整数,甚至是一个序列化数组。问题是,当您使用ACF时,这个值可以比这更多。例如,如果您有一个整数,它可以是post id
、user id
,甚至是一组posts ids
。
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 key
,看起来像这样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()
子句来改进它;
某些字段仍然缺失(请参阅下表并贡献);
字段
贡献
欢迎所有贡献。在提交拉取请求之前,请查看以下指南
- 在新创建的基于
develop
分支的 git 分支中应用您的更改:git checkout -b my-fix-branch develop
; - 创建您的补丁/功能,包括适当的测试用例。测试是确保您所做的操作正常工作且没有破坏插件中的任何内容所必需的;
- 运行单元测试并确保所有测试都通过。请在提交您的 PR 时粘贴
phpunit
命令的结果,以方便审批工作; - 在 GitHub 中,向
corcel/acf:develop
发送拉取请求,始终。不要向我们的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