'Product', 'toType' => 'Comment', 'fromFieldName' => 'reviews', 'connectionFields' => [ 'averageRating' => [ 'type' => 'Float', 'description' => static function () { return __( 'Average review rating for this product.', 'graphql-for-ecommerce' ); }, 'resolve' => static function ( $source ) { if ( empty( $source['edges'] ) ) { return 0; } $product = $source['edges'][0]['source']; return $product->averageRating; // @codingStandardsIgnoreLine }, ], ], 'edgeFields' => [ 'rating' => [ 'type' => 'Float', 'description' => static function () { return __( 'Review rating', 'graphql-for-ecommerce' ); }, 'resolve' => static function ( $source ) { $review = $source['node']; // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase $rating = get_comment_meta( $review->commentId, 'rating', true ); return $rating ? $rating : 0; }, ], ], 'resolve' => static function ( $source, array $args, AppContext $context, ResolveInfo $info ) { $resolver = new \WPGraphQL\Data\Connection\CommentConnectionResolver( $source, $args, $context, $info ); $resolver->set_query_arg( 'post_type', 'product' ); $resolver->set_query_arg( 'post_id', $source->ID ); return $resolver->get_connection(); }, ] ) ); // From Orders. register_graphql_connection( self::get_connection_config( [ 'fromType' => 'Order', 'toType' => 'OrderNote', 'fromFieldName' => 'orderNotes', 'edgeFields' => [ 'isCustomerNote' => [ 'type' => 'Boolean', 'description' => static function () { return __( 'Is this a customer note?', 'graphql-for-ecommerce' ); }, 'resolve' => static function ( $source ) { $note = $source['node']; // phpcs:ignore WordPress.NamingConventions.ValidVariableName.UsedPropertyNotSnakeCase return get_comment_meta( $note->commentId, 'is_customer_note', true ); }, ], ], 'resolve' => static function ( $source, array $args, AppContext $context, ResolveInfo $info ) { $resolver = new \WPGraphQL\Data\Connection\CommentConnectionResolver( $source, $args, $context, $info ); $resolver->set_query_arg( 'post_id', $source->ID ); $resolver->set_query_arg( 'approve', 'approve' ); $resolver->set_query_arg( 'type', '' ); if ( ! current_user_can( 'edit_shop_orders', $source->ID ) ) { $resolver->set_query_arg( 'meta_key', 'is_customer_note' ); $resolver->set_query_arg( 'meta_value', true ); } remove_filter( 'comments_clauses', [ 'WC_Comments', 'exclude_order_comments' ] ); $connection = $resolver->get_connection(); add_filter( 'comments_clauses', [ 'WC_Comments', 'exclude_order_comments' ] ); return $connection; }, ] ) ); } }