1

我在 Wordpress 中使用 GraphQL 作为 API 和这个插件:https ://docs.wpgraphql.com/getting-started/custom-fields-and-meta 我创建了自定义字段,我想使用 where 子句作为布尔属性,但我得到了所有记录,即使是那些不符合我的 where 子句的人

我的查询如下所示:

    query pagesInMenu {
 pages(where: { menu: true }) {
    edges {
      node {
        id
        menu
        title
      }
    }
  }
}

我得到了 menu = false 和 menu = true 的记录......这是通过下面的 PHP 代码添加的自定义字段:

function registerMenu($type) {
    register_graphql_field( $type, 'menu', [
        'type' => 'Boolean',
        'description' => __( 'Is in menu?', 'wp-graphql' ),
        'resolve' => function( $post ) {
            $menu = get_post_meta( $post->ID, 'menu', true );
            return ! empty( $menu ) ? ($menu == "true") : false;
        }
    ] );
}

add_action( 'graphql_register_types', registerMenu('Page') );
add_action( 'graphql_register_types', registerMenu('RootQueryToPageConnectionWhereArgs') );
4

1 回答 1

0

这里有几处不正确:

  1. WordPress 动作:你应该传递一个可调用的(即函数函数),它接受动作本身传递的参数,而不是你想出的任何东西。
  2. GraphQL 连接,其中 args 不应该在字段上有解析器。用户提供一个值,然后 ConnectionResolver 将参数设置为查询,使用graphql_connection_query_args或类似的东西。

这是您提供的基本级别的外观:

function register_menu() {
  register_graphql_field( 
    'Page',
    'isInMenu',
    [
      'type' => 'Boolean',
      'description' => __( 'Is in menu?', 'wp-graphql' ),
      'resolve' => function( $post ) {
          $menu = get_post_meta( $post->ID, 'menu', true );
          return ! empty( $menu );
        }
    ]
  );

  register_graphql_field(
    'RootQueryToPageConnectionWhereArgs'
    'showInMenu'
    [
      'type' => 'Boolean',
      'description' => __( 'Filter results by whether page is in a menu', 'my-plugin' ),
    ]
  );
}

add_action( 'graphql_register_types', 'register_menu' );
于 2022-01-02T08:17:43.650 回答