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

AxeWP / wp-graphql-rank-math / 5034015993

pending completion
5034015993

push

github

David Levine
feat: add redirection settings

86 of 86 new or added lines in 8 files covered. (100.0%)

2008 of 2392 relevant lines covered (83.95%)

5.28 hits per line

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

2.11
/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\Modules\Redirection\TypeRegistry as RedirectionTypeRegistry;
14
use WPGraphQL\RankMath\Vendor\AxeWP\GraphQL\Interfaces\Registrable;
15
use WPGraphQL\RankMath\Mutation;
16
use WPGraphQL\RankMath\Type\Enum;
17
use WPGraphQL\RankMath\Type\Input;
18
use WPGraphQL\RankMath\Type\WPInterface;
19
use WPGraphQL\RankMath\Type\WPObject;
20

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

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

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

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

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

53
                // Register individual modules.
54
                RedirectionTypeRegistry::init();
×
55

56
                // Initialize the registry.
57
                self::initialize_registry();
×
58

59

60
                /**
61
                 * Fires after all types have been registered.
62
                 */
63
                do_action( 'graphql_seo_after_register_types' );
×
64
        }
65

66
        /**
67
         * Initializes the plugin type registry.
68
         */
69
        private static function initialize_registry() : void {
70
                $classes_to_register = array_merge(
×
71
                        self::enums(),
×
72
                        self::inputs(),
×
73
                        self::interfaces(),
×
74
                        self::objects(),
×
75
                        self::connections(),
×
76
                        self::mutations(),
×
77
                        self::fields(),
×
78
                );
×
79

80
                self::register_types( $classes_to_register );
×
81
        }
82

83

84

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

105
                /**
106
                 * Filters the list of enum classes to register.
107
                 *
108
                 * Useful for adding/removing specific enums to the schema.
109
                 *
110
                 * @param array           $classes_to_register Array of classes to be registered to the schema.
111
                 */
112
                return apply_filters( 'graphql_seo_registered_enum_classes', $classes_to_register );
×
113
        }
114

115
        /**
116
         * List of Input classes to register.
117
         */
118
        private static function inputs() : array {
119
                $classes_to_register = [];
×
120

121
                /**
122
                 * Filters the list of input classes to register.
123
                 *
124
                 * Useful for adding/removing specific inputs to the schema.
125
                 *
126
                 * @param array           $classes_to_register Array of classes to be registered to the schema.
127
                 */
128
                return apply_filters( 'graphql_seo_registered_input_classes', $classes_to_register );
×
129
        }
130

131
        /**
132
         * List of Interface classes to register.
133
         */
134
        public static function interfaces() : array {
135
                $classes_to_register = [
×
136
                        WPInterface\MetaSettingWithArchive::class,
×
137
                        WPInterface\MetaSettingWithRobots::class,
×
138
                        WPInterface\Seo::class,
×
139
                        WPInterface\ContentNodeSeo::class,
×
140
                        WPInterface\NodeWithSeo::class,
×
141
                ];
×
142

143
                /**
144
                 * Filters the list of interfaces classes to register.
145
                 *
146
                 * Useful for adding/removing specific interfaces to the schema.
147
                 *
148
                 * @param array           $classes_to_register = Array of classes to be registered to the schema.
149
                 */
150
                return apply_filters( 'graphql_seo_registered_interface_classes', $classes_to_register );
×
151
        }
152

153
        /**
154
         * List of Object classes to register.
155
         */
