• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

AxeWP / wp-graphql-rank-math / 5034017066

pending completion
5034017066

push

github

GitHub
release: v0.0.12 (#49)

2001 of 2307 relevant lines covered (86.74%)

5.47 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

2.13
/src/TypeRegistry.php
1
<?php
2
/**
3
 * Registers Plugin types to the GraphQL schema.
4
 *
5
 * @package WPGraphQL\RankMath
6
 */
7

8
namespace WPGraphQL\RankMath;
9

10
use Exception;
11
use WPGraphQL\RankMath\Connection;
12
use WPGraphQL\RankMath\Fields;
13
use WPGraphQL\RankMath\Vendor\AxeWP\GraphQL\Interfaces\Registrable;
14
use WPGraphQL\RankMath\Mutation;
15
use WPGraphQL\RankMath\Type\Enum;
16
use WPGraphQL\RankMath\Type\Input;
17
use WPGraphQL\RankMath\Type\WPInterface;
18
use WPGraphQL\RankMath\Type\WPObject;
19

20
/**
21
 * Class - TypeRegistry
22
 */
23
class TypeRegistry {
24

25
        /**
26
         * The local registry of registered types.
27
         *
28
         * @var array
29
         */
30
        public static array $registry = [];
31

32
        /**
33
         * Gets an array of all the registered GraphQL types along with their class name.
34
         */
35
        public static function get_registered_types() : array {
36
                if ( empty( self::$registry ) ) {
1✔
37
                        self::initialize_registry();
×
38
                }
39

40
                return self::$registry;
1✔
41
        }
42

43
        /**
44
         * Registers types, connections, unions, and mutations to GraphQL schema.
45
         */
46
        public static function init() : void {
47
                /**
48
                 * Fires before all types have been registered.
49
                 */
50
                do_action( 'graphql_seo_before_register_types' );
×
51

52
                self::initialize_registry();
×
53

54
                /**
55
                 * Fires after all types have been registered.
56
                 */
57
                do_action( 'graphql_seo_after_register_types' );
×
58
        }
59

60
        /**
61
         * Initializes the plugin type registry.
62
         */
63
        private static function initialize_registry() : void {
64
                $classes_to_register = array_merge(
×
65
                        self::enums(),
×
66
                        self::inputs(),
×
67
                        self::interfaces(),
×
68
                        self::objects(),
×
69
                        self::connections(),
×
70
                        self::mutations(),
×
71
                        self::fields(),
×
72
                );
×
73

74
                self::register_types( $classes_to_register );
×
75
        }
76

77

78

79
        /**
80
         * List of Enum classes to register.
81
         */
82
        private static function enums() : array {
83
                // Enums to register.
84
                $classes_to_register = [
×
85
                        Enum\ArticleTypeEnum::class,
×
86
                        Enum\BulkEditingTypeEnum::class,
×
87
                        Enum\ImagePreviewSizeEnum::class,
×
88
                        Enum\KnowledgeGraphTypeEnum::class,
×
89
                        Enum\OpenGraphLocaleEnum::class,
×
90
                        Enum\OpenGraphProductAvailabilityEnum::class,
×
91
                        Enum\RobotsMetaValueEnum::class,
×
92
                        Enum\SeoScorePositionEnum::class,
×
93
                        Enum\SeoScoreTemplateTypeEnum::class,
×
94
                        Enum\SeoRatingEnum::class,
×
95
                        Enum\SnippetTypeEnum::class,
×
96
                        Enum\TwitterCardTypeEnum::class,
×
97
                ];
×
98

99
                /**
100
                 * Filters the list of enum classes to register.
101
                 *
102
                 * Useful for adding/removing specific enums to the schema.
103
                 *
104
                 * @param array           $classes_to_register Array of classes to be registered to the schema.
105
                 */
106
                return apply_filters( 'graphql_seo_registered_enum_classes', $classes_to_register );
×
107
        }
108

109
        /**
110
         * List of Input classes to register.
111
         */
112
        private static function inputs() : array {
113
                $classes_to_register = [];
×
114

115
                /**
116
                 * Filters the list of input classes to register.
117
                 *
118
                 * Useful for adding/removing specific inputs to the schema.
119
                 *
120
                 * @param array           $classes_to_register Array of classes to be registered to the schema.
121
                 */
122
                return apply_filters( 'graphql_seo_registered_input_classes', $classes_to_register );
×
123
        }
124

125
        /**
126
         * List of Interface classes to register.
127
         */
128
        public static function interfaces() : array {
129
                $classes_to_register = [
×
130
                        WPInterface\MetaSettingWithArchive::class,
×
131
                        WPInterface\MetaSettingWithRobots::class,
×
132
                        WPInterface\Seo::class,
×
133
                        WPInterface\ContentNodeSeo::class,
×
134
                        WPInterface\NodeWithSeo::class,
×
135
                ];
×
136

137
                /**
138
                 * Filters the list of interfaces classes to register.
139
                 *
140
                 * Useful for adding/removing specific interfaces to the schema.
141
                 *
142
                 * @param array           $classes_to_register = Array of classes to be registered to the schema.
143
                 */
144
                return apply_filters( 'graphql_seo_registered_interface_classes', $classes_to_register );
×
145
        }
146

147
        /**
148
         * List of Object classes to register.
149
         */
150
        public static function objects() : array {
151
                $classes_to_register = [
×
152
                        WPObject\AdvancedRobotsMeta::class,
×
153
                        WPObject\SeoScore::class,
×
154
                        WPObject\JsonLd::class,
×
155
                        WPObject\Breadcrumbs::class,
×
156

157
                        // Open Graph
158
                        WPObject\OpenGraph\Article::class,
×
159
                        WPObject\OpenGraph\Facebook::class,
×
160
                        WPObject\OpenGraph\Image::class,
×
161
                        WPObject\OpenGraph\Product::class,
×
162
                        WPObject\OpenGraph\SlackEnhancedData::class,
×
163
                        WPObject\OpenGraph\TwitterApp::class,
×
164
                        WPObject\OpenGraph\Twitter::class,
×
165
                        WPObject\OpenGraph\Video::class,
×
166
                        WPObject\OpenGraphMeta::class,
×
167

168
                        // General settings.
169
                        WPObject\Settings\General\BreadcrumbsConfig::class,
×
170
                        WPObject\Settings\General\FrontendSeoScore::class,
×
171
                        WPObject\Settings\General\Links::class,
×
172
                        WPObject\Settings\General\Webmaster::class,
×
173
                        WPObject\Settings\General::class,
×
174
                        // Meta settings.
175
                        WPObject\Settings\Meta\AuthorArchiveMeta::class,
×
176
                        WPObject\Settings\Meta\ContentTypeMeta::class,
×
177
                        WPObject\Settings\Meta\DateArchiveMeta::class,
×
178
                        WPObject\Settings\Meta\GlobalMeta::class,
×
179
                        WPObject\Settings\Meta\HomepageMeta::class,
×
180
                        WPObject\Settings\Meta\LocalMeta::class,
×
181
                        WPObject\Settings\Meta\SocialMeta::class,
×
182
                        WPObject\Settings\Meta\TaxonomyMeta::class,
×
183
                        WPObject\Settings\Meta::class,
×
184
                        // Sitemap settings
185
                        WPObject\Settings\Sitemap\Author::class,
×
186
                        WPObject\Settings\Sitemap\ContentType::class,
×
187
                        WPObject\Settings\Sitemap\General::class,
×
188
                        WPObject\Settings\Sitemap\Taxonomy::class,
×
189
                        WPObject\Settings\Sitemap::class,
×
190

191
                        // Settings.
192
                        WPObject\Settings::class,
×
193

194
                        // The individual SEO objects.
195
                        WPObject\SeoObjects::class,
×
196
                ];
×
197

198
                /**
199
                 * Filters the list of object classes to register.
200
                 *
201
                 * Useful for adding/removing specific objects to the schema.
202
                 *
203
                 * @param array           $classes_to_register = Array of classes to be registered to the schema.
204
                 */
205
                return apply_filters( 'graphql_seo_registered_object_classes', $classes_to_register );
×
206
        }
207

208
        /**
209
         * List of Field classes to register.
210
         */
211
        public static function fields() : array {
212
                $classes_to_register = [
×
213
                        Fields\RootQuery::class,
×
214
                ];
×
215

216
                /**
217
                 * Filters the list of field classes to register.
218
                 *
219
                 * Useful for adding/removing specific fields to the schema.
220
                 *
221
                 * @param array           $classes_to_register = Array of classes to be registered to the schema.
222
                 */
223
                return apply_filters( 'graphql_seo_registered_field_classes', $classes_to_register );
×
224
        }
225

226
        /**
227
         * List of Connection classes to register.
228
         */
229
        public static function connections() : array {
230
                $classes_to_register = [];
×
231

232
                /**
233
                 * Filters the list of connection classes to register.
234
                 *
235
                 * Useful for adding/removing specific connections to the schema.
236
                 *
237
                 * @param array           $classes_to_register = Array of classes to be registered to the schema.
238
                 */
239
                return apply_filters( 'graphql_seo_registered_connection_classes', $classes_to_register );
×
240
        }
241

242
        /**
243
         * Registers mutation.
244
         */
245
        public static function mutations() : array {
246
                $classes_to_register = [];
×
247

248
                /**
249
                 * Filters the list of connection classes to register.
250
                 *
251
                 * Useful for adding/removing specific connections to the schema.
252
                 *
253
                 * @param array           $classes_to_register = Array of classes to be registered to the schema.
254
                 */
255
                $classes_to_register = apply_filters( 'graphql_seo_registered_mutation_classes', $classes_to_register );
×
256

257
                return $classes_to_register;
×
258
        }
259

260
        /**
261
         * Loops through a list of classes to manually register each GraphQL to the registry, and stores the type name and class in the local registry.
262
         *
263
         * Classes must extend WPGraphQL\Type\AbstractType.
264
         *
265
         * @param string[] $classes_to_register .
266
         *
267
         * @throws Exception .
268
         */
269
        private static function register_types( array $classes_to_register ) : void {
270
                // Bail if there are no classes to register.
271
                if ( empty( $classes_to_register ) ) {
×
272
                        return;
×
273
                }
274

275
                foreach ( $classes_to_register as $class ) {
×
276
                        if ( ! is_a( $class, Registrable::class, true ) ) {
×
277
                                // translators: PHP class.
278
                                throw new Exception( sprintf( __( 'To be registered to the WPGraphQL Plugin Name GraphQL schema, %s needs to implement WPGraphQL\RankMath\Vendor\AxeWP\GraphQL\Interfaces\Registrable.', 'wp-graphql-rank-math' ), $class ) );
×
279
                        }
280

281
                        // Register the type to the GraphQL schema.
282
                        $class::init();
×
283
                        // Store the type in the local registry.
284
                        self::$registry[] = $class;
×
285
                }
286
        }
287
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc