Priority File Manager

📁 public_html
Base Directory:
/home/ecedu/public_html/wp-includes
NameTypeSizeActions
📁 .. Folder -
📁 ID3 Folder -
📁 IXR Folder -
📁 PHPMailer Folder -
📁 Requests Folder -
📁 SimplePie Folder -
📁 Text Folder -
📄 admin-bar.php File 37106
Edit Download
📁 assets Folder -
📄 atomlib.php File 12078
Edit Download
📄 author-template.php File 18951
Edit Download
📁 block-bindings Folder -
📄 block-bindings.php File 5594
Edit Download
📄 block-editor.php File 28797
Edit Download
📄 block-i18n.json File 316
Edit Download
📁 block-patterns Folder -
📄 block-patterns.php File 13213
Edit Download
📁 block-supports Folder -
📄 block-template-utils.php File 61907
Edit Download
📄 block-template.php File 15356
Edit Download
📁 blocks Folder -
📄 blocks.php File 113051
Edit Download
📄 bookmark-template.php File 12768
Edit Download
📄 bookmark.php File 15427
Edit Download
📄 cache-compat.php File 5969
Edit Download
📄 cache.php File 13474
Edit Download
📄 canonical.php File 34523
Edit Download
📄 capabilities.php File 42718
Edit Download
📄 category-template.php File 57003
Edit Download
📄 category.php File 12829
Edit Download
📁 certificates Folder -
📄 class-IXR.php File 2616
Edit Download
📄 class-avif-info.php File 29615
Edit Download
📄 class-feed.php File 539
Edit Download
📄 class-http.php File 367
Edit Download
📄 class-json.php File 43684
Edit Download
📄 class-oembed.php File 401
Edit Download
📄 class-phpass.php File 6771
Edit Download
📄 class-phpmailer.php File 664
Edit Download
📄 class-pop3.php File 21121
Edit Download
📄 class-requests.php File 2237
Edit Download
📄 class-simplepie.php File 453
Edit Download
📄 class-smtp.php File 457
Edit Download
📄 class-snoopy.php File 37715
Edit Download
📄 class-walker-category-dropdown.php File 2469
Edit Download
📄 class-walker-category.php File 8477
Edit Download
📄 class-walker-comment.php File 14221
Edit Download
📄 class-walker-nav-menu.php File 12044
Edit Download
📄 class-walker-page-dropdown.php File 2710
Edit Download
📄 class-walker-page.php File 7612
Edit Download
📄 class-wp-admin-bar.php File 17874
Edit Download
📄 class-wp-ajax-response.php File 5266
Edit Download
📄 class-wp-application-passwords.php File 17099
Edit Download
📄 class-wp-block-bindings-registry.php File 8463
Edit Download
📄 class-wp-block-bindings-source.php File 2992
Edit Download
📄 class-wp-block-editor-context.php File 1350
Edit Download
📄 class-wp-block-list.php File 4757
Edit Download
📄 class-wp-block-metadata-registry.php File 11895
Edit Download
📄 class-wp-block-parser-block.php File 2555
Edit Download
📄 class-wp-block-parser-frame.php File 2017
Edit Download
📄 class-wp-block-parser.php File 11532
Edit Download
📄 class-wp-block-pattern-categories-registry.php File 5371
Edit Download
📄 class-wp-block-patterns-registry.php File 10783
Edit Download
📄 class-wp-block-styles-registry.php File 6403
Edit Download
📄 class-wp-block-supports.php File 5626
Edit Download
📄 class-wp-block-template.php File 2033
Edit Download
📄 class-wp-block-templates-registry.php File 7231
Edit Download
📄 class-wp-block-type-registry.php File 5013
Edit Download
📄 class-wp-block-type.php File 17265
Edit Download
📄 class-wp-block.php File 23041
Edit Download
📄 class-wp-classic-to-block-menu-converter.php File 4088
Edit Download
📄 class-wp-comment-query.php File 48395
Edit Download
📄 class-wp-comment.php File 9437
Edit Download
📄 class-wp-customize-control.php File 25851
Edit Download
📄 class-wp-customize-manager.php File 202593
Edit Download
📄 class-wp-customize-nav-menus.php File 57660
Edit Download
📄 class-wp-customize-panel.php File 10710
Edit Download
📄 class-wp-customize-section.php File 11209
Edit Download
📄 class-wp-customize-setting.php File 29962
Edit Download
📄 class-wp-customize-widgets.php File 72210
Edit Download
📄 class-wp-date-query.php File 35732
Edit Download
📄 class-wp-dependencies.php File 15139
Edit Download
📄 class-wp-dependency.php File 2627
Edit Download
📄 class-wp-duotone.php File 40783
Edit Download
📄 class-wp-editor.php File 72335
Edit Download
📄 class-wp-embed.php File 15931
Edit Download
📄 class-wp-error.php File 7502
Edit Download
📄 class-wp-exception.php File 253
Edit Download
📄 class-wp-fatal-error-handler.php File 8150
Edit Download
📄 class-wp-feed-cache-transient.php File 3176
Edit Download
📄 class-wp-feed-cache.php File 969
Edit Download
📄 class-wp-hook.php File 16000
Edit Download
📄 class-wp-http-cookie.php File 7389
Edit Download
📄 class-wp-http-curl.php File 12541
Edit Download
📄 class-wp-http-encoding.php File 6689
Edit Download
📄 class-wp-http-ixr-client.php File 3501
Edit Download
📄 class-wp-http-proxy.php File 5980
Edit Download
📄 class-wp-http-requests-hooks.php File 2022
Edit Download
📄 class-wp-http-requests-response.php File 4400
Edit Download
📄 class-wp-http-response.php File 2977
Edit Download
📄 class-wp-http-streams.php File 16859
Edit Download
📄 class-wp-http.php File 41579
Edit Download
📄 class-wp-image-editor-gd.php File 20162
Edit Download
📄 class-wp-image-editor-imagick.php File 34735
Edit Download
📄 class-wp-image-editor.php File 17527
Edit Download
📄 class-wp-list-util.php File 7443
Edit Download
📄 class-wp-locale-switcher.php File 6776
Edit Download
📄 class-wp-locale.php File 16883
Edit Download
📄 class-wp-matchesmapregex.php File 1828
Edit Download
📄 class-wp-meta-query.php File 30531
Edit Download
📄 class-wp-metadata-lazyloader.php File 6833
Edit Download
📄 class-wp-navigation-fallback.php File 9211
Edit Download
📄 class-wp-network-query.php File 19857
Edit Download
📄 class-wp-network.php File 12296
Edit Download
📄 class-wp-object-cache.php File 17524
Edit Download
📄 class-wp-oembed-controller.php File 6905
Edit Download
📄 class-wp-oembed.php File 31606
Edit Download
📄 class-wp-paused-extensions-storage.php File 5111
Edit Download
📄 class-wp-phpmailer.php File 3802
Edit Download
📄 class-wp-plugin-dependencies.php File 25315
Edit Download
📄 class-wp-post-type.php File 30680
Edit Download
📄 class-wp-post.php File 6488
Edit Download
📄 class-wp-query.php File 158023
Edit Download
📄 class-wp-recovery-mode-cookie-service.php File 6877
Edit Download
📄 class-wp-recovery-mode-email-service.php File 11183
Edit Download
📄 class-wp-recovery-mode-key-service.php File 4884
Edit Download
📄 class-wp-recovery-mode-link-service.php File 3463
Edit Download
📄 class-wp-recovery-mode.php File 11453
Edit Download
📄 class-wp-rewrite.php File 63688
Edit Download
📄 class-wp-role.php File 2523
Edit Download
📄 class-wp-roles.php File 8586
Edit Download
📄 class-wp-script-modules.php File 19463
Edit Download
📄 class-wp-scripts.php File 28344
Edit Download
📄 class-wp-session-tokens.php File 7319
Edit Download
📄 class-wp-simplepie-file.php File 3408
Edit Download
📄 class-wp-simplepie-sanitize-kses.php File 1910
Edit Download
📄 class-wp-site-query.php File 31625
Edit Download
📄 class-wp-site.php File 7454
Edit Download
📄 class-wp-speculation-rules.php File 7527
Edit Download
📄 class-wp-styles.php File 11010
Edit Download
📄 class-wp-tax-query.php File 19555
Edit Download
📄 class-wp-taxonomy.php File 18559
Edit Download
📄 class-wp-term-query.php File 40869
Edit Download
📄 class-wp-term.php File 5298
Edit Download
📄 class-wp-text-diff-renderer-inline.php File 979
Edit Download
📄 class-wp-text-diff-renderer-table.php File 18880
Edit Download
📄 class-wp-textdomain-registry.php File 10481
Edit Download
📄 class-wp-theme-json-data.php File 1809
Edit Download
📄 class-wp-theme-json-resolver.php File 35738
Edit Download
📄 class-wp-theme-json-schema.php File 7367
Edit Download
📄 class-wp-theme-json.php File 163545
Edit Download
📄 class-wp-theme.php File 65810
Edit Download
📄 class-wp-token-map.php File 28618
Edit Download
📄 class-wp-url-pattern-prefixer.php File 4802
Edit Download
📄 class-wp-user-meta-session-tokens.php File 2990
Edit Download
📄 class-wp-user-query.php File 43655
Edit Download
📄 class-wp-user-request.php File 2305
Edit Download
📄 class-wp-user.php File 22994
Edit Download
📄 class-wp-walker.php File 13322
Edit Download
📄 class-wp-widget-factory.php File 3347
Edit Download
📄 class-wp-widget.php File 18429
Edit Download
📄 class-wp-xmlrpc-server.php File 215444
Edit Download
📄 class-wp.php File 26318
Edit Download
📄 class-wpdb.php File 118284
Edit Download
📄 class.wp-dependencies.php File 373
Edit Download
📄 class.wp-scripts.php File 343
Edit Download
📄 class.wp-styles.php File 338
Edit Download
📄 comment-template.php File 103104
Edit Download
📄 comment.php File 131547
Edit Download
📄 compat.php File 16376
Edit Download
📄 cron.php File 42658
Edit Download
📁 css Folder -
📁 customize Folder -
📄 date.php File 400
Edit Download
📄 default-constants.php File 11365
Edit Download
📄 default-filters.php File 36697
Edit Download
📄 default-widgets.php File 2295
Edit Download
📄 deprecated.php File 191563
Edit Download
📄 embed-template.php File 338
Edit Download
📄 embed.php File 38172
Edit Download
📄 error-protection.php File 4121
Edit Download
📄 feed-atom-comments.php File 5504
Edit Download
📄 feed-atom.php File 3121
Edit Download
📄 feed-rdf.php File 2668
Edit Download
📄 feed-rss.php File 1189
Edit Download
📄 feed-rss2-comments.php File 4136
Edit Download
📄 feed-rss2.php File 3799
Edit Download
📄 feed.php File 23411
Edit Download
📁 fonts Folder -
📄 fonts.php File 9751
Edit Download
📄 formatting.php File 342921
Edit Download
📄 functions.php File 287546
Edit Download
📄 functions.wp-scripts.php File 14558
Edit Download
📄 functions.wp-styles.php File 8583
Edit Download
📄 general-template.php File 172498
Edit Download
📄 global-styles-and-settings.php File 21261
Edit Download
📁 html-api Folder -
📄 http.php File 25312
Edit Download
📄 https-detection.php File 5857
Edit Download
📄 https-migration.php File 4741
Edit Download
📁 images Folder -
📁 interactivity-api Folder -
📁 js Folder -
📄 kses.php File 74472
Edit Download
📁 l10n Folder -
📄 l10n.php File 68530
Edit Download
📄 link-template.php File 157801
Edit Download
📄 load.php File 56440
Edit Download
📄 locale.php File 162
Edit Download
📄 media-template.php File 63060
Edit Download
📄 media.php File 220496
Edit Download
📄 meta.php File 65243
Edit Download
📄 ms-blogs.php File 25845
Edit Download
📄 ms-default-constants.php File 4921
Edit Download
📄 ms-default-filters.php File 6636
Edit Download
📄 ms-deprecated.php File 21759
Edit Download
📄 ms-files.php File 2744
Edit Download
📄 ms-functions.php File 91582
Edit Download
📄 ms-load.php File 19883
Edit Download
📄 ms-network.php File 3782
Edit Download
📄 ms-settings.php File 4197
Edit Download
📄 ms-site.php File 41320
Edit Download
📄 nav-menu-template.php File 25990
Edit Download
📄 nav-menu.php File 44373
Edit Download
📄 option.php File 103065
Edit Download
📁 php-compat Folder -
📄 pluggable-deprecated.php File 6324
Edit Download
📄 pluggable.php File 122700
Edit Download
📄 plugin.php File 35465
Edit Download
📁 pomo Folder -
📄 post-formats.php File 7102
Edit Download
📄 post-template.php File 68648
Edit Download
📄 post-thumbnail-template.php File 10879
Edit Download
📄 post.php File 291712
Edit Download
📄 query.php File 37035
Edit Download
📄 registration-functions.php File 200
Edit Download
📄 registration.php File 200
Edit Download
📁 rest-api Folder -
📄 rest-api.php File 100257
Edit Download
📄 revision.php File 30741
Edit Download
📄 rewrite.php File 19541
Edit Download
📄 robots-template.php File 5185
Edit Download
📄 rss-functions.php File 255
Edit Download
📄 rss.php File 23113
Edit Download
📄 script-loader.php File 133262
Edit Download
📄 script-modules.php File 7712
Edit Download
📄 session.php File 258
Edit Download
📄 shortcodes.php File 24051
Edit Download
📁 sitemaps Folder -
📄 sitemaps.php File 3238
Edit Download
📁 sodium_compat Folder -
📄 speculative-loading.php File 8558
Edit Download
📄 spl-autoload-compat.php File 441
Edit Download
📁 style-engine Folder -
📄 style-engine.php File 7563
Edit Download
📄 taxonomy.php File 176227
Edit Download
📄 template-canvas.php File 544
Edit Download
📄 template-loader.php File 3012
Edit Download
📄 template.php File 24154
Edit Download
📁 theme-compat Folder -
📄 theme-i18n.json File 1526
Edit Download
📄 theme-previews.php File 2832
Edit Download
📄 theme-templates.php File 6238
Edit Download
📄 theme.json File 8704
Edit Download
📄 theme.php File 134303
Edit Download
📄 update.php File 37503
Edit Download
📄 user.php File 175823
Edit Download
📄 vars.php File 6562
Edit Download
📄 version.php File 1090
Edit Download
📁 widgets Folder -
📄 widgets.php File 70719
Edit Download
📄 wp-db.php File 445
Edit Download
📄 wp-diff.php File 799
Edit Download
get_settings(); if ( $can_use_cached ) { wp_cache_set( $cache_key, $settings, $cache_group ); } } return _wp_array_get( $settings, $path, $settings ); } /** * Gets the styles resulting of merging core, theme, and user data. * * @since 5.9.0 * @since 6.3.0 the internal link format "var:preset|color|secondary" is resolved * to "var(--wp--preset--font-size--small)" so consumers don't have to. * @since 6.3.0 `transforms` is now usable in the `context` parameter. In case [`transforms`]['resolve_variables'] * is defined, variables are resolved to their value in the styles. * * @param array $path Path to the specific style to retrieve. Optional. * If empty, will return all styles. * @param array $context { * Metadata to know where to retrieve the $path from. Optional. * * @type string $block_name Which block to retrieve the styles from. * If empty, it'll return the styles for the global context. * @type string $origin Which origin to take data from. * Valid values are 'all' (core, theme, and user) or 'base' (core and theme). * If empty or unknown, 'all' is used. * @type array $transforms Which transformation(s) to apply. * Valid value is array( 'resolve-variables' ). * If defined, variables are resolved to their value in the styles. * } * @return mixed The styles array or individual style value to retrieve. */ function wp_get_global_styles( $path = array(), $context = array() ) { if ( ! empty( $context['block_name'] ) ) { $path = array_merge( array( 'blocks', $context['block_name'] ), $path ); } $origin = 'custom'; if ( isset( $context['origin'] ) && 'base' === $context['origin'] ) { $origin = 'theme'; } $resolve_variables = isset( $context['transforms'] ) && is_array( $context['transforms'] ) && in_array( 'resolve-variables', $context['transforms'], true ); $merged_data = WP_Theme_JSON_Resolver::get_merged_data( $origin ); if ( $resolve_variables ) { $merged_data = WP_Theme_JSON::resolve_variables( $merged_data ); } $styles = $merged_data->get_raw_data()['styles']; return _wp_array_get( $styles, $path, $styles ); } /** * Returns the stylesheet resulting of merging core, theme, and user data. * * @since 5.9.0 * @since 6.1.0 Added 'base-layout-styles' support. * @since 6.6.0 Resolves relative paths in theme.json styles to theme absolute paths. * * @param array $types Optional. Types of styles to load. * See {@see 'WP_Theme_JSON::get_stylesheet'} for all valid types. * If empty, it'll load the following: * - for themes without theme.json: 'variables', 'presets', 'base-layout-styles'. * - for themes with theme.json: 'variables', 'presets', 'styles'. * @return string Stylesheet. */ function wp_get_global_stylesheet( $types = array() ) { /* * Ignore cache when the development mode is set to 'theme', so it doesn't interfere with the theme * developer's workflow. */ $can_use_cached = empty( $types ) && ! wp_is_development_mode( 'theme' ); /* * By using the 'theme_json' group, this data is marked to be non-persistent across requests. * @see `wp_cache_add_non_persistent_groups()`. * * The rationale for this is to make sure derived data from theme.json * is always fresh from the potential modifications done via hooks * that can use dynamic data (modify the stylesheet depending on some option, * settings depending on user permissions, etc.). * See some of the existing hooks to modify theme.json behavior: * @see https://make.wordpress.org/core/2022/10/10/filters-for-theme-json-data/ * * A different alternative considered was to invalidate the cache upon certain * events such as options add/update/delete, user meta, etc. * It was judged not enough, hence this approach. * @see https://github.com/WordPress/gutenberg/pull/45372 */ $cache_group = 'theme_json'; $cache_key = 'wp_get_global_stylesheet'; if ( $can_use_cached ) { $cached = wp_cache_get( $cache_key, $cache_group ); if ( $cached ) { return $cached; } } $tree = WP_Theme_JSON_Resolver::resolve_theme_file_uris( WP_Theme_JSON_Resolver::get_merged_data() ); $supports_theme_json = wp_theme_has_theme_json(); if ( empty( $types ) && ! $supports_theme_json ) { $types = array( 'variables', 'presets', 'base-layout-styles' ); } elseif ( empty( $types ) ) { $types = array( 'variables', 'styles', 'presets' ); } /* * If variables are part of the stylesheet, then add them. * This is so themes without a theme.json still work as before 5.9: * they can override the default presets. * See https://core.trac.wordpress.org/ticket/54782 */ $styles_variables = ''; if ( in_array( 'variables', $types, true ) ) { /* * Only use the default, theme, and custom origins. Why? * Because styles for `blocks` origin are added at a later phase * (i.e. in the render cycle). Here, only the ones in use are rendered. * @see wp_add_global_styles_for_blocks */ $origins = array( 'default', 'theme', 'custom' ); $styles_variables = $tree->get_stylesheet( array( 'variables' ), $origins ); $types = array_diff( $types, array( 'variables' ) ); } /* * For the remaining types (presets, styles), we do consider origins: * * - themes without theme.json: only the classes for the presets defined by core * - themes with theme.json: the presets and styles classes, both from core and the theme */ $styles_rest = ''; if ( ! empty( $types ) ) { /* * Only use the default, theme, and custom origins. Why? * Because styles for `blocks` origin are added at a later phase * (i.e. in the render cycle). Here, only the ones in use are rendered. * @see wp_add_global_styles_for_blocks */ $origins = array( 'default', 'theme', 'custom' ); /* * If the theme doesn't have theme.json but supports both appearance tools and color palette, * the 'theme' origin should be included so color palette presets are also output. */ if ( ! $supports_theme_json && ( current_theme_supports( 'appearance-tools' ) || current_theme_supports( 'border' ) ) && current_theme_supports( 'editor-color-palette' ) ) { $origins = array( 'default', 'theme' ); } elseif ( ! $supports_theme_json ) { $origins = array( 'default' ); } $styles_rest = $tree->get_stylesheet( $types, $origins ); } $stylesheet = $styles_variables . $styles_rest; if ( $can_use_cached ) { wp_cache_set( $cache_key, $stylesheet, $cache_group ); } return $stylesheet; } /** * Adds global style rules to the inline style for each block. * * @since 6.1.0 * @since 6.7.0 Resolve relative paths in block styles. * * @global WP_Styles $wp_styles */ function wp_add_global_styles_for_blocks() { global $wp_styles; $tree = WP_Theme_JSON_Resolver::get_merged_data(); $tree = WP_Theme_JSON_Resolver::resolve_theme_file_uris( $tree ); $block_nodes = $tree->get_styles_block_nodes(); $can_use_cached = ! wp_is_development_mode( 'theme' ); $update_cache = false; if ( $can_use_cached ) { // Hash the merged WP_Theme_JSON data to bust cache on settings or styles change. $cache_hash = md5( wp_json_encode( $tree->get_raw_data() ) ); $cache_key = 'wp_styles_for_blocks'; $cached = get_transient( $cache_key ); // Reset the cached data if there is no value or if the hash has changed. if ( ! is_array( $cached ) || $cached['hash'] !== $cache_hash ) { $cached = array( 'hash' => $cache_hash, 'blocks' => array(), ); // Update the cache if the hash has changed. $update_cache = true; } } foreach ( $block_nodes as $metadata ) { if ( $can_use_cached ) { // Use the block name as the key for cached CSS data. Otherwise, use a hash of the metadata. $cache_node_key = isset( $metadata['name'] ) ? $metadata['name'] : md5( wp_json_encode( $metadata ) ); if ( isset( $cached['blocks'][ $cache_node_key ] ) ) { $block_css = $cached['blocks'][ $cache_node_key ]; } else { $block_css = $tree->get_styles_for_block( $metadata ); $cached['blocks'][ $cache_node_key ] = $block_css; // Update the cache if the cache contents have changed. $update_cache = true; } } else { $block_css = $tree->get_styles_for_block( $metadata ); } if ( ! wp_should_load_block_assets_on_demand() ) { wp_add_inline_style( 'global-styles', $block_css ); continue; } $stylesheet_handle = 'global-styles'; /* * When `wp_should_load_block_assets_on_demand()` is true, block styles are * enqueued for each block on the page in class WP_Block's render function. * This means there will be a handle in the styles queue for each of those blocks. * Block-specific global styles should be attached to the global-styles handle, but * only for blocks on the page, thus we check if the block's handle is in the queue * before adding the inline style. * This conditional loading only applies to core blocks. * TODO: Explore how this could be expanded to third-party blocks as well. */ if ( isset( $metadata['name'] ) ) { if ( str_starts_with( $metadata['name'], 'core/' ) ) { $block_name = str_replace( 'core/', '', $metadata['name'] ); $block_handle = 'wp-block-' . $block_name; if ( in_array( $block_handle, $wp_styles->queue, true ) ) { wp_add_inline_style( $stylesheet_handle, $block_css ); } } else { wp_add_inline_style( $stylesheet_handle, $block_css ); } } // The likes of block element styles from theme.json do not have $metadata['name'] set. if ( ! isset( $metadata['name'] ) && ! empty( $metadata['path'] ) ) { $block_name = wp_get_block_name_from_theme_json_path( $metadata['path'] ); if ( $block_name ) { if ( str_starts_with( $block_name, 'core/' ) ) { $block_name = str_replace( 'core/', '', $block_name ); $block_handle = 'wp-block-' . $block_name; if ( in_array( $block_handle, $wp_styles->queue, true ) ) { wp_add_inline_style( $stylesheet_handle, $block_css ); } } else { wp_add_inline_style( $stylesheet_handle, $block_css ); } } } } if ( $update_cache ) { set_transient( $cache_key, $cached ); } } /** * Gets the block name from a given theme.json path. * * @since 6.3.0 * @access private * * @param array $path An array of keys describing the path to a property in theme.json. * @return string Identified block name, or empty string if none found. */ function wp_get_block_name_from_theme_json_path( $path ) { // Block name is expected to be the third item after 'styles' and 'blocks'. if ( count( $path ) >= 3 && 'styles' === $path[0] && 'blocks' === $path[1] && str_contains( $path[2], '/' ) ) { return $path[2]; } /* * As fallback and for backward compatibility, allow any core block to be * at any position. */ $result = array_values( array_filter( $path, static function ( $item ) { if ( str_contains( $item, 'core/' ) ) { return true; } return false; } ) ); if ( isset( $result[0] ) ) { return $result[0]; } return ''; } /** * Checks whether a theme or its parent has a theme.json file. * * @since 6.2.0 * * @return bool Returns true if theme or its parent has a theme.json file, false otherwise. */ function wp_theme_has_theme_json() { static $theme_has_support = array(); $stylesheet = get_stylesheet(); if ( isset( $theme_has_support[ $stylesheet ] ) && /* * Ignore static cache when the development mode is set to 'theme', to avoid interfering with * the theme developer's workflow. */ ! wp_is_development_mode( 'theme' ) ) { return $theme_has_support[ $stylesheet ]; } $stylesheet_directory = get_stylesheet_directory(); $template_directory = get_template_directory(); // This is the same as get_theme_file_path(), which isn't available in load-styles.php context if ( $stylesheet_directory !== $template_directory && file_exists( $stylesheet_directory . '/theme.json' ) ) { $path = $stylesheet_directory . '/theme.json'; } else { $path = $template_directory . '/theme.json'; } /** This filter is documented in wp-includes/link-template.php */ $path = apply_filters( 'theme_file_path', $path, 'theme.json' ); $theme_has_support[ $stylesheet ] = file_exists( $path ); return $theme_has_support[ $stylesheet ]; } /** * Cleans the caches under the theme_json group. * * @since 6.2.0 */ function wp_clean_theme_json_cache() { wp_cache_delete( 'wp_get_global_stylesheet', 'theme_json' ); wp_cache_delete( 'wp_get_global_styles_svg_filters', 'theme_json' ); wp_cache_delete( 'wp_get_global_settings_custom', 'theme_json' ); wp_cache_delete( 'wp_get_global_settings_theme', 'theme_json' ); wp_cache_delete( 'wp_get_global_styles_custom_css', 'theme_json' ); wp_cache_delete( 'wp_get_theme_data_template_parts', 'theme_json' ); WP_Theme_JSON_Resolver::clean_cached_data(); } /** * Returns the current theme's wanted patterns (slugs) to be * registered from Pattern Directory. * * @since 6.3.0 * * @return string[] */ function wp_get_theme_directory_pattern_slugs() { return WP_Theme_JSON_Resolver::get_theme_data( array(), array( 'with_supports' => false ) )->get_patterns(); } /** * Returns the metadata for the custom templates defined by the theme via theme.json. * * @since 6.4.0 * * @return array Associative array of `$template_name => $template_data` pairs, * with `$template_data` having "title" and "postTypes" fields. */ function wp_get_theme_data_custom_templates() { return WP_Theme_JSON_Resolver::get_theme_data( array(), array( 'with_supports' => false ) )->get_custom_templates(); } /** * Returns the metadata for the template parts defined by the theme. * * @since 6.4.0 * * @return array Associative array of `$part_name => $part_data` pairs, * with `$part_data` having "title" and "area" fields. */ function wp_get_theme_data_template_parts() { $cache_group = 'theme_json'; $cache_key = 'wp_get_theme_data_template_parts'; $can_use_cached = ! wp_is_development_mode( 'theme' ); $metadata = false; if ( $can_use_cached ) { $metadata = wp_cache_get( $cache_key, $cache_group ); if ( false !== $metadata ) { return $metadata; } } if ( false === $metadata ) { $metadata = WP_Theme_JSON_Resolver::get_theme_data( array(), array( 'with_supports' => false ) )->get_template_parts(); if ( $can_use_cached ) { wp_cache_set( $cache_key, $metadata, $cache_group ); } } return $metadata; } /** * Determines the CSS selector for the block type and property provided, * returning it if available. * * @since 6.3.0 * * @param WP_Block_Type $block_type The block's type. * @param string|array $target The desired selector's target, `root` or array path. * @param boolean $fallback Whether to fall back to broader selector. * * @return string|null CSS selector or `null` if no selector available. */ function wp_get_block_css_selector( $block_type, $target = 'root', $fallback = false ) { if ( empty( $target ) ) { return null; } $has_selectors = ! empty( $block_type->selectors ); // Root Selector. // Calculated before returning as it can be used as fallback for // feature selectors later on. $root_selector = null; if ( $has_selectors && isset( $block_type->selectors['root'] ) ) { // Use the selectors API if available. $root_selector = $block_type->selectors['root']; } elseif ( isset( $block_type->supports['__experimentalSelector'] ) && is_string( $block_type->supports['__experimentalSelector'] ) ) { // Use the old experimental selector supports property if set. $root_selector = $block_type->supports['__experimentalSelector']; } else { // If no root selector found, generate default block class selector. $block_name = str_replace( '/', '-', str_replace( 'core/', '', $block_type->name ) ); $root_selector = ".wp-block-{$block_name}"; } // Return selector if it's the root target we are looking for. if ( 'root' === $target ) { return $root_selector; } // If target is not `root` we have a feature or subfeature as the target. // If the target is a string convert to an array. if ( is_string( $target ) ) { $target = explode( '.', $target ); } // Feature Selectors ( May fallback to root selector ). if ( 1 === count( $target ) ) { $fallback_selector = $fallback ? $root_selector : null; // Prefer the selectors API if available. if ( $has_selectors ) { // Look for selector under `feature.root`. $path = array( current( $target ), 'root' ); $feature_selector = _wp_array_get( $block_type->selectors, $path, null ); if ( $feature_selector ) { return $feature_selector; } // Check if feature selector is set via shorthand. $feature_selector = _wp_array_get( $block_type->selectors, $target, null ); return is_string( $feature_selector ) ? $feature_selector : $fallback_selector; } // Try getting old experimental supports selector value. $path = array( current( $target ), '__experimentalSelector' ); $feature_selector = _wp_array_get( $block_type->supports, $path, null ); // Nothing to work with, provide fallback or null. if ( null === $feature_selector ) { return $fallback_selector; } // Scope the feature selector by the block's root selector. return WP_Theme_JSON::scope_selector( $root_selector, $feature_selector ); } // Subfeature selector // This may fallback either to parent feature or root selector. $subfeature_selector = null; // Use selectors API if available. if ( $has_selectors ) { $subfeature_selector = _wp_array_get( $block_type->selectors, $target, null ); } // Only return if we have a subfeature selector. if ( $subfeature_selector ) { return $subfeature_selector; } // To this point we don't have a subfeature selector. If a fallback // has been requested, remove subfeature from target path and return // results of a call for the parent feature's selector. if ( $fallback ) { return wp_get_block_css_selector( $block_type, $target[0], $fallback ); } return null; }