156
        public static function objects() : array {
157
                $classes_to_register = [
×
158
                        WPObject\AdvancedRobotsMeta::class,
×
159
                        WPObject\SeoScore::class,
×
160
                        WPObject\JsonLd::class,
×
161
                        WPObject\Breadcrumbs::class,
×
162

163
                        // Open Graph
164
                        WPObject\OpenGraph\Article::class,
×
165
                        WPObject\OpenGraph\Facebook::class,
×
166
                        WPObject\OpenGraph\Image::class,
×
167
                        WPObject\OpenGraph\Product::class,
×
168
                        WPObject\OpenGraph\SlackEnhancedData::class,
×
169
                        WPObject\OpenGraph\TwitterApp::class,
×
170
                        WPObject\OpenGraph\Twitter::class,
×
171
                        WPObject\OpenGraph\Video::class,
×
172
                        WPObject\OpenGraphMeta::class,
×
173

174
                        // General settings.
175
                        WPObject\Settings\General\BreadcrumbsConfig::class,
×
176
                        WPObject\Settings\General\FrontendSeoScore::class,
×
177
                        WPObject\Settings\General\Links::class,
×
178
                        WPObject\Settings\General\Webmaster::class,
×
179
                        WPObject\Settings\General::class,
×
180
                        // Meta settings.
181
                        WPObject\Settings\Meta\AuthorArchiveMeta::class,
×
182
                        WPObject\Settings\Meta\ContentTypeMeta::class,
×
183
                        WPObject\Settings\Meta\DateArchiveMeta::class,
×
184
                        WPObject\Settings\Meta\GlobalMeta::class,
×
185
                        WPObject\Settings\Meta\HomepageMeta::class,
×
186
                        WPObject\Settings\Meta\LocalMeta::class,
×
187
                        WPObject\Settings\Meta\SocialMeta::class,
×
188
                        WPObject\Settings\Meta\TaxonomyMeta::class,
×
189
                        WPObject\Settings\Meta::class,
×
190
                        // Sitemap settings
191
                        WPObject\Settings\Sitemap\Author::class,
×
192
                        WPObject\Settings\Sitemap\ContentType::class,
×
193
                        WPObject\Settings\Sitemap\General::class,
×
194
                        WPObject\Settings\Sitemap\Taxonomy::class,
×
195
                        WPObject\Settings\Sitemap::class,
×
196

197
                        // Settings.
198
                        WPObject\Settings::class,
×
199

200
                        // The individual SEO objects.
201
                        WPObject\SeoObjects::class,
×
202
                ];
×
203

204
                /**
205
                 * Filters the list of object classes to register.
206
                 *
207
                 * Useful for adding/removing specific objects to the schema.
208
                 *
209
                 * @param array           $classes_to_register = Array of classes to be registered to the schema.
210
                 */
211
                return apply_filters( 'graphql_seo_registered_object_classes', $classes_to_register );
×
212
        }
213

214
        /**
215
         * List of Field classes to register.
216
         */
217
        public static function fields() : array {
218
                $classes_to_register = [
×
219
                        Fields\RootQuery::class,
×
220
                ];
×
221

222
                /**
223
                 * Filters the list of field classes to register.
224
                 *
225
                 * Useful for adding/removing specific fields to the schema.
226
                 *
227
                 * @param array           $classes_to_register = Array of classes to be registered to the schema.
228
                 */
229
                return apply_filters( 'graphql_seo_registered_field_classes', $classes_to_register );
×
230
        }
231

232
        /**
233
         * List of Connection classes to register.
234
         */
235
        public static function connections() : array {
236
                $classes_to_register = [];
×
237

238
                /**
239
                 * Filters the list of connection classes to register.
240
                 *
241
                 * Useful for adding/removing specific connections to the schema.
242
                 *
243
                 * @param array           $classes_to_register = Array of classes to be registered to the schema.
244
                 */
245
                return apply_filters( 'graphql_seo_registered_connection_classes', $classes_to_register );
×
246
        }
247

248
        /**
249
         * Registers mutation.
250
         */
251
        public static function mutations() : array {
252
                $classes_to_register = [];
×
253

254
                /**
255
                 * Filters the list of connection classes to register.
256
                 *
257
                 * Useful for adding/removing specific connections to the schema.
258
                 *
259
                 * @param array           $classes_to_register = Array of classes to be registered to the schema.
260
                 */
261
                $classes_to_register = apply_filters( 'graphql_seo_registered_mutation_classes', $classes_to_register );
×
262

263
                return $classes_to_register;
×
264
        }
265

266
        /**
267
         * 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.
268
         *
269
         * Classes must extend WPGraphQL\Type\AbstractType.
270
         *
271
         * @param string[] $classes_to_register .
272
         *
273
         * @throws Exception .
274
         */
275
        private static function register_types( array $classes_to_register ) : void {
276
                // Bail if there are no classes to register.
277
                if ( empty( $classes_to_register ) ) {
×
278
                        return;
×
279
                }
280

281
                foreach ( $classes_to_register as $class ) {
×
282
                        if ( ! is_a( $class, Registrable::class, true ) ) {
×
283
                                // translators: PHP class.
284
                                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 ) );
×
285
                        }
286

287
                        // Register the type to the GraphQL schema.
288
                        $class::init();
×
289
                        // Store the type in the local registry.
290
                        self::$registry[] = $class;
×
291
                }
292
        }
293
}
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