Priority File Manager

πŸ“ public_html
Base Directory:
/home/toolrmtm/crazyespresso.com/wp-includes
NameTypeSizeActions
πŸ“ .. Folder -
πŸ“ ID3 Folder -
πŸ“ IXR Folder -
πŸ“ PHPMailer Folder -
πŸ“ Requests Folder -
πŸ“ SimplePie Folder -
πŸ“ Text Folder -
πŸ“ abilities-api Folder -
πŸ“„ abilities-api.php File 24369
Edit Download
πŸ“„ abilities.php File 7983
Edit Download
πŸ“„ admin-bar.php File 36966
Edit Download
πŸ“ assets Folder -
πŸ“„ atomlib.php File 12181
Edit Download
πŸ“„ author-template.php File 19391
Edit Download
πŸ“ block-bindings Folder -
πŸ“„ block-bindings.php File 7526
Edit Download
πŸ“„ block-editor.php File 29282
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 62484
Edit Download
πŸ“„ block-template.php File 15359
Edit Download
πŸ“ blocks Folder -
πŸ“„ blocks.php File 114739
Edit Download
πŸ“„ bookmark-template.php File 12768
Edit Download
πŸ“„ bookmark.php File 15427
Edit Download
πŸ“„ cache-compat.php File 10078
Edit Download
πŸ“„ cache.php File 13486
Edit Download
πŸ“„ canonical.php File 34645
Edit Download
πŸ“„ capabilities.php File 43652
Edit Download
πŸ“„ category-template.php File 57045
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 43676
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 8482
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 4713
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 11516
Edit Download
πŸ“„ class-wp-block-pattern-categories-registry.php File 5450
Edit Download
πŸ“„ class-wp-block-patterns-registry.php File 10851
Edit Download
πŸ“„ class-wp-block-processor.php File 69469
Edit Download
πŸ“„ class-wp-block-styles-registry.php File 6497
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 7193
Edit Download
πŸ“„ class-wp-block-type-registry.php File 5030
Edit Download
πŸ“„ class-wp-block-type.php File 17265
Edit Download
πŸ“„ class-wp-block.php File 24812
Edit Download
πŸ“„ class-wp-classic-to-block-menu-converter.php File 4070
Edit Download
πŸ“„ class-wp-comment-query.php File 48804
Edit Download
πŸ“„ class-wp-comment.php File 9437
Edit Download
πŸ“„ class-wp-customize-control.php File 26119
Edit Download
πŸ“„ class-wp-customize-manager.php File 203139
Edit Download
πŸ“„ class-wp-customize-nav-menus.php File 58013
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 72607
Edit Download
πŸ“„ class-wp-date-query.php File 36147
Edit Download
πŸ“„ class-wp-dependencies.php File 15381
Edit Download
πŸ“„ class-wp-dependency.php File 2633
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 3304
Edit Download
πŸ“„ class-wp-feed-cache.php File 969
Edit Download
πŸ“„ class-wp-hook.php File 16674
Edit Download
πŸ“„ class-wp-http-cookie.php File 7389
Edit Download
πŸ“„ class-wp-http-curl.php File 13261
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 41570
Edit Download
πŸ“„ class-wp-image-editor-gd.php File 20705
Edit Download
πŸ“„ class-wp-image-editor-imagick.php File 36977
Edit Download
πŸ“„ class-wp-image-editor.php File 17415
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 30533
Edit Download
πŸ“„ class-wp-metadata-lazyloader.php File 6833
Edit Download
πŸ“„ class-wp-navigation-fallback.php File 9193
Edit Download
πŸ“„ class-wp-network-query.php File 19887
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 31670
Edit Download
πŸ“„ class-wp-paused-extensions-storage.php File 5111
Edit Download
πŸ“„ class-wp-phpmailer.php File 4348
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 6491
Edit Download
πŸ“„ class-wp-query.php File 163744
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 63687
Edit Download
πŸ“„ class-wp-role.php File 2523
Edit Download
πŸ“„ class-wp-roles.php File 9394
Edit Download
πŸ“„ class-wp-script-modules.php File 31882
Edit Download
πŸ“„ class-wp-scripts.php File 34177
Edit Download
πŸ“„ class-wp-session-tokens.php File 7319
Edit Download
πŸ“„ class-wp-simplepie-file.php File 3552
Edit Download
πŸ“„ class-wp-simplepie-sanitize-kses.php File 1910
Edit Download
πŸ“„ class-wp-site-query.php File 31655
Edit Download
πŸ“„ class-wp-site.php File 7467
Edit Download
πŸ“„ class-wp-speculation-rules.php File 7527
Edit Download
πŸ“„ class-wp-styles.php File 12144
Edit Download
πŸ“„ class-wp-tax-query.php File 19577
Edit Download
πŸ“„ class-wp-taxonomy.php File 18559
Edit Download
πŸ“„ class-wp-term-query.php File 40953
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 164347
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 3011
Edit Download
πŸ“„ class-wp-user-query.php File 44166
Edit Download
πŸ“„ class-wp-user-request.php File 2305
Edit Download
πŸ“„ class-wp-user.php File 23044
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 215447
Edit Download
πŸ“„ class-wp.php File 26481
Edit Download
πŸ“„ class-wpdb.php File 118627
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 103145
Edit Download
πŸ“„ comment.php File 134069
Edit Download
πŸ“„ compat-utf8.php File 19554
Edit Download
πŸ“„ compat.php File 17830
Edit Download
πŸ“„ cron.php File 42988
Edit Download
πŸ“ css Folder -
πŸ“ customize Folder -
πŸ“„ date.php File 400
Edit Download
πŸ“„ default-constants.php File 11365
Edit Download
πŸ“„ default-filters.php File 37910
Edit Download
πŸ“„ default-widgets.php File 2295
Edit Download
πŸ“„ deprecated.php File 192644
Edit Download
πŸ“„ embed-template.php File 338
Edit Download
πŸ“„ embed.php File 38911
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 23579
Edit Download
πŸ“ fonts Folder -
πŸ“„ fonts.php File 9790
Edit Download
πŸ“„ formatting.php File 354741
Edit Download
πŸ“„ functions.php File 288600
Edit Download
πŸ“„ functions.wp-scripts.php File 15311
Edit Download
πŸ“„ functions.wp-styles.php File 8641
Edit Download
πŸ“„ general-template.php File 173004
Edit Download
πŸ“„ global-styles-and-settings.php File 21204
Edit Download
πŸ“ html-api Folder -
πŸ“„ http.php File 25878
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 83677
Edit Download
πŸ“ l10n Folder -
πŸ“„ l10n.php File 68797
Edit Download
πŸ“„ link-template.php File 160117
Edit Download
πŸ“„ load.php File 56510
Edit Download
πŸ“„ locale.php File 162
Edit Download
πŸ“„ media-template.php File 63197
Edit Download
πŸ“„ media.php File 221186
Edit Download
πŸ“„ meta.php File 66556
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 2857
Edit Download
πŸ“„ ms-functions.php File 91842
Edit Download
πŸ“„ ms-load.php File 19887
Edit Download
πŸ“„ ms-network.php File 3782
Edit Download
πŸ“„ ms-settings.php File 4204
Edit Download
πŸ“„ ms-site.php File 41717
Edit Download
πŸ“„ nav-menu-template.php File 25990
Edit Download
πŸ“„ nav-menu.php File 44373
Edit Download
πŸ“„ option.php File 105035
Edit Download
πŸ“ php-compat Folder -
πŸ“„ pluggable-deprecated.php File 6324
Edit Download
πŸ“„ pluggable.php File 127440
Edit Download
πŸ“„ plugin.php File 36501
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 296072
Edit Download
πŸ“„ query.php File 37095
Edit Download
πŸ“„ registration-functions.php File 200
Edit Download
πŸ“„ registration.php File 200
Edit Download
πŸ“ rest-api Folder -
πŸ“„ rest-api.php File 100654
Edit Download
πŸ“„ revision.php File 30741
Edit Download
πŸ“„ rewrite.php File 19490
Edit Download
πŸ“„ robots-template.php File 5185
Edit Download
πŸ“„ rss-functions.php File 255
Edit Download
πŸ“„ rss.php File 23203
Edit Download
πŸ“„ script-loader.php File 153993
Edit Download
πŸ“„ script-modules.php File 9911
Edit Download
πŸ“„ session.php File 258
Edit Download
πŸ“„ shortcodes.php File 24050
Edit Download
πŸ“ sitemaps Folder -
πŸ“„ sitemaps.php File 3238
Edit Download
πŸ“ sodium_compat Folder -
πŸ“„ speculative-loading.php File 8600
Edit Download
πŸ“„ spl-autoload-compat.php File 441
Edit Download
πŸ“ style-engine Folder -
πŸ“„ style-engine.php File 7563
Edit Download
πŸ“„ taxonomy.php File 177058
Edit Download
πŸ“„ template-canvas.php File 544
Edit Download
πŸ“„ template-loader.php File 3929
Edit Download
πŸ“„ template.php File 36834
Edit Download
πŸ“ theme-compat Folder -
πŸ“„ theme-i18n.json File 1526
Edit Download
πŸ“„ theme-previews.php File 2910
Edit Download
πŸ“„ theme-templates.php File 6238
Edit Download
πŸ“„ theme.json File 8921
Edit Download
πŸ“„ theme.php File 135008
Edit Download
πŸ“„ update.php File 38353
Edit Download
πŸ“„ user.php File 178062
Edit Download
πŸ“„ utf8.php File 7260
Edit Download
πŸ“„ vars.php File 6562
Edit Download
πŸ“„ version.php File 1104
Edit Download
πŸ“ widgets Folder -
πŸ“„ widgets.php File 71129
Edit Download
πŸ“„ wp-db.php File 445
Edit Download
πŸ“„ wp-diff.php File 799
Edit Download
has_archive ) { return ''; } return get_archive_template(); } /** * Retrieves path of author template in current or parent template. * * The hierarchy for this template looks like: * * 1. author-{nicename}.php * 2. author-{id}.php * 3. author.php * * An example of this is: * * 1. author-john.php * 2. author-1.php * 3. author.php * * The template hierarchy and template path are filterable via the {@see '$type_template_hierarchy'} * and {@see '$type_template'} dynamic hooks, where `$type` is 'author'. * * @since 1.5.0 * * @see get_query_template() * * @return string Full path to author template file. */ function get_author_template() { $author = get_queried_object(); $templates = array(); if ( $author instanceof WP_User ) { $templates[] = "author-{$author->user_nicename}.php"; $templates[] = "author-{$author->ID}.php"; } $templates[] = 'author.php'; return get_query_template( 'author', $templates ); } /** * Retrieves path of category template in current or parent template. * * The hierarchy for this template looks like: * * 1. category-{slug}.php * 2. category-{id}.php * 3. category.php * * An example of this is: * * 1. category-news.php * 2. category-2.php * 3. category.php * * The template hierarchy and template path are filterable via the {@see '$type_template_hierarchy'} * and {@see '$type_template'} dynamic hooks, where `$type` is 'category'. * * @since 1.5.0 * @since 4.7.0 The decoded form of `category-{slug}.php` was added to the top of the * template hierarchy when the category slug contains multibyte characters. * * @see get_query_template() * * @return string Full path to category template file. */ function get_category_template() { $category = get_queried_object(); $templates = array(); if ( ! empty( $category->slug ) ) { $slug_decoded = urldecode( $category->slug ); if ( $slug_decoded !== $category->slug ) { $templates[] = "category-{$slug_decoded}.php"; } $templates[] = "category-{$category->slug}.php"; $templates[] = "category-{$category->term_id}.php"; } $templates[] = 'category.php'; return get_query_template( 'category', $templates ); } /** * Retrieves path of tag template in current or parent template. * * The hierarchy for this template looks like: * * 1. tag-{slug}.php * 2. tag-{id}.php * 3. tag.php * * An example of this is: * * 1. tag-wordpress.php * 2. tag-3.php * 3. tag.php * * The template hierarchy and template path are filterable via the {@see '$type_template_hierarchy'} * and {@see '$type_template'} dynamic hooks, where `$type` is 'tag'. * * @since 2.3.0 * @since 4.7.0 The decoded form of `tag-{slug}.php` was added to the top of the * template hierarchy when the tag slug contains multibyte characters. * * @see get_query_template() * * @return string Full path to tag template file. */ function get_tag_template() { $tag = get_queried_object(); $templates = array(); if ( ! empty( $tag->slug ) ) { $slug_decoded = urldecode( $tag->slug ); if ( $slug_decoded !== $tag->slug ) { $templates[] = "tag-{$slug_decoded}.php"; } $templates[] = "tag-{$tag->slug}.php"; $templates[] = "tag-{$tag->term_id}.php"; } $templates[] = 'tag.php'; return get_query_template( 'tag', $templates ); } /** * Retrieves path of custom taxonomy term template in current or parent template. * * The hierarchy for this template looks like: * * 1. taxonomy-{taxonomy_slug}-{term_slug}.php * 2. taxonomy-{taxonomy_slug}-{term_id}.php * 3. taxonomy-{taxonomy_slug}.php * 4. taxonomy.php * * An example of this is: * * 1. taxonomy-location-texas.php * 2. taxonomy-location-67.php * 3. taxonomy-location.php * 4. taxonomy.php * * The template hierarchy and template path are filterable via the {@see '$type_template_hierarchy'} * and {@see '$type_template'} dynamic hooks, where `$type` is 'taxonomy'. * * @since 2.5.0 * @since 4.7.0 The decoded form of `taxonomy-{taxonomy_slug}-{term_slug}.php` was added to the top of the * template hierarchy when the term slug contains multibyte characters. * @since 6.9.0 Added `taxonomy-{taxonomy_slug}-{term_id}.php` to the hierarchy. * * @see get_query_template() * * @return string Full path to custom taxonomy term template file. */ function get_taxonomy_template() { $term = get_queried_object(); $templates = array(); if ( ! empty( $term->slug ) ) { $taxonomy = $term->taxonomy; $slug_decoded = urldecode( $term->slug ); if ( $slug_decoded !== $term->slug ) { $templates[] = "taxonomy-$taxonomy-{$slug_decoded}.php"; } $templates[] = "taxonomy-$taxonomy-{$term->slug}.php"; $templates[] = "taxonomy-$taxonomy-{$term->term_id}.php"; $templates[] = "taxonomy-$taxonomy.php"; } $templates[] = 'taxonomy.php'; return get_query_template( 'taxonomy', $templates ); } /** * Retrieves path of date template in current or parent template. * * The template hierarchy and template path are filterable via the {@see '$type_template_hierarchy'} * and {@see '$type_template'} dynamic hooks, where `$type` is 'date'. * * @since 1.5.0 * * @see get_query_template() * * @return string Full path to date template file. */ function get_date_template() { return get_query_template( 'date' ); } /** * Retrieves path of home template in current or parent template. * * The template hierarchy and template path are filterable via the {@see '$type_template_hierarchy'} * and {@see '$type_template'} dynamic hooks, where `$type` is 'home'. * * @since 1.5.0 * * @see get_query_template() * * @return string Full path to home template file. */ function get_home_template() { $templates = array( 'home.php', 'index.php' ); return get_query_template( 'home', $templates ); } /** * Retrieves path of front page template in current or parent template. * * The template hierarchy and template path are filterable via the {@see '$type_template_hierarchy'} * and {@see '$type_template'} dynamic hooks, where `$type` is 'frontpage'. * * @since 3.0.0 * * @see get_query_template() * * @return string Full path to front page template file. */ function get_front_page_template() { $templates = array( 'front-page.php' ); return get_query_template( 'frontpage', $templates ); } /** * Retrieves path of Privacy Policy page template in current or parent template. * * The template hierarchy and template path are filterable via the {@see '$type_template_hierarchy'} * and {@see '$type_template'} dynamic hooks, where `$type` is 'privacypolicy'. * * @since 5.2.0 * * @see get_query_template() * * @return string Full path to privacy policy template file. */ function get_privacy_policy_template() { $templates = array( 'privacy-policy.php' ); return get_query_template( 'privacypolicy', $templates ); } /** * Retrieves path of page template in current or parent template. * * Note: For block themes, use locate_block_template() function instead. * * The hierarchy for this template looks like: * * 1. {Page Template}.php * 2. page-{page_name}.php * 3. page-{id}.php * 4. page.php * * An example of this is: * * 1. page-templates/full-width.php * 2. page-about.php * 3. page-4.php * 4. page.php * * The template hierarchy and template path are filterable via the {@see '$type_template_hierarchy'} * and {@see '$type_template'} dynamic hooks, where `$type` is 'page'. * * @since 1.5.0 * @since 4.7.0 The decoded form of `page-{page_name}.php` was added to the top of the * template hierarchy when the page name contains multibyte characters. * * @see get_query_template() * * @return string Full path to page template file. */ function get_page_template() { $id = get_queried_object_id(); $template = get_page_template_slug(); $pagename = get_query_var( 'pagename' ); if ( ! $pagename && $id ) { /* * If a static page is set as the front page, $pagename will not be set. * Retrieve it from the queried object. */ $post = get_queried_object(); if ( $post ) { $pagename = $post->post_name; } } $templates = array(); if ( $template && 0 === validate_file( $template ) ) { $templates[] = $template; } if ( $pagename ) { $pagename_decoded = urldecode( $pagename ); if ( $pagename_decoded !== $pagename ) { $templates[] = "page-{$pagename_decoded}.php"; } $templates[] = "page-{$pagename}.php"; } if ( $id ) { $templates[] = "page-{$id}.php"; } $templates[] = 'page.php'; return get_query_template( 'page', $templates ); } /** * Retrieves path of search template in current or parent template. * * The template hierarchy and template path are filterable via the {@see '$type_template_hierarchy'} * and {@see '$type_template'} dynamic hooks, where `$type` is 'search'. * * @since 1.5.0 * * @see get_query_template() * * @return string Full path to search template file. */ function get_search_template() { return get_query_template( 'search' ); } /** * Retrieves path of single template in current or parent template. Applies to single Posts, * single Attachments, and single custom post types. * * The hierarchy for this template looks like: * * 1. {Post Type Template}.php * 2. single-{post_type}-{post_name}.php * 3. single-{post_type}.php * 4. single.php * * An example of this is: * * 1. templates/full-width.php * 2. single-post-hello-world.php * 3. single-post.php * 4. single.php * * The template hierarchy and template path are filterable via the {@see '$type_template_hierarchy'} * and {@see '$type_template'} dynamic hooks, where `$type` is 'single'. * * @since 1.5.0 * @since 4.4.0 `single-{post_type}-{post_name}.php` was added to the top of the template hierarchy. * @since 4.7.0 The decoded form of `single-{post_type}-{post_name}.php` was added to the top of the * template hierarchy when the post name contains multibyte characters. * @since 4.7.0 `{Post Type Template}.php` was added to the top of the template hierarchy. * * @see get_query_template() * * @return string Full path to single template file. */ function get_single_template() { $object = get_queried_object(); $templates = array(); if ( ! empty( $object->post_type ) ) { $template = get_page_template_slug( $object ); if ( $template && 0 === validate_file( $template ) ) { $templates[] = $template; } $name_decoded = urldecode( $object->post_name ); if ( $name_decoded !== $object->post_name ) { $templates[] = "single-{$object->post_type}-{$name_decoded}.php"; } $templates[] = "single-{$object->post_type}-{$object->post_name}.php"; $templates[] = "single-{$object->post_type}.php"; } $templates[] = 'single.php'; return get_query_template( 'single', $templates ); } /** * Retrieves an embed template path in the current or parent template. * * The hierarchy for this template looks like: * * 1. embed-{post_type}-{post_format}.php * 2. embed-{post_type}.php * 3. embed.php * * An example of this is: * * 1. embed-post-audio.php * 2. embed-post.php * 3. embed.php * * The template hierarchy and template path are filterable via the {@see '$type_template_hierarchy'} * and {@see '$type_template'} dynamic hooks, where `$type` is 'embed'. * * @since 4.5.0 * * @see get_query_template() * * @return string Full path to embed template file. */ function get_embed_template() { $object = get_queried_object(); $templates = array(); if ( ! empty( $object->post_type ) ) { $post_format = get_post_format( $object ); if ( $post_format ) { $templates[] = "embed-{$object->post_type}-{$post_format}.php"; } $templates[] = "embed-{$object->post_type}.php"; } $templates[] = 'embed.php'; return get_query_template( 'embed', $templates ); } /** * Retrieves the path of the singular template in current or parent template. * * The template hierarchy and template path are filterable via the {@see '$type_template_hierarchy'} * and {@see '$type_template'} dynamic hooks, where `$type` is 'singular'. * * @since 4.3.0 * * @see get_query_template() * * @return string Full path to singular template file. */ function get_singular_template() { return get_query_template( 'singular' ); } /** * Retrieves path of attachment template in current or parent template. * * The hierarchy for this template looks like: * * 1. {mime_type}-{sub_type}.php * 2. {sub_type}.php * 3. {mime_type}.php * 4. attachment.php * * An example of this is: * * 1. image-jpeg.php * 2. jpeg.php * 3. image.php * 4. attachment.php * * The template hierarchy and template path are filterable via the {@see '$type_template_hierarchy'} * and {@see '$type_template'} dynamic hooks, where `$type` is 'attachment'. * * @since 2.0.0 * @since 4.3.0 The order of the mime type logic was reversed so the hierarchy is more logical. * * @see get_query_template() * * @return string Full path to attachment template file. */ function get_attachment_template() { $attachment = get_queried_object(); $templates = array(); if ( $attachment ) { if ( str_contains( $attachment->post_mime_type, '/' ) ) { list( $type, $subtype ) = explode( '/', $attachment->post_mime_type ); } else { list( $type, $subtype ) = array( $attachment->post_mime_type, '' ); } if ( ! empty( $subtype ) ) { $templates[] = "{$type}-{$subtype}.php"; $templates[] = "{$subtype}.php"; } $templates[] = "{$type}.php"; } $templates[] = 'attachment.php'; return get_query_template( 'attachment', $templates ); } /** * Set up the globals used for template loading. * * @since 6.5.0 * * @global string $wp_stylesheet_path Path to current theme's stylesheet directory. * @global string $wp_template_path Path to current theme's template directory. */ function wp_set_template_globals() { global $wp_stylesheet_path, $wp_template_path; $wp_stylesheet_path = get_stylesheet_directory(); $wp_template_path = get_template_directory(); } /** * Retrieves the name of the highest priority template file that exists. * * Searches in the stylesheet directory before the template directory and * wp-includes/theme-compat so that themes which inherit from a parent theme * can just overload one file. * * @since 2.7.0 * @since 5.5.0 The `$args` parameter was added. * * @global string $wp_stylesheet_path Path to current theme's stylesheet directory. * @global string $wp_template_path Path to current theme's template directory. * * @param string|array $template_names Template file(s) to search for, in order. * @param bool $load If true the template file will be loaded if it is found. * @param bool $load_once Whether to require_once or require. Has no effect if `$load` is false. * Default true. * @param array $args Optional. Additional arguments passed to the template. * Default empty array. * @return string The template filename if one is located. */ function locate_template( $template_names, $load = false, $load_once = true, $args = array() ) { global $wp_stylesheet_path, $wp_template_path; if ( ! isset( $wp_stylesheet_path ) || ! isset( $wp_template_path ) ) { wp_set_template_globals(); } $is_child_theme = is_child_theme(); $located = ''; foreach ( (array) $template_names as $template_name ) { if ( ! $template_name ) { continue; } if ( file_exists( $wp_stylesheet_path . '/' . $template_name ) ) { $located = $wp_stylesheet_path . '/' . $template_name; break; } elseif ( $is_child_theme && file_exists( $wp_template_path . '/' . $template_name ) ) { $located = $wp_template_path . '/' . $template_name; break; } elseif ( file_exists( ABSPATH . WPINC . '/theme-compat/' . $template_name ) ) { $located = ABSPATH . WPINC . '/theme-compat/' . $template_name; break; } } if ( $load && '' !== $located ) { load_template( $located, $load_once, $args ); } return $located; } /** * Requires the template file with WordPress environment. * * The globals are set up for the template file to ensure that the WordPress * environment is available from within the function. The query variables are * also available. * * @since 1.5.0 * @since 5.5.0 The `$args` parameter was added. * * @global array $posts * @global WP_Post $post Global post object. * @global bool $wp_did_header * @global WP_Query $wp_query WordPress Query object. * @global WP_Rewrite $wp_rewrite WordPress rewrite component. * @global wpdb $wpdb WordPress database abstraction object. * @global string $wp_version * @global WP $wp Current WordPress environment instance. * @global int $id * @global WP_Comment $comment Global comment object. * @global int $user_ID * * @param string $_template_file Path to template file. * @param bool $load_once Whether to require_once or require. Default true. * @param array $args Optional. Additional arguments passed to the template. * Default empty array. */ function load_template( $_template_file, $load_once = true, $args = array() ) { global $posts, $post, $wp_did_header, $wp_query, $wp_rewrite, $wpdb, $wp_version, $wp, $id, $comment, $user_ID; if ( is_array( $wp_query->query_vars ) ) { /* * This use of extract() cannot be removed. There are many possible ways that * templates could depend on variables that it creates existing, and no way to * detect and deprecate it. * * Passing the EXTR_SKIP flag is the safest option, ensuring globals and * function variables cannot be overwritten. */ // phpcs:ignore WordPress.PHP.DontExtract.extract_extract extract( $wp_query->query_vars, EXTR_SKIP ); } if ( isset( $s ) ) { $s = esc_attr( $s ); } /** * Fires before a template file is loaded. * * @since 6.1.0 * * @param string $_template_file The full path to the template file. * @param bool $load_once Whether to require_once or require. * @param array $args Additional arguments passed to the template. */ do_action( 'wp_before_load_template', $_template_file, $load_once, $args ); if ( $load_once ) { require_once $_template_file; } else { require $_template_file; } /** * Fires after a template file is loaded. * * @since 6.1.0 * * @param string $_template_file The full path to the template file. * @param bool $load_once Whether to require_once or require. * @param array $args Additional arguments passed to the template. */ do_action( 'wp_after_load_template', $_template_file, $load_once, $args ); } /** * Checks whether the template should be output buffered for enhancement. * * By default, an output buffer is only started if a {@see 'wp_template_enhancement_output_buffer'} filter has been * added by the time a template is included at the {@see 'wp_before_include_template'} action. This allows template * responses to be streamed as much as possible when no template enhancements are registered to apply. * * @since 6.9.0 * * @return bool Whether the template should be output-buffered for enhancement. */ function wp_should_output_buffer_template_for_enhancement(): bool { /** * Filters whether the template should be output-buffered for enhancement. * * By default, an output buffer is only started if a {@see 'wp_template_enhancement_output_buffer'} filter has been * added or if a plugin has added a {@see 'wp_finalized_template_enhancement_output_buffer'} action. For this * default to apply, either of the hooks must be added by the time the template is included at the * {@see 'wp_before_include_template'} action. This allows template responses to be streamed unless the there is * code which depends on an output buffer being opened. This filter allows a site to opt in to adding such template * enhancement filters later during the rendering of the template. * * @since 6.9.0 * * @param bool $use_output_buffer Whether an output buffer is started. */ return (bool) apply_filters( 'wp_should_output_buffer_template_for_enhancement', has_filter( 'wp_template_enhancement_output_buffer' ) || has_action( 'wp_finalized_template_enhancement_output_buffer' ) ); } /** * Starts the template enhancement output buffer. * * This function is called immediately before the template is included. * * @since 6.9.0 * * @return bool Whether the output buffer successfully started. */ function wp_start_template_enhancement_output_buffer(): bool { if ( ! wp_should_output_buffer_template_for_enhancement() ) { return false; } $started = ob_start( 'wp_finalize_template_enhancement_output_buffer', 0, // Unlimited buffer size so that entire output is passed to the filter. /* * Instead of the default PHP_OUTPUT_HANDLER_STDFLAGS (cleanable, flushable, and removable) being used for * flags, the PHP_OUTPUT_HANDLER_FLUSHABLE flag must be omitted. If the buffer were flushable, then each time * that ob_flush() is called, a fragment of the output would be sent into the output buffer callback. This * output buffer is intended to capture the entire response for processing, as indicated by the chunk size of 0. * So the buffer does not allow flushing to ensure the entire buffer can be processed, such as for optimizing an * entire HTML document, where markup in the HEAD may need to be adjusted based on markup that appears late in * the BODY. * * If this ends up being problematic, then PHP_OUTPUT_HANDLER_FLUSHABLE could be added to the $flags and the * output buffer callback could check if the phase is PHP_OUTPUT_HANDLER_FLUSH and abort any subsequent * processing while also emitting a _doing_it_wrong(). * * The output buffer needs to be removable because WordPress calls wp_ob_end_flush_all() and then calls * wp_cache_close(). If the buffers are not all flushed before wp_cache_close() is closed, then some output buffer * handlers (e.g. for caching plugins) may fail to be able to store the page output in the object cache. * See . */ PHP_OUTPUT_HANDLER_STDFLAGS ^ PHP_OUTPUT_HANDLER_FLUSHABLE ); if ( $started ) { /** * Fires when the template enhancement output buffer has started. * * @since 6.9.0 */ do_action( 'wp_template_enhancement_output_buffer_started' ); } return $started; } /** * Finalizes the template enhancement output buffer. * * Checks to see if the output buffer is complete and contains HTML. If so, runs the content through * the `wp_template_enhancement_output_buffer` filter. If not, the original content is returned. * * @since 6.9.0 * * @see wp_start_template_enhancement_output_buffer() * * @param string $output Output buffer. * @param int $phase Phase. * @return string Finalized output buffer. */ function wp_finalize_template_enhancement_output_buffer( string $output, int $phase ): string { // When the output is being cleaned (e.g. pending template is replaced with error page), do not send it through the filter. if ( ( $phase & PHP_OUTPUT_HANDLER_CLEAN ) !== 0 ) { return $output; } // Detect if the response is an HTML content type. $is_html_content_type = null; $html_content_types = array( 'text/html', 'application/xhtml+xml' ); foreach ( headers_list() as $header ) { $header_parts = explode( ':', strtolower( $header ), 2 ); if ( count( $header_parts ) === 2 && 'content-type' === $header_parts[0] ) { /* * This is looking for very specific content types, therefore it * doesn’t need to fully parse the header’s value. Instead, it needs * only assert that the content type is one of the static HTML types. * * Example: * * Content-Type: text/html; charset=utf8 * Content-Type: text/html ;charset=latin4 * Content-Type:application/xhtml+xml */ $media_type = trim( strtok( $header_parts[1], ';' ), " \t" ); $is_html_content_type = in_array( $media_type, $html_content_types, true ); break; // PHP only sends the first Content-Type header in the list. } } if ( null === $is_html_content_type ) { $is_html_content_type = in_array( ini_get( 'default_mimetype' ), $html_content_types, true ); } // If the content type is not HTML, short-circuit since it is not relevant for enhancement. if ( ! $is_html_content_type ) { /** This action is documented in wp-includes/template.php */ do_action( 'wp_finalized_template_enhancement_output_buffer', $output ); return $output; } $filtered_output = $output; $did_just_catch = false; $error_log = array(); set_error_handler( static function ( int $level, string $message, ?string $file = null, ?int $line = null ) use ( &$error_log, &$did_just_catch ) { // Switch a user error to an exception so that it can be caught and the buffer can be returned. if ( E_USER_ERROR === $level ) { throw new Exception( __( 'User error triggered:' ) . ' ' . $message ); } // Display a caught exception as an error since it prevents any of the output buffer filters from applying. if ( $did_just_catch ) { // @phpstan-ignore if.alwaysFalse (The variable is set in the catch block below.) $level = E_USER_ERROR; } // Capture a reported error to be displayed by appending to the processed output buffer if display_errors is enabled. if ( error_reporting() & $level ) { $error_log[] = compact( 'level', 'message', 'file', 'line' ); } return false; } ); $original_display_errors = ini_get( 'display_errors' ); if ( $original_display_errors ) { ini_set( 'display_errors', 0 ); } try { /** * Filters the template enhancement output buffer prior to sending to the client. * * This filter only applies the HTML output of an included template. This filter is a progressive enhancement * intended for applications such as optimizing markup to improve frontend page load performance. Sites must not * depend on this filter applying since they may opt to stream the responses instead. Callbacks for this filter * are highly discouraged from using regular expressions to do any kind of replacement on the output. Use the * HTML API (either `WP_HTML_Tag_Processor` or `WP_HTML_Processor`), or else use {@see DOM\HtmlDocument} as of * PHP 8.4 which fully supports HTML5. * * Do not print any output during this filter. While filters normally don't print anything, this is especially * important since this applies during an output buffer callback. Prior to PHP 8.5, the output will be silently * omitted, whereas afterward a deprecation notice will be emitted. * * Important: Because this filter is applied inside an output buffer callback (i.e. display handler), any * callbacks added to the filter must not attempt to start their own output buffers. Otherwise, PHP will raise a * fatal error: "Cannot use output buffering in output buffering display handlers." * * @since 6.9.0 * * @param string $filtered_output HTML template enhancement output buffer. * @param string $output Original HTML template output buffer. */ $filtered_output = (string) apply_filters( 'wp_template_enhancement_output_buffer', $filtered_output, $output ); } catch ( Throwable $throwable ) { // Emit to the error log as a warning not as an error to prevent halting execution. $did_just_catch = true; trigger_error( sprintf( /* translators: %s is the throwable class name */ __( 'Uncaught "%s" thrown:' ), get_class( $throwable ) ) . ' ' . $throwable->getMessage(), E_USER_WARNING ); $did_just_catch = false; } try { /** * Fires after the template enhancement output buffer has been finalized. * * This happens immediately before the template enhancement output buffer is flushed. No output may be printed * at this action; prior to PHP 8.5, the output will be silently omitted, whereas afterward a deprecation notice * will be emitted. Nevertheless, HTTP headers may be sent, which makes this action complimentary to the * {@see 'send_headers'} action, in which headers may be sent before the template has started rendering. In * contrast, this `wp_finalized_template_enhancement_output_buffer` action is the possible point at which HTTP * headers can be sent. This action does not fire if the "template enhancement output buffer" was not started. * This output buffer is automatically started if this action is added before * {@see wp_start_template_enhancement_output_buffer()} runs at the {@see 'wp_before_include_template'} action * with priority 1000. Before this point, the output buffer will also be started automatically if there was a * {@see 'wp_template_enhancement_output_buffer'} filter added, or if the * {@see 'wp_should_output_buffer_template_for_enhancement'} filter is made to return `true`. * * Important: Because this action fires inside an output buffer callback (i.e. display handler), any callbacks * added to the action must not attempt to start their own output buffers. Otherwise, PHP will raise a fatal * error: "Cannot use output buffering in output buffering display handlers." * * @since 6.9.0 * * @param string $output Finalized output buffer. */ do_action( 'wp_finalized_template_enhancement_output_buffer', $filtered_output ); } catch ( Throwable $throwable ) { // Emit to the error log as a warning not as an error to prevent halting execution. $did_just_catch = true; trigger_error( sprintf( /* translators: %s is the class name */ __( 'Uncaught "%s" thrown:' ), get_class( $throwable ) ) . ' ' . $throwable->getMessage(), E_USER_WARNING ); $did_just_catch = false; } // Append any errors to be displayed before returning flushing the buffer. if ( $original_display_errors && 'stderr' !== $original_display_errors ) { foreach ( $error_log as $error ) { switch ( $error['level'] ) { case E_USER_NOTICE: $type = 'Notice'; break; case E_USER_DEPRECATED: $type = 'Deprecated'; break; case E_USER_WARNING: $type = 'Warning'; break; default: $type = 'Error'; } if ( ini_get( 'html_errors' ) ) { /* * Adapted from PHP internals: . * The self-closing tags are a vestige of the XHTML past! */ $format = "%s
\n%s: %s in %s on line %s
\n%s"; } else { // Adapted from PHP internals: . $format = "%s\n%s: %s in %s on line %s\n%s"; } $filtered_output .= sprintf( $format, ini_get( 'error_prepend_string' ), $type, $error['message'], $error['file'], $error['line'], ini_get( 'error_append_string' ) ); } ini_set( 'display_errors', $original_display_errors ); } restore_error_handler(); return $filtered_output; }