ncaroyannis/corcel-acf

Corcel 的 Advanced Custom Field (ACF) 插件

dev-master 2024-03-29 07:11 UTC

This package is auto-updated.

Last update: 2024-09-29 08:07:05 UTC


README

Travis Packagist Packagist

轻松获取 Corcel 中的所有 Advanced Custom Fields (ACF) 字段。

此 Corcel 插件允许您使用与 Laravel 框架相同的语法(Laravel Framework),通过 Eloquent 语法获取由 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

想法

使用 Corcel 的默认 $post->meta->field_name 返回 wp_postmeta 表中的 meta_value 列的值。它可以是字符串、整数,甚至序列化数组。问题是,当您使用 ACF 时,此值可能不仅是这些。例如,如果您有一个整数,它可以是 post iduser 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