1<?php
2/**
3 * Used to set up and fix common variables and include
4 * the WordPress procedural and class library.
5 *
6 * Allows for some configuration in wp-config.php (see default-constants.php)
7 *
8 * @package WordPress
9 */
10
11/**
12 * Stores the location of the WordPress directory of functions, classes, and core content.
13 *
14 * @since 1.0.0
15 */
16define( 'WPINC', 'wp-includes' );
17
18/**
19 * Version information for the current WordPress release.
20 *
21 * These can't be directly globalized in version.php. When updating,
22 * include version.php from another installation and don't override
23 * these values if already set.
24 *
25 * @global string $wp_version The WordPress version string.
26 * @global int $wp_db_version WordPress database version.
27 * @global string $tinymce_version TinyMCE version.
28 * @global string $required_php_version The minimum required PHP version string.
29 * @global string[] $required_php_extensions The names of required PHP extensions.
30 * @global string $required_mysql_version The minimum required MySQL version string.
31 * @global string $wp_local_package Locale code of the package.
32 */
33global $wp_version, $wp_db_version, $tinymce_version, $required_php_version, $required_php_extensions, $required_mysql_version, $wp_local_package;
34require ABSPATH . WPINC . '/version.php';
35require ABSPATH . WPINC . '/compat-utf8.php';
36require ABSPATH . WPINC . '/compat.php';
37require ABSPATH . WPINC . '/load.php';
38
39// Check the server requirements.
40wp_check_php_mysql_versions();
41
42// Include files required for initialization.
43require ABSPATH . WPINC . '/class-wp-paused-extensions-storage.php';
44require ABSPATH . WPINC . '/class-wp-exception.php';
45require ABSPATH . WPINC . '/class-wp-fatal-error-handler.php';
46require ABSPATH . WPINC . '/class-wp-recovery-mode-cookie-service.php';
47require ABSPATH . WPINC . '/class-wp-recovery-mode-key-service.php';
48require ABSPATH . WPINC . '/class-wp-recovery-mode-link-service.php';
49require ABSPATH . WPINC . '/class-wp-recovery-mode-email-service.php';
50require ABSPATH . WPINC . '/class-wp-recovery-mode.php';
51require ABSPATH . WPINC . '/error-protection.php';
52require ABSPATH . WPINC . '/default-constants.php';
53require_once ABSPATH . WPINC . '/plugin.php';
54
55/**
56 * If not already configured, `$blog_id` will default to 1 in a single site
57 * configuration. In multisite, it will be overridden by default in ms-settings.php.
58 *
59 * @since 2.0.0
60 *
61 * @global int $blog_id
62 */
63global $blog_id;
64
65// Set initial default constants including WP_MEMORY_LIMIT, WP_MAX_MEMORY_LIMIT, WP_DEBUG, SCRIPT_DEBUG, WP_CONTENT_DIR and WP_CACHE.
66wp_initial_constants();
67
68// Register the shutdown handler for fatal errors as soon as possible.
69wp_register_fatal_error_handler();
70
71// WordPress calculates offsets from UTC.
72// phpcs:ignore WordPress.DateTime.RestrictedFunctions.timezone_change_date_default_timezone_set
73date_default_timezone_set( 'UTC' );
74
75// Standardize $_SERVER variables across setups.
76wp_fix_server_vars();
77
78// Check if the site is in maintenance mode.
79wp_maintenance();
80
81// Start loading timer.
82timer_start();
83
84// Check if WP_DEBUG mode is enabled.
85wp_debug_mode();
86
87/**
88 * Filters whether to enable loading of the advanced-cache.php drop-in.
89 *
90 * This filter runs before it can be used by plugins. It is designed for non-web
91 * run-times. If false is returned, advanced-cache.php will never be loaded.
92 *
93 * @since 4.6.0
94 *
95 * @param bool $enable_advanced_cache Whether to enable loading advanced-cache.php (if present).
96 * Default true.
97 */
98if ( WP_CACHE && apply_filters( 'enable_loading_advanced_cache_dropin', true ) && file_exists( WP_CONTENT_DIR . '/advanced-cache.php' ) ) {
99 // For an advanced caching plugin to use. Uses a static drop-in because you would only want one.
100 include WP_CONTENT_DIR . '/advanced-cache.php';
101
102 // Re-initialize any hooks added manually by advanced-cache.php.
103 if ( $wp_filter ) {
104 $wp_filter = WP_Hook::build_preinitialized_hooks( $wp_filter );
105 }
106}
107
108// Define WP_LANG_DIR if not set.
109wp_set_lang_dir();
110
111// Load early WordPress files.
112require ABSPATH . WPINC . '/class-wp-list-util.php';
113require ABSPATH . WPINC . '/class-wp-token-map.php';
114require ABSPATH . WPINC . '/utf8.php';
115require ABSPATH . WPINC . '/formatting.php';
116require ABSPATH . WPINC . '/meta.php';
117require ABSPATH . WPINC . '/functions.php';
118require ABSPATH . WPINC . '/class-wp-meta-query.php';
119require ABSPATH . WPINC . '/class-wp-matchesmapregex.php';
120require ABSPATH . WPINC . '/class-wp.php';
121require ABSPATH . WPINC . '/class-wp-error.php';
122require ABSPATH . WPINC . '/pomo/mo.php';
123require ABSPATH . WPINC . '/l10n/class-wp-translation-controller.php';
124require ABSPATH . WPINC . '/l10n/class-wp-translations.php';
125require ABSPATH . WPINC . '/l10n/class-wp-translation-file.php';
126require ABSPATH . WPINC . '/l10n/class-wp-translation-file-mo.php';
127require ABSPATH . WPINC . '/l10n/class-wp-translation-file-php.php';
128
129/**
130 * @since 0.71
131 *
132 * @global wpdb $wpdb WordPress database abstraction object.
133 */
134global $wpdb;
135// Include the wpdb class and, if present, a db.php database drop-in.
136require_wp_db();
137
138/**
139 * @since 3.3.0
140 *
141 * @global string $table_prefix The database table prefix.
142 */
143$GLOBALS['table_prefix'] = $table_prefix;
144
145// Set the database table prefix and the format specifiers for database table columns.
146wp_set_wpdb_vars();
147
148// Start the WordPress object cache, or an external object cache if the drop-in is present.
149wp_start_object_cache();
150
151// Attach the default filters.
152require ABSPATH . WPINC . '/default-filters.php';
153
154// Initialize multisite if enabled.
155if ( is_multisite() ) {
156 require ABSPATH . WPINC . '/class-wp-site-query.php';
157 require ABSPATH . WPINC . '/class-wp-network-query.php';
158 require ABSPATH . WPINC . '/ms-blogs.php';
159 require ABSPATH . WPINC . '/ms-settings.php';
160} elseif ( ! defined( 'MULTISITE' ) ) {
161 define( 'MULTISITE', false );
162}
163
164register_shutdown_function( 'shutdown_action_hook' );
165
166// Stop most of WordPress from being loaded if SHORTINIT is enabled.
167if ( SHORTINIT ) {
168 return false;
169}
170
171// Load the L10n library.
172require_once ABSPATH . WPINC . '/l10n.php';
173require_once ABSPATH . WPINC . '/class-wp-textdomain-registry.php';
174require_once ABSPATH . WPINC . '/class-wp-locale.php';
175require_once ABSPATH . WPINC . '/class-wp-locale-switcher.php';
176
177// Run the installer if WordPress is not installed.
178wp_not_installed();
179
180// Load most of WordPress.
181require ABSPATH . WPINC . '/class-wp-walker.php';
182require ABSPATH . WPINC . '/class-wp-ajax-response.php';
183require ABSPATH . WPINC . '/capabilities.php';
184require ABSPATH . WPINC . '/class-wp-roles.php';
185require ABSPATH . WPINC . '/class-wp-role.php';
186require ABSPATH . WPINC . '/class-wp-user.php';
187require ABSPATH . WPINC . '/class-wp-query.php';
188require ABSPATH . WPINC . '/query.php';
189require ABSPATH . WPINC . '/class-wp-date-query.php';
190require ABSPATH . WPINC . '/theme.php';
191require ABSPATH . WPINC . '/class-wp-theme.php';
192require ABSPATH . WPINC . '/class-wp-theme-json-schema.php';
193require ABSPATH . WPINC . '/class-wp-theme-json-data.php';
194require ABSPATH . WPINC . '/class-wp-theme-json.php';
195require ABSPATH . WPINC . '/class-wp-theme-json-resolver.php';
196require ABSPATH . WPINC . '/class-wp-duotone.php';
197require ABSPATH . WPINC . '/global-styles-and-settings.php';
198require ABSPATH . WPINC . '/class-wp-block-template.php';
199require ABSPATH . WPINC . '/class-wp-block-templates-registry.php';
200require ABSPATH . WPINC . '/block-template-utils.php';
201require ABSPATH . WPINC . '/block-template.php';
202require ABSPATH . WPINC . '/theme-templates.php';
203require ABSPATH . WPINC . '/theme-previews.php';
204require ABSPATH . WPINC . '/template.php';
205require ABSPATH . WPINC . '/https-detection.php';
206require ABSPATH . WPINC . '/https-migration.php';
207require ABSPATH . WPINC . '/class-wp-user-request.php';
208require ABSPATH . WPINC . '/user.php';
209require ABSPATH . WPINC . '/class-wp-user-query.php';
210require ABSPATH . WPINC . '/class-wp-session-tokens.php';
211require ABSPATH . WPINC . '/class-wp-user-meta-session-tokens.php';
212require ABSPATH . WPINC . '/general-template.php';
213require ABSPATH . WPINC . '/link-template.php';
214require ABSPATH . WPINC . '/author-template.php';
215require ABSPATH . WPINC . '/robots-template.php';
216require ABSPATH . WPINC . '/post.php';
217require ABSPATH . WPINC . '/class-walker-page.php';
218require ABSPATH . WPINC . '/class-walker-page-dropdown.php';
219require ABSPATH . WPINC . '/class-wp-post-type.php';
220require ABSPATH . WPINC . '/class-wp-post.php';
221require ABSPATH . WPINC . '/post-template.php';
222require ABSPATH . WPINC . '/revision.php';
223require ABSPATH . WPINC . '/post-formats.php';
224require ABSPATH . WPINC . '/post-thumbnail-template.php';
225require ABSPATH . WPINC . '/category.php';
226require ABSPATH . WPINC . '/class-walker-category.php';
227require ABSPATH . WPINC . '/class-walker-category-dropdown.php';
228require ABSPATH . WPINC . '/category-template.php';
229require ABSPATH . WPINC . '/comment.php';
230require ABSPATH . WPINC . '/class-wp-comment.php';
231require ABSPATH . WPINC . '/class-wp-comment-query.php';
232require ABSPATH . WPINC . '/class-walker-comment.php';
233require ABSPATH . WPINC . '/comment-template.php';
234require ABSPATH . WPINC . '/rewrite.php';
235require ABSPATH . WPINC . '/class-wp-rewrite.php';
236require ABSPATH . WPINC . '/feed.php';
237require ABSPATH . WPINC . '/bookmark.php';
238require ABSPATH . WPINC . '/bookmark-template.php';
239require ABSPATH . WPINC . '/kses.php';
240require ABSPATH . WPINC . '/cron.php';
241require ABSPATH . WPINC . '/deprecated.php';
242require ABSPATH . WPINC . '/script-loader.php';
243require ABSPATH . WPINC . '/taxonomy.php';
244require ABSPATH . WPINC . '/class-wp-taxonomy.php';
245require ABSPATH . WPINC . '/class-wp-term.php';
246require ABSPATH . WPINC . '/class-wp-term-query.php';
247require ABSPATH . WPINC . '/class-wp-tax-query.php';
248require ABSPATH . WPINC . '/update.php';
249require ABSPATH . WPINC . '/canonical.php';
250require ABSPATH . WPINC . '/shortcodes.php';
251require ABSPATH . WPINC . '/embed.php';
252require ABSPATH . WPINC . '/class-wp-embed.php';
253require ABSPATH . WPINC . '/class-wp-oembed.php';
254require ABSPATH . WPINC . '/class-wp-oembed-controller.php';
255require ABSPATH . WPINC . '/media.php';
256require ABSPATH . WPINC . '/http.php';
257require ABSPATH . WPINC . '/html-api/html5-named-character-references.php';
258require ABSPATH . WPINC . '/html-api/class-wp-html-attribute-token.php';
259require ABSPATH . WPINC . '/html-api/class-wp-html-span.php';
260require ABSPATH . WPINC . '/html-api/class-wp-html-doctype-info.php';
261require ABSPATH . WPINC . '/html-api/class-wp-html-text-replacement.php';
262require ABSPATH . WPINC . '/html-api/class-wp-html-decoder.php';
263require ABSPATH . WPINC . '/html-api/class-wp-html-tag-processor.php';
264require ABSPATH . WPINC . '/html-api/class-wp-html-unsupported-exception.php';
265require ABSPATH . WPINC . '/html-api/class-wp-html-active-formatting-elements.php';
266require ABSPATH . WPINC . '/html-api/class-wp-html-open-elements.php';
267require ABSPATH . WPINC . '/html-api/class-wp-html-token.php';
268require ABSPATH . WPINC . '/html-api/class-wp-html-stack-event.php';
269require ABSPATH . WPINC . '/html-api/class-wp-html-processor-state.php';
270require ABSPATH . WPINC . '/html-api/class-wp-html-processor.php';
271require ABSPATH . WPINC . '/class-wp-block-processor.php';
272require ABSPATH . WPINC . '/class-wp-http.php';
273require ABSPATH . WPINC . '/class-wp-http-streams.php';
274require ABSPATH . WPINC . '/class-wp-http-curl.php';
275require ABSPATH . WPINC . '/class-wp-http-proxy.php';
276require ABSPATH . WPINC . '/class-wp-http-cookie.php';
277require ABSPATH . WPINC . '/class-wp-http-encoding.php';
278require ABSPATH . WPINC . '/class-wp-http-response.php';
279require ABSPATH . WPINC . '/class-wp-http-requests-response.php';
280require ABSPATH . WPINC . '/class-wp-http-requests-hooks.php';
281require ABSPATH . WPINC . '/widgets.php';
282require ABSPATH . WPINC . '/class-wp-widget.php';
283require ABSPATH . WPINC . '/class-wp-widget-factory.php';
284require ABSPATH . WPINC . '/nav-menu-template.php';
285require ABSPATH . WPINC . '/nav-menu.php';
286require ABSPATH . WPINC . '/admin-bar.php';
287require ABSPATH . WPINC . '/class-wp-application-passwords.php';
288require ABSPATH . WPINC . '/abilities-api/class-wp-ability-category.php';
289require ABSPATH . WPINC . '/abilities-api/class-wp-ability-categories-registry.php';
290require ABSPATH . WPINC . '/abilities-api/class-wp-ability.php';
291require ABSPATH . WPINC . '/abilities-api/class-wp-abilities-registry.php';
292require ABSPATH . WPINC . '/abilities-api.php';
293require ABSPATH . WPINC . '/abilities.php';
294require ABSPATH . WPINC . '/rest-api.php';
295require ABSPATH . WPINC . '/rest-api/class-wp-rest-server.php';
296require ABSPATH . WPINC . '/rest-api/class-wp-rest-response.php';
297require ABSPATH . WPINC . '/rest-api/class-wp-rest-request.php';
298require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-controller.php';
299require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-posts-controller.php';
300require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-attachments-controller.php';
301require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-global-styles-controller.php';
302require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-post-types-controller.php';
303require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-post-statuses-controller.php';
304require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-revisions-controller.php';
305require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-global-styles-revisions-controller.php';
306require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-template-revisions-controller.php';
307require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-autosaves-controller.php';
308require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-template-autosaves-controller.php';
309require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-taxonomies-controller.php';
310require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-terms-controller.php';
311require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-menu-items-controller.php';
312require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-menus-controller.php';
313require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-menu-locations-controller.php';
314require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-users-controller.php';
315require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-comments-controller.php';
316require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-search-controller.php';
317require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-blocks-controller.php';
318require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-block-types-controller.php';
319require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-block-renderer-controller.php';
320require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-settings-controller.php';
321require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-themes-controller.php';
322require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-plugins-controller.php';
323require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-block-directory-controller.php';
324require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-edit-site-export-controller.php';
325require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-pattern-directory-controller.php';
326require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-block-patterns-controller.php';
327require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-block-pattern-categories-controller.php';
328require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-application-passwords-controller.php';
329require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-site-health-controller.php';
330require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-sidebars-controller.php';
331require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-widget-types-controller.php';
332require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-widgets-controller.php';
333require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-templates-controller.php';
334require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-url-details-controller.php';
335require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-navigation-fallback-controller.php';
336require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-font-families-controller.php';
337require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-font-faces-controller.php';
338require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-font-collections-controller.php';
339require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-abilities-v1-categories-controller.php';
340require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-abilities-v1-list-controller.php';
341require ABSPATH . WPINC . '/rest-api/endpoints/class-wp-rest-abilities-v1-run-controller.php';
342require ABSPATH . WPINC . '/rest-api/fields/class-wp-rest-meta-fields.php';
343require ABSPATH . WPINC . '/rest-api/fields/class-wp-rest-comment-meta-fields.php';
344require ABSPATH . WPINC . '/rest-api/fields/class-wp-rest-post-meta-fields.php';
345require ABSPATH . WPINC . '/rest-api/fields/class-wp-rest-term-meta-fields.php';
346require ABSPATH . WPINC . '/rest-api/fields/class-wp-rest-user-meta-fields.php';
347require ABSPATH . WPINC . '/rest-api/search/class-wp-rest-search-handler.php';
348require ABSPATH . WPINC . '/rest-api/search/class-wp-rest-post-search-handler.php';
349require ABSPATH . WPINC . '/rest-api/search/class-wp-rest-term-search-handler.php';
350require ABSPATH . WPINC . '/rest-api/search/class-wp-rest-post-format-search-handler.php';
351require ABSPATH . WPINC . '/sitemaps.php';
352require ABSPATH . WPINC . '/sitemaps/class-wp-sitemaps.php';
353require ABSPATH . WPINC . '/sitemaps/class-wp-sitemaps-index.php';
354require ABSPATH . WPINC . '/sitemaps/class-wp-sitemaps-provider.php';
355require ABSPATH . WPINC . '/sitemaps/class-wp-sitemaps-registry.php';
356require ABSPATH . WPINC . '/sitemaps/class-wp-sitemaps-renderer.php';
357require ABSPATH . WPINC . '/sitemaps/class-wp-sitemaps-stylesheet.php';
358require ABSPATH . WPINC . '/sitemaps/providers/class-wp-sitemaps-posts.php';
359require ABSPATH . WPINC . '/sitemaps/providers/class-wp-sitemaps-taxonomies.php';
360require ABSPATH . WPINC . '/sitemaps/providers/class-wp-sitemaps-users.php';
361require ABSPATH . WPINC . '/class-wp-block-bindings-source.php';
362require ABSPATH . WPINC . '/class-wp-block-bindings-registry.php';
363require ABSPATH . WPINC . '/class-wp-block-editor-context.php';
364require ABSPATH . WPINC . '/class-wp-block-type.php';
365require ABSPATH . WPINC . '/class-wp-block-pattern-categories-registry.php';
366require ABSPATH . WPINC . '/class-wp-block-patterns-registry.php';
367require ABSPATH . WPINC . '/class-wp-block-styles-registry.php';
368require ABSPATH . WPINC . '/class-wp-block-type-registry.php';
369require ABSPATH . WPINC . '/class-wp-block.php';
370require ABSPATH . WPINC . '/class-wp-block-list.php';
371require ABSPATH . WPINC . '/class-wp-block-metadata-registry.php';
372require ABSPATH . WPINC . '/class-wp-block-parser-block.php';
373require ABSPATH . WPINC . '/class-wp-block-parser-frame.php';
374require ABSPATH . WPINC . '/class-wp-block-parser.php';
375require ABSPATH . WPINC . '/class-wp-classic-to-block-menu-converter.php';
376require ABSPATH . WPINC . '/class-wp-navigation-fallback.php';
377require ABSPATH . WPINC . '/block-bindings.php';
378require ABSPATH . WPINC . '/block-bindings/pattern-overrides.php';
379require ABSPATH . WPINC . '/block-bindings/post-data.php';
380require ABSPATH . WPINC . '/block-bindings/post-meta.php';
381require ABSPATH . WPINC . '/block-bindings/term-data.php';
382require ABSPATH . WPINC . '/blocks.php';
383require ABSPATH . WPINC . '/blocks/index.php';
384require ABSPATH . WPINC . '/block-editor.php';
385require ABSPATH . WPINC . '/block-patterns.php';
386require ABSPATH . WPINC . '/class-wp-block-supports.php';
387require ABSPATH . WPINC . '/block-supports/utils.php';
388require ABSPATH . WPINC . '/block-supports/align.php';
389require ABSPATH . WPINC . '/block-supports/custom-classname.php';
390require ABSPATH . WPINC . '/block-supports/generated-classname.php';
391require ABSPATH . WPINC . '/block-supports/settings.php';
392require ABSPATH . WPINC . '/block-supports/elements.php';
393require ABSPATH . WPINC . '/block-supports/colors.php';
394require ABSPATH . WPINC . '/block-supports/typography.php';
395require ABSPATH . WPINC . '/block-supports/border.php';
396require ABSPATH . WPINC . '/block-supports/layout.php';
397require ABSPATH . WPINC . '/block-supports/position.php';
398require ABSPATH . WPINC . '/block-supports/spacing.php';
399require ABSPATH . WPINC . '/block-supports/dimensions.php';
400require ABSPATH . WPINC . '/block-supports/duotone.php';
401require ABSPATH . WPINC . '/block-supports/shadow.php';
402require ABSPATH . WPINC . '/block-supports/background.php';
403require ABSPATH . WPINC . '/block-supports/block-style-variations.php';
404require ABSPATH . WPINC . '/block-supports/aria-label.php';
405require ABSPATH . WPINC . '/block-supports/block-visibility.php';
406require ABSPATH . WPINC . '/style-engine.php';
407require ABSPATH . WPINC . '/style-engine/class-wp-style-engine.php';
408require ABSPATH . WPINC . '/style-engine/class-wp-style-engine-css-declarations.php';
409require ABSPATH . WPINC . '/style-engine/class-wp-style-engine-css-rule.php';
410require ABSPATH . WPINC . '/style-engine/class-wp-style-engine-css-rules-store.php';
411require ABSPATH . WPINC . '/style-engine/class-wp-style-engine-processor.php';
412require ABSPATH . WPINC . '/fonts/class-wp-font-face-resolver.php';
413require ABSPATH . WPINC . '/fonts/class-wp-font-collection.php';
414require ABSPATH . WPINC . '/fonts/class-wp-font-face.php';
415require ABSPATH . WPINC . '/fonts/class-wp-font-library.php';
416require ABSPATH . WPINC . '/fonts/class-wp-font-utils.php';
417require ABSPATH . WPINC . '/fonts.php';
418require ABSPATH . WPINC . '/class-wp-script-modules.php';
419require ABSPATH . WPINC . '/script-modules.php';
420require ABSPATH . WPINC . '/interactivity-api/class-wp-interactivity-api.php';
421require ABSPATH . WPINC . '/interactivity-api/class-wp-interactivity-api-directives-processor.php';
422require ABSPATH . WPINC . '/interactivity-api/interactivity-api.php';
423require ABSPATH . WPINC . '/class-wp-plugin-dependencies.php';
424require ABSPATH . WPINC . '/class-wp-url-pattern-prefixer.php';
425require ABSPATH . WPINC . '/class-wp-speculation-rules.php';
426require ABSPATH . WPINC . '/speculative-loading.php';
427
428add_action( 'after_setup_theme', array( wp_script_modules(), 'add_hooks' ) );
429add_action( 'after_setup_theme', array( wp_interactivity(), 'add_hooks' ) );
430
431/**
432 * @since 3.3.0
433 *
434 * @global WP_Embed $wp_embed WordPress Embed object.
435 */
436$GLOBALS['wp_embed'] = new WP_Embed();
437
438/**
439 * WordPress Textdomain Registry object.
440 *
441 * Used to support just-in-time translations for manually loaded text domains.
442 *
443 * @since 6.1.0
444 *
445 * @global WP_Textdomain_Registry $wp_textdomain_registry WordPress Textdomain Registry.
446 */
447$GLOBALS['wp_textdomain_registry'] = new WP_Textdomain_Registry();
448$GLOBALS['wp_textdomain_registry']->init();
449
450// Load multisite-specific files.
451if ( is_multisite() ) {
452 require ABSPATH . WPINC . '/ms-functions.php';
453 require ABSPATH . WPINC . '/ms-default-filters.php';
454 require ABSPATH . WPINC . '/ms-deprecated.php';
455}
456
457// Define constants that rely on the API to obtain the default value.
458// Define must-use plugin directory constants, which may be overridden in the sunrise.php drop-in.
459wp_plugin_directory_constants();
460
461/**
462 * @since 3.9.0
463 *
464 * @global array $wp_plugin_paths
465 */
466$GLOBALS['wp_plugin_paths'] = array();
467
468// Load must-use plugins.
469foreach ( wp_get_mu_plugins() as $mu_plugin ) {
470 $_wp_plugin_file = $mu_plugin;
471 include_once $mu_plugin;
472 $mu_plugin = $_wp_plugin_file; // Avoid stomping of the $mu_plugin variable in a plugin.
473
474 /**
475 * Fires once a single must-use plugin has loaded.
476 *
477 * @since 5.1.0
478 *
479 * @param string $mu_plugin Full path to the plugin's main file.
480 */
481 do_action( 'mu_plugin_loaded', $mu_plugin );
482}
483unset( $mu_plugin, $_wp_plugin_file );
484
485// Load network activated plugins.
486if ( is_multisite() ) {
487 foreach ( wp_get_active_network_plugins() as $network_plugin ) {
488 wp_register_plugin_realpath( $network_plugin );
489
490 $_wp_plugin_file = $network_plugin;
491 include_once $network_plugin;
492 $network_plugin = $_wp_plugin_file; // Avoid stomping of the $network_plugin variable in a plugin.
493
494 /**
495 * Fires once a single network-activated plugin has loaded.
496 *
497 * @since 5.1.0
498 *
499 * @param string $network_plugin Full path to the plugin's main file.
500 */
501 do_action( 'network_plugin_loaded', $network_plugin );
502 }
503 unset( $network_plugin, $_wp_plugin_file );
504}
505
506/**
507 * Fires once all must-use and network-activated plugins have loaded.
508 *
509 * @since 2.8.0
510 */
511do_action( 'muplugins_loaded' );
512
513if ( is_multisite() ) {
514 ms_cookie_constants();
515}
516
517// Define constants after multisite is loaded.
518wp_cookie_constants();
519
520// Define and enforce our SSL constants.
521wp_ssl_constants();
522
523// Create common globals.
524require ABSPATH . WPINC . '/vars.php';
525
526// Make taxonomies and posts available to plugins and themes.
527// @plugin authors: warning: these get registered again on the init hook.
528create_initial_taxonomies();
529create_initial_post_types();
530
531wp_start_scraping_edited_file_errors();
532
533// Register the default theme directory root.
534register_theme_directory( get_theme_root() );
535
536if ( ! is_multisite() && wp_is_fatal_error_handler_enabled() ) {
537 // Handle users requesting a recovery mode link and initiating recovery mode.
538 wp_recovery_mode()->initialize();
539}
540
541// To make get_plugin_data() available in a way that's compatible with plugins also loading this file, see #62244.
542require_once ABSPATH . 'wp-admin/includes/plugin.php';
543
544// Load active plugins.
545foreach ( wp_get_active_and_valid_plugins() as $plugin ) {
546 wp_register_plugin_realpath( $plugin );
547
548 $plugin_data = get_plugin_data( $plugin, false, false );
549
550 $textdomain = $plugin_data['TextDomain'];
551 if ( $textdomain ) {
552 if ( $plugin_data['DomainPath'] ) {
553 $GLOBALS['wp_textdomain_registry']->set_custom_path( $textdomain, dirname( $plugin ) . $plugin_data['DomainPath'] );
554 } else {
555 $GLOBALS['wp_textdomain_registry']->set_custom_path( $textdomain, dirname( $plugin ) );
556 }
557 }
558
559 $_wp_plugin_file = $plugin;
560 include_once $plugin;
561 $plugin = $_wp_plugin_file; // Avoid stomping of the $plugin variable in a plugin.
562
563 /**
564 * Fires once a single activated plugin has loaded.
565 *
566 * @since 5.1.0
567 *
568 * @param string $plugin Full path to the plugin's main file.
569 */
570 do_action( 'plugin_loaded', $plugin );
571}
572unset( $plugin, $_wp_plugin_file, $plugin_data, $textdomain );
573
574// Load pluggable functions.
575require ABSPATH . WPINC . '/pluggable.php';
576require ABSPATH . WPINC . '/pluggable-deprecated.php';
577
578// Set internal encoding.
579wp_set_internal_encoding();
580
581// Run wp_cache_postload() if object cache is enabled and the function exists.
582if ( WP_CACHE && function_exists( 'wp_cache_postload' ) ) {
583 wp_cache_postload();
584}
585
586/**
587 * Fires once activated plugins have loaded.
588 *
589 * Pluggable functions are also available at this point in the loading order.
590 *
591 * @since 1.5.0
592 */
593do_action( 'plugins_loaded' );
594
595// Define constants which affect functionality if not already defined.
596wp_functionality_constants();
597
598// Add magic quotes and set up $_REQUEST ( $_GET + $_POST ).
599wp_magic_quotes();
600
601/**
602 * Fires when comment cookies are sanitized.
603 *
604 * @since 2.0.11
605 */
606do_action( 'sanitize_comment_cookies' );
607
608/**
609 * WordPress Query object
610 *
611 * @since 2.0.0
612 *
613 * @global WP_Query $wp_the_query WordPress Query object.
614 */
615$GLOBALS['wp_the_query'] = new WP_Query();
616
617/**
618 * Holds the reference to {@see $wp_the_query}.
619 * Use this global for WordPress queries
620 *
621 * @since 1.5.0
622 *
623 * @global WP_Query $wp_query WordPress Query object.
624 */
625$GLOBALS['wp_query'] = $GLOBALS['wp_the_query'];
626
627/**
628 * Holds the WordPress Rewrite object for creating pretty URLs
629 *
630 * @since 1.5.0
631 *
632 * @global WP_Rewrite $wp_rewrite WordPress rewrite component.
633 */
634$GLOBALS['wp_rewrite'] = new WP_Rewrite();
635
636/**
637 * WordPress Object
638 *
639 * @since 2.0.0
640 *
641 * @global WP $wp Current WordPress environment instance.
642 */
643$GLOBALS['wp'] = new WP();
644
645/**
646 * WordPress Widget Factory Object
647 *
648 * @since 2.8.0
649 *
650 * @global WP_Widget_Factory $wp_widget_factory
651 */
652$GLOBALS['wp_widget_factory'] = new WP_Widget_Factory();
653
654/**
655 * WordPress User Roles
656 *
657 * @since 2.0.0
658 *
659 * @global WP_Roles $wp_roles WordPress role management object.
660 */
661$GLOBALS['wp_roles'] = new WP_Roles();
662
663/**
664 * Fires before the theme is loaded.
665 *
666 * @since 2.6.0
667 */
668do_action( 'setup_theme' );
669
670// Define the template related constants and globals.
671wp_templating_constants();
672wp_set_template_globals();
673
674// Load the default text localization domain.
675load_default_textdomain();
676
677$locale = get_locale();
678$locale_file = WP_LANG_DIR . "/$locale.php";
679if ( ( 0 === validate_file( $locale ) ) && is_readable( $locale_file ) ) {
680 require $locale_file;
681}
682unset( $locale_file );
683
684/**
685 * WordPress Locale object for loading locale domain date and various strings.
686 *
687 * @since 2.1.0
688 *
689 * @global WP_Locale $wp_locale WordPress date and time locale object.
690 */
691$GLOBALS['wp_locale'] = new WP_Locale();
692
693/**
694 * WordPress Locale Switcher object for switching locales.
695 *
696 * @since 4.7.0
697 *
698 * @global WP_Locale_Switcher $wp_locale_switcher WordPress locale switcher object.
699 */
700$GLOBALS['wp_locale_switcher'] = new WP_Locale_Switcher();
701$GLOBALS['wp_locale_switcher']->init();
702
703// Load the functions for the active theme, for both parent and child theme if applicable.
704foreach ( wp_get_active_and_valid_themes() as $theme ) {
705 $wp_theme = wp_get_theme( basename( $theme ) );
706
707 $wp_theme->load_textdomain();
708
709 if ( file_exists( $theme . '/functions.php' ) ) {
710 include $theme . '/functions.php';
711 }
712}
713unset( $theme, $wp_theme );
714
715/**
716 * Fires after the theme is loaded.
717 *
718 * @since 3.0.0
719 */
720do_action( 'after_setup_theme' );
721
722// Create an instance of WP_Site_Health so that Cron events may fire.
723if ( ! class_exists( 'WP_Site_Health' ) ) {
724 require_once ABSPATH . 'wp-admin/includes/class-wp-site-health.php';
725}
726WP_Site_Health::get_instance();
727
728// Set up current user.
729$GLOBALS['wp']->init();
730
731/**
732 * Fires after WordPress has finished loading but before any headers are sent.
733 *
734 * Most of WP is loaded at this stage, and the user is authenticated. WP continues
735 * to load on the {@see 'init'} hook that follows (e.g. widgets), and many plugins instantiate
736 * themselves on it for all sorts of reasons (e.g. they need a user, a taxonomy, etc.).
737 *
738 * If you wish to plug an action once WP is loaded, use the {@see 'wp_loaded'} hook below.
739 *
740 * @since 1.5.0
741 */
742do_action( 'init' );
743
744// Check site status.
745if ( is_multisite() ) {
746 $file = ms_site_check();
747 if ( true !== $file ) {
748 require $file;
749 die();
750 }
751 unset( $file );
752}
753
754/**
755 * This hook is fired once WP, all plugins, and the theme are fully loaded and instantiated.
756 *
757 * Ajax requests should use wp-admin/admin-ajax.php. admin-ajax.php can handle requests for
758 * users not logged in.
759 *
760 * @link https://developer.wordpress.org/plugins/javascript/ajax
761 *
762 * @since 3.0.0
763 */
764do_action( 'wp_loaded' );
765