PluginProbe
BeyondWords – AI audio for publishers / 7.0.0
BeyondWords – AI audio for publishers v7.0.0
7.1.0 trunk 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.0.5 4.0.6 4.1.0 4.1.1 4.1.2 4.2.0 4.2.1 4.2.2 4.2.3 4.2.4 4.3.0 4.4.0 4.5.0 4.5.1 4.6.0 4.6.1 4.6.2 4.7.0 All 43 releases
speechkit / src / compatibility / class-wpgraphql.php

class-wpgraphql.php in BeyondWords – AI audio for publishers 7.0.0, at src/compatibility/class-wpgraphql.php

99 lines 2.7 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * WPGraphQL compatibility: a BeyondWords GraphQL type + field on compatible post types.
4 *
5 * @package BeyondWords\Compatibility
6 * @since 3.6.0
7 * @since 7.0.0 Refactored to BeyondWords namespace with snake_case methods.
8 */
9
10 declare( strict_types = 1 );
11
12 namespace BeyondWords\Compatibility;
13
14 defined( 'ABSPATH' ) || exit;
15
16 /**
17 * Expose BeyondWords fields in WPGraphQL.
18 *
19 * @since 7.0.0 Refactored to BeyondWords namespace with snake_case methods.
20 */
21 class WPGraphQL {
22
23 /**
24 * Register WordPress hooks.
25 */
26 public static function init(): void {
27 add_action( 'graphql_register_types', [ self::class, 'graphql_register_types' ] );
28 }
29
30 /**
31 * Register the BeyondWords GraphQL type and attach it to compatible post types.
32 */
33 public static function graphql_register_types(): void {
34 register_graphql_object_type(
35 'Beyondwords',
36 [
37 'description' => __( 'BeyondWords audio details. Use this data to embed an audio player using the BeyondWords JavaScript SDK.', 'speechkit' ),
38 'fields' => [
39 'sourceId' => [
40 'description' => __( 'BeyondWords source ID', 'speechkit' ),
41 'type' => 'String',
42 ],
43 'projectId' => [
44 'description' => __( 'BeyondWords project ID', 'speechkit' ),
45 'type' => 'Int',
46 ],
47 'contentId' => [
48 'description' => __( 'BeyondWords content ID', 'speechkit' ),
49 'type' => 'String',
50 ],
51 'podcastId' => [
52 'description' => __( 'BeyondWords legacy podcast ID', 'speechkit' ),
53 'type' => 'String',
54 ],
55 ],
56 ]
57 );
58
59 $bw_post_types = \BeyondWords\Settings\Utils::get_compatible_post_types();
60 $graphql_post_types = \WPGraphQL::get_allowed_post_types();
61 $post_types = array_intersect( $bw_post_types, $graphql_post_types );
62
63 foreach ( $post_types as $post_type ) {
64 $post_type_object = get_post_type_object( $post_type );
65
66 if ( ! $post_type_object ) {
67 continue;
68 }
69
70 register_graphql_field(
71 $post_type_object->graphql_single_name,
72 'beyondwords',
73 [
74 'type' => 'Beyondwords',
75 'description' => __( 'BeyondWords audio details', 'speechkit' ),
76 'resolve' => static function ( \WPGraphQL\Model\Post $post ) {
77 $fields = [
78 'sourceId' => (string) $post->ID,
79 ];
80
81 $project_id = \BeyondWords\Post\Meta::get_project_id( $post->ID );
82 if ( ! empty( $project_id ) ) {
83 $fields['projectId'] = $project_id;
84 }
85
86 $content_id = \BeyondWords\Post\Meta::get_content_id( $post->ID );
87 if ( ! empty( $content_id ) ) {
88 $fields['contentId'] = $content_id;
89 $fields['podcastId'] = $content_id;
90 }
91
92 return $fields;
93 },
94 ]
95 );
96 }
97 }
98 }
99