📜  中继器 acf - PHP (1)

📅  最后修改于: 2023-12-03 14:48:54.418000             🧑  作者: Mango

中继器 acf - PHP

介绍

ACF全称为Advanced Custom Fields,是一款WordPress插件,可以用于创建自定义字段和元数据。它可以让您为每个页面和帖子添加任何自定义字段,以及包括元数据和图像等的任何其他数据。

中继器(Relay)是一种用于构建数据驱动应用程序的框架。relay-compiler-php是一个PHP包,可使开发人员使用Relay和GraphQL构建PHP应用程序。

在本文中,我们将介绍如何将ACF字段用作Relay数据源。

ACF字段作为Relay数据源
步骤1: 安装必要的依赖

首先,需要确认您已在项目中安装了以下依赖项:

    "webonyx/graphql-php": "^14.0",
    "webonyx/graphql-relay": "^1.5"
步骤2: 创建ACF自定义字段

要创建ACF自定义字段,请在WordPress后台导航到 Custom Fields -> Add New,然后输入字段名称和类型。

如果您需要向字段添加元数据,请使用ACF内置的update_field()函数。

    update_field( 'meta_key', 'meta_value', $post_id );
步骤3: 创建GraphQL类型

现在,我们需要使用ACF字段创建GraphQL类型。我们可以使用GraphQL类型构建器,如下所示:

    use GraphQL\Type\Definition\Type;
    use GraphQL\Type\Definition\ObjectType;
    use GraphQLRelay\Relay;

    $nodeDefinitions = Relay::nodeDefinitions(
        function ($globalId) {
            //您的代码
        },
        function ($obj) {
            //您的代码
        }
    );

    $nodeInterface = $nodeDefinitions->nodeInterface;
    $nodeField     = $nodeDefinitions->nodeField;

    $acfTypeFields = [
        'id' => [
            'type'        => Type::id(),
            'description' => 'The globally unique ID for this ACF'
        ],
        'slug' => [
            'type'        => Type::string(),
            'description' => 'The URL friendly slug for this ACF'
        ],
        'metaValue' => [
            'type'        => Type::string(),
            'description' => 'The meta value for this ACF'
        ],
    ];

    $acfType = new ObjectType([
        'name'        => 'ACF',
        'description' => 'An example type for ACFs',
        'fields'      => $acfTypeFields,
        'interfaces'  => [$nodeInterface],
    ]);

此代码片段定义了名称为“ACF”的GraphQL类型,并为其定义了字段。请注意,我们还实现了Relay中的Node接口。

步骤4: 创建Resolver

现在,我们需要创建一个Resolver来返回ACF自定义字段。我们可以使用ACF内置的get_field()函数。

    function acfResolver($root, $args)
    {
        $acfData = [];
        $acfKeys = array_keys($args);

        foreach ($acfKeys as $acfKey) {
            $acfData[$acfKey] = get_field($acfKey, $args['post_id']);
        }

        $acfData = array_filter($acfData);

        return $acfData;
    }

请注意,我们需要传递一个 post_id 参数给 get_field() 函数来检索字段的值。

步骤5: 创建Query

现在,我们需要将自定义字段添加到Relay的GraphQL查询中。

    $queryType = new ObjectType([
            'name'   => 'Query',
            'fields' => [
                'node' => $nodeField,
                'acf'  => [
                    'type'    => $acfType,
                    'args'    => [
                        'post_id' => ['type' => Type::id()]
                    ],
                    'resolve' => 'acfResolver'
                ],
            ],
        ]);

此代码片段定义一个名为“acf”的GraphQL字段,它接受一个名为post_id的参数,并使用刚刚创建的Resolver返回ACF自定义字段。我们还定义了Relay的node字段。

步骤6: 创建Schema

现在,我们需要将 Query 类型添加到GraphQL模式中。

    $schema = new Schema([
            'query'      => $queryType,
            'types'      => [$nodeInterface],
        ]);

这样,我们就可以使用刚刚创建的 ACF 类型并使用其自定义字段查询。

结论

在本文中,我们介绍了如何将ACF字段用作Relay数据源,并创建了一个可以检索自定义字段的GraphQL查询。现在,您可以利用ACF插件的功能来创建更丰富的内容。