magnum34/acf_custom

Corcel 的 Advanced Custom Field (ACF) 插件

1.1.1 2019-03-22 17:50 UTC

This package is auto-updated.

Last update: 2024-09-19 21:44:31 UTC


README

Travis Packagist Packagist

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

这个 Corcel 插件允许您使用与 Laravel 框架 相同的语法,通过 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 时,这个值可以比这更多。例如,如果您有一个整数,它可以是帖子 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 keyvalue 等。负责根据字段类型返回正确字段实例的是 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()子句来提高性能。

某些字段仍然缺失(请查看下表并贡献);

字段

贡献

欢迎所有贡献。在提交Pull Request之前,请查看以下指南;

  • develop分支上创建一个新的git分支进行更改:git checkout -b my-fix-branch develop
  • 创建你的补丁/功能,包括适当的测试用例。测试是必要的,以确保你所做的是可行的,并没有破坏插件的其他部分;
  • 运行单元测试,并确保所有测试都通过。请,在提交你的PR时粘贴phpunit命令的结果,以方便审核工作;
  • 在GitHub上,向corcel/acf:develop发送pull request,始终。不要向我们的master分支发送PR!我们鼓励你使用git flowhttps://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 License © Junior Grossi