wp4laravel / corcel-acf
Corcel 的 Advanced Custom Field (ACF) 插件
Requires
- php: >=7.2|^8.0.2
- jgrossi/corcel: ^4.0|^5.0|^6.0|^7.0|^8.0
Requires (Dev)
- phpunit/phpunit: ^8.4|^9.0|^10.0|^11.0
This package is not auto-updated.
Last update: 2024-09-20 12:08:55 UTC
README
轻松获取 Corcel 内部所有 Advanced Custom Fields (ACF) 字段。
此 Corcel 插件允许您使用与 Laravel 框架相同的语法(Eloquent)来检索由 ACF 插件创建的 WordPress 自定义字段。您可以使用 Eloquent 模型和集合来改进开发,并使用任何 PHP 应用程序与 WordPress 后端进行交互。
有关 Corcel 如何工作的更多信息,请访问 存储库。
安装
安装 Corcel 的 ACF 插件非常简单
composer require WP4Laravel/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 时,此值可以更多。例如,如果它是整数,则可以是一个 帖子 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 key
,其外观类似于 field_57f421a2b81bd
。使用此键,它从 wp_posts
中检索相应的帖子,其中 post_name = 'field_57f421a2b81bd'
。通过这些结果,它获取 post_content
值,一个序列化数组,反序列化它,并在 type
键上获取内容。这是字段类型。根据 ACF(以及此插件)执行正确的操作。
此插件在 Corcel\Acf\Field\BasicField
抽象类中使用了基本的逻辑,该类具有许多有用的函数来返回 field key
、value
等。负责根据字段类型返回正确字段实例的 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