odura/corcel-acf

由Odura分叉的Corcel高级自定义字段(ACF)插件

dev-master 2022-08-21 07:39 UTC

This package is auto-updated.

Last update: 2024-09-21 12:13:27 UTC


README

Travis Packagist Packagist

轻松获取Corcel内的所有高级自定义字段(ACF)字段。

此Corcel插件允许您使用与Laravel框架相同的语法通过ACF插件(http://advancedcustomfields.com)检索WordPress自定义字段,从而使用Eloquent模型和集合提高开发效率,使用任何PHP应用程序与WordPress后端。

有关Corcel如何工作的更多信息,请访问存储库

版本兼容性

为了保持与Laravel 9的兼容性

安装

安装Corcel的ACF插件很简单

composer require odura/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抽象类中的基本逻辑一起工作,该类包含许多有用的功能,可以返回字段键等。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