使用WPGraphQL注册Pod自定义字段

时间:2021-08-26 作者:GrantW

我已经创建了一个名为“Item”的自定义帖子类型,并添加了一个多上传文件/图像/视频字段类型,但我不知道如何使用WPGraphQL注册该自定义字段。下面是我如何向WPGraphQL注册我的CPT的:

  add_filter( \'register_post_type_args\', function( $args, $post_type ) {

    if ( \'item\' === $post_type ) {
      $args[\'show_in_graphql\'] = true;
      $args[\'graphql_single_name\'] = \'item\';
      $args[\'graphql_plural_name\'] = \'items\';
    }

    return $args;

  }, 10, 2 );
有什么建议或者有人能为我指出文档的正确方向吗?在我的搜索中,我得到了不同的答案,但到目前为止还没有任何结果。谢谢

2 个回复
最合适的回答,由SO网友:Scott Kingsley Clark 整理而成

This WPGraphQL recipe 介绍如何使用设置新字段register_graphql_field() (function doc) 但它没有任何关于如何传入图像/文件字段的示例。如果我是为了一个快速的项目而这样做,我只会输出我需要的信息,而不会太复杂/深入到API中。但事实证明。。

如果您想让事情变得更简单,那么有一些好消息可以告诉您——开发Pods 2.8(目前处于测试阶段)为Pods提供了更多的WPGraphQL功能。我能够构建一个完整的Pods Pro WPGraphQL Add-On 它允许您为整个Pod以及该Pod中的所有/单个字段设置GraphQL访问。我特别注意确保关系和文件字段在GraphQL结构中得到很好的表示,您应该查看demo video.

SO网友:GrantW

因此,在进一步挖掘和查看更多文档后,我想出了这个似乎可行的解决方案。我不确定这是否是;“有福的”;是的,但我认为它能在紧要关头完成工作。

注册我的Pods CPT:

  add_filter( \'register_post_type_args\', function( $args, $post_type ) {

    if ( \'item\' === $post_type ) {
      $args[\'show_in_graphql\'] = true;
      $args[\'graphql_single_name\'] = \'item\';
      $args[\'graphql_plural_name\'] = \'items\';
    }

    return $args;

  }, 10, 2 );
添加注册新对象类型的操作(GalleryImage) 并且只返回guid 通过调用register_graphql_object_type. 然后我打电话register_graphql_field 并希望返回list_of galleryImage 对象。我不完全确定的部分是解析器函数获取item pod并返回gallery 领域这是可行的,也是有意义的,但我相信它是可以优化的。

  add_action( \'graphql_register_types\', function() {

    register_graphql_object_type(
      \'GalleryImage\',
      [
        \'description\' => __( \'Gallery Image\' ),
        \'fields\'      => [
          \'guid\'  => [
            \'type\'        => \'String\',
            \'description\' => \'image guid\'
          ]
        ],
      ]
    );

    register_graphql_field(
      \'Item\',
      \'galleryImages\',
      [
        \'description\' => __( \'Return images\' ),
        \'type\' => [ \'list_of\' => \'galleryImage\' ],
        \'resolve\' => function() {
          $images = pods( \'item\', [ \'limit\' => -1 ])->field( \'gallery\' );
          return $images;
        }
      ]
    );
  } );
These docs 真的很有帮助。