SILENT KILLERPanel

Current Path: > home > codekrsu > > escapematrixonline.com > > wp-includes


Operation   : Linux premium131.web-hosting.com 4.18.0-553.44.1.lve.el8.x86_64 #1 SMP Thu Mar 13 14:29:12 UTC 2025 x86_64
Software     : Apache
Server IP    : 162.0.232.56 | Your IP: 216.73.216.111
Domains      : 1034 Domain(s)
Permission   : [ 0755 ]

Files and Folders in: /home/codekrsu//escapematrixonline.com//wp-includes

NameTypeSizeLast ModifiedActions
ID3 Directory - -
IXR Directory - -
PHPMailer Directory - -
Requests Directory - -
SimplePie Directory - -
Text Directory - -
assets Directory - -
block-bindings Directory - -
block-patterns Directory - -
block-supports Directory - -
blocks Directory - -
certificates Directory - -
css Directory - -
customize Directory - -
fonts Directory - -
html-api Directory - -
images Directory - -
interactivity-api Directory - -
js Directory - -
l10n Directory - -
php-compat Directory - -
pomo Directory - -
rest-api Directory - -
sitemaps Directory - -
sodium_compat Directory - -
style-engine Directory - -
theme-compat Directory - -
widgets Directory - -
admin-bar.php File 37106 bytes April 28 2025 19:12:28.
atomlib.php File 12078 bytes September 19 2024 01:20:16.
author-template.php File 18951 bytes May 14 2023 21:58:24.
block-bindings.php File 5594 bytes June 12 2024 16:44:14.
block-editor.php File 28797 bytes March 17 2025 17:03:30.
block-i18n.json File 316 bytes August 11 2021 13:08:02.
block-patterns.php File 13213 bytes November 30 2024 03:46:22.
block-template-utils.php File 61907 bytes March 07 2025 22:55:24.
block-template.php File 15356 bytes March 19 2025 02:08:26.
blocks.php File 113051 bytes July 08 2025 13:01:26.
bookmark-template.php File 12768 bytes March 20 2025 03:15:36.
bookmark.php File 15427 bytes March 23 2024 18:20:12.
cache-compat.php File 5969 bytes October 10 2022 22:22:12.
cache.php File 13474 bytes October 10 2022 22:22:12.
canonical.php File 34523 bytes August 23 2024 03:47:16.
capabilities.php File 42718 bytes October 15 2024 18:13:20.
category-template.php File 57003 bytes September 26 2023 04:27:12.
category.php File 12829 bytes January 25 2025 04:28:24.
class-IXR.php File 2616 bytes January 23 2025 00:48:26.
class-avif-info.php File 29615 bytes April 26 2024 19:02:14.
class-feed.php File 539 bytes October 01 2024 02:50:20.
class-http.php File 367 bytes June 17 2022 15:20:14.
class-json.php File 43684 bytes February 03 2023 18:35:20.
class-oembed.php File 401 bytes June 17 2022 15:20:14.
class-phpass.php File 6771 bytes September 18 2024 01:08:16.
class-phpmailer.php File 664 bytes July 21 2020 16:58:02.
class-pop3.php File 21121 bytes October 26 2024 00:26:20.
class-requests.php File 2237 bytes April 05 2023 17:12:26.
class-simplepie.php File 453 bytes October 01 2024 02:50:20.
class-smtp.php File 457 bytes January 26 2021 18:45:58.
class-snoopy.php File 37715 bytes February 03 2023 18:35:20.
class-walker-category-dropdown.php File 2469 bytes September 14 2023 16:46:20.
class-walker-category.php File 8477 bytes September 08 2023 13:32:24.
class-walker-comment.php File 14221 bytes March 18 2024 19:46:14.
class-walker-nav-menu.php File 12044 bytes January 22 2025 02:26:24.
class-walker-page-dropdown.php File 2710 bytes September 14 2023 16:46:20.
class-walker-page.php File 7612 bytes September 14 2023 16:46:20.
class-wp-admin-bar.php File 17874 bytes July 18 2024 04:52:18.
class-wp-ajax-response.php File 5266 bytes September 12 2022 19:47:14.
class-wp-application-passwords.php File 17099 bytes April 03 2025 18:38:28.
class-wp-block-bindings-registry.php File 8463 bytes September 23 2024 16:35:16.
class-wp-block-bindings-source.php File 2992 bytes September 03 2024 20:33:16.
class-wp-block-editor-context.php File 1350 bytes September 12 2022 19:47:14.
class-wp-block-list.php File 4757 bytes November 02 2023 04:04:24.
class-wp-block-metadata-registry.php File 11895 bytes March 06 2025 03:17:24.
class-wp-block-parser-block.php File 2555 bytes June 27 2023 04:45:38.
class-wp-block-parser-frame.php File 2017 bytes September 20 2024 05:55:36.
class-wp-block-parser.php File 11532 bytes May 03 2024 00:09:16.
class-wp-block-pattern-categories-registry.php File 5371 bytes September 12 2022 19:47:14.
class-wp-block-patterns-registry.php File 10783 bytes September 27 2024 13:20:18.
class-wp-block-styles-registry.php File 6403 bytes February 04 2025 13:42:26.
class-wp-block-supports.php File 5626 bytes March 04 2025 18:06:28.
class-wp-block-template.php File 2033 bytes September 20 2024 06:07:12.
class-wp-block-templates-registry.php File 7231 bytes January 31 2025 02:19:26.
class-wp-block-type-registry.php File 5013 bytes October 12 2023 16:34:34.
class-wp-block-type.php File 17265 bytes May 02 2024 04:01:10.
class-wp-block.php File 23041 bytes February 14 2025 23:38:22.
class-wp-classic-to-block-menu-converter.php File 4088 bytes August 21 2023 21:51:20.
class-wp-comment-query.php File 48395 bytes June 21 2024 21:26:14.
class-wp-comment.php File 9437 bytes February 11 2025 18:40:30.
class-wp-customize-control.php File 25851 bytes February 08 2025 17:00:20.
class-wp-customize-manager.php File 202593 bytes February 08 2025 21:00:20.
class-wp-customize-nav-menus.php File 57412 bytes March 07 2025 04:48:24.
class-wp-customize-panel.php File 10710 bytes January 23 2025 00:48:26.
class-wp-customize-section.php File 11209 bytes October 13 2024 23:09:12.
class-wp-customize-setting.php File 29962 bytes January 23 2025 00:48:26.
class-wp-customize-widgets.php File 72210 bytes January 22 2025 03:38:24.
class-wp-date-query.php File 35732 bytes November 27 2024 16:40:18.
class-wp-dependencies.php File 15139 bytes August 26 2024 03:48:14.
class-wp-dependency.php File 2627 bytes November 25 2022 20:12:16.
class-wp-duotone.php File 40783 bytes June 14 2024 16:18:12.
class-wp-editor.php File 72335 bytes April 25 2025 22:28:30.
class-wp-embed.php File 15931 bytes April 14 2025 18:31:24.
class-wp-error.php File 7502 bytes February 21 2023 21:39:20.
class-wp-exception.php File 253 bytes September 27 2024 23:28:14.
class-wp-fatal-error-handler.php File 8150 bytes October 22 2024 14:16:16.
class-wp-feed-cache-transient.php File 3176 bytes October 01 2024 02:50:20.
class-wp-feed-cache.php File 969 bytes October 01 2024 02:50:20.
class-wp-hook.php File 16000 bytes September 18 2023 16:41:18.
class-wp-http-cookie.php File 7389 bytes June 24 2023 21:17:24.
class-wp-http-curl.php File 12541 bytes September 21 2023 22:29:12.
class-wp-http-encoding.php File 6689 bytes June 22 2023 18:57:24.
class-wp-http-ixr-client.php File 3501 bytes September 12 2022 19:47:14.
class-wp-http-proxy.php File 5980 bytes June 22 2023 18:36:26.
class-wp-http-requests-hooks.php File 2022 bytes December 16 2022 02:32:18.
class-wp-http-requests-response.php File 4400 bytes October 11 2023 11:05:26.
class-wp-http-response.php File 2977 bytes September 12 2022 19:47:14.
class-wp-http-streams.php File 16859 bytes September 21 2023 22:29:12.
class-wp-http.php File 41579 bytes January 23 2025 00:48:26.
class-wp-image-editor-gd.php File 20162 bytes November 30 2024 04:48:16.
class-wp-image-editor-imagick.php File 34735 bytes March 19 2025 03:25:32.
class-wp-image-editor.php File 17527 bytes February 22 2025 01:25:24.
class-wp-list-util.php File 7443 bytes February 28 2024 03:38:16.
class-wp-locale-switcher.php File 6776 bytes January 08 2025 17:54:18.
class-wp-locale.php File 16883 bytes February 26 2025 03:40:22.
class-wp-matchesmapregex.php File 1828 bytes February 06 2024 06:25:14.
class-wp-meta-query.php File 30531 bytes April 23 2024 00:25:08.
class-wp-metadata-lazyloader.php File 6833 bytes May 11 2023 15:15:24.
class-wp-navigation-fallback.php File 9211 bytes October 06 2023 18:06:22.
class-wp-network-query.php File 19857 bytes June 21 2024 21:26:14.
class-wp-network.php File 12296 bytes September 14 2024 02:12:16.
class-wp-object-cache.php File 17524 bytes September 19 2024 16:12:16.
class-wp-oembed-controller.php File 6905 bytes March 06 2024 10:05:12.
class-wp-oembed.php File 31606 bytes June 26 2025 23:06:34.
class-wp-paused-extensions-storage.php File 5111 bytes September 03 2024 22:19:14.
class-wp-phpmailer.php File 3802 bytes January 08 2025 17:54:18.
class-wp-plugin-dependencies.php File 25315 bytes March 18 2025 02:40:26.
class-wp-post-type.php File 30680 bytes February 09 2025 16:09:22.
class-wp-post.php File 6488 bytes July 22 2025 14:56:36.
class-wp-query.php File 158023 bytes March 19 2025 03:34:26.
class-wp-recovery-mode-cookie-service.php File 6877 bytes October 04 2022 07:59:14.
class-wp-recovery-mode-email-service.php File 11183 bytes May 02 2023 19:45:22.
class-wp-recovery-mode-key-service.php File 4884 bytes February 17 2025 16:24:22.
class-wp-recovery-mode-link-service.php File 3463 bytes September 12 2022 19:47:14.
class-wp-recovery-mode.php File 11453 bytes February 23 2025 16:11:22.
class-wp-rewrite.php File 63688 bytes October 20 2024 03:54:18.
class-wp-role.php File 2523 bytes September 08 2023 13:32:24.
class-wp-roles.php File 8586 bytes September 03 2024 22:19:14.
class-wp-script-modules.php File 19463 bytes December 11 2024 20:20:18.
class-wp-scripts.php File 28344 bytes August 11 2024 03:00:14.
class-wp-session-tokens.php File 7319 bytes February 11 2025 16:14:22.
class-wp-simplepie-file.php File 3408 bytes October 01 2024 02:50:20.
class-wp-simplepie-sanitize-kses.php File 1910 bytes January 23 2025 00:48:26.
class-wp-site-query.php File 31625 bytes September 11 2024 16:08:20.
class-wp-site.php File 7454 bytes September 12 2022 19:47:14.
class-wp-speculation-rules.php File 7527 bytes February 19 2025 03:32:22.
class-wp-styles.php File 11010 bytes August 11 2024 03:00:14.
class-wp-tax-query.php File 19555 bytes February 17 2024 02:47:12.
class-wp-taxonomy.php File 18559 bytes March 27 2025 02:07:28.
class-wp-term-query.php File 40869 bytes October 31 2024 02:34:20.
class-wp-term.php File 5298 bytes September 12 2022 19:47:14.
class-wp-text-diff-renderer-inline.php File 979 bytes February 15 2024 00:27:10.
class-wp-text-diff-renderer-table.php File 18880 bytes January 23 2025 00:48:26.
class-wp-textdomain-registry.php File 10481 bytes November 20 2024 07:50:24.
class-wp-theme-json-data.php File 1809 bytes June 04 2024 15:55:14.
class-wp-theme-json-resolver.php File 35738 bytes November 04 2024 07:34:16.
class-wp-theme-json-schema.php File 7367 bytes June 06 2024 12:02:16.
class-wp-theme-json.php File 163545 bytes March 19 2025 22:46:30.
class-wp-theme.php File 65810 bytes April 08 2025 18:18:28.
class-wp-token-map.php File 28618 bytes July 20 2024 03:44:16.
class-wp-url-pattern-prefixer.php File 4802 bytes February 19 2025 03:32:22.
class-wp-user-meta-session-tokens.php File 2990 bytes January 09 2019 10:04:50.
class-wp-user-query.php File 43655 bytes December 19 2024 15:24:24.
class-wp-user-request.php File 2305 bytes February 17 2025 16:24:22.
class-wp-user.php File 22994 bytes March 04 2025 19:19:22.
class-wp-walker.php File 13322 bytes July 26 2024 11:56:14.
class-wp-widget-factory.php File 3347 bytes September 12 2022 19:47:14.
class-wp-widget.php File 18429 bytes November 02 2024 19:01:20.
class-wp-xmlrpc-server.php File 215444 bytes February 08 2025 21:00:20.
class-wp.php File 26318 bytes January 29 2025 23:12:26.
class-wpdb.php File 118284 bytes February 11 2025 16:14:22.
class.wp-dependencies.php File 373 bytes September 20 2022 18:17:12.
class.wp-scripts.php File 343 bytes September 20 2022 18:17:12.
class.wp-styles.php File 338 bytes September 20 2022 18:17:12.
comment-template.php File 103104 bytes July 05 2025 10:53:38.
comment.php File 131547 bytes March 12 2025 01:58:24.
compat.php File 16376 bytes February 11 2025 16:14:22.
cron.php File 42658 bytes February 15 2025 00:37:24.
date.php File 400 bytes June 17 2022 15:20:14.
default-constants.php File 11365 bytes October 01 2024 03:58:16.
default-filters.php File 36697 bytes March 25 2025 10:45:28.
default-widgets.php File 2295 bytes January 23 2025 00:48:26.
deprecated.php File 191563 bytes March 14 2025 03:00:32.
embed-template.php File 338 bytes June 17 2022 15:20:14.
embed.php File 38172 bytes January 24 2025 18:32:22.
error-protection.php File 4121 bytes May 02 2023 19:45:22.
feed-atom-comments.php File 5504 bytes March 04 2024 17:41:10.
feed-atom.php File 3121 bytes January 23 2025 00:48:26.
feed-rdf.php File 2668 bytes January 29 2020 05:45:18.
feed-rss.php File 1189 bytes January 29 2020 05:45:18.
feed-rss2-comments.php File 4136 bytes March 04 2024 17:41:10.
feed-rss2.php File 3799 bytes January 29 2020 05:45:18.
feed.php File 23411 bytes November 11 2024 22:50:18.
fonts.php File 9751 bytes October 24 2024 02:39:18.
formatting.php File 342921 bytes July 05 2025 10:35:32.
functions.php File 287546 bytes April 07 2025 02:29:28.
functions.wp-scripts.php File 14558 bytes May 27 2024 00:51:14.
functions.wp-styles.php File 8583 bytes May 27 2024 00:51:14.
general-template.php File 172498 bytes April 08 2025 06:01:30.
global-styles-and-settings.php File 21261 bytes February 14 2025 23:38:22.
http.php File 25312 bytes October 27 2024 23:05:18.
https-detection.php File 5857 bytes February 24 2025 18:43:24.
https-migration.php File 4741 bytes July 11 2023 02:38:26.
kses.php File 74472 bytes January 22 2025 03:59:18.
l10n.php File 68530 bytes January 28 2025 14:46:30.
link-template.php File 157801 bytes February 24 2025 18:43:24.
load.php File 56440 bytes February 11 2025 16:14:22.
locale.php File 162 bytes October 08 2019 21:19:04.
media-template.php File 63060 bytes February 18 2025 03:58:24.
media.php File 220496 bytes July 07 2025 21:09:42.
meta.php File 65243 bytes February 24 2025 02:53:26.
ms-blogs.php File 25845 bytes January 23 2025 00:48:26.
ms-default-constants.php File 4921 bytes June 14 2024 00:50:14.
ms-default-filters.php File 6636 bytes February 24 2023 06:23:20.
ms-deprecated.php File 21759 bytes April 12 2024 21:47:14.
ms-files.php File 2744 bytes April 17 2025 02:23:30.
ms-functions.php File 91582 bytes February 04 2025 00:52:24.
ms-load.php File 19883 bytes March 25 2024 21:19:18.
ms-network.php File 3782 bytes May 02 2023 15:26:24.
ms-settings.php File 4197 bytes January 23 2025 00:48:26.
ms-site.php File 41320 bytes January 17 2025 05:12:26.
nav-menu-template.php File 25990 bytes January 23 2025 00:48:26.
nav-menu.php File 44373 bytes August 05 2024 23:00:20.
option.php File 103065 bytes March 06 2025 03:59:22.
pluggable-deprecated.php File 6324 bytes February 04 2025 00:52:24.
pluggable.php File 122700 bytes February 28 2025 23:53:24.
plugin.php File 35465 bytes June 08 2023 11:54:22.
post-formats.php File 7102 bytes May 27 2024 20:29:16.
post-template.php File 68648 bytes February 04 2025 05:32:24.
post-thumbnail-template.php File 10879 bytes December 21 2024 04:35:24.
post.php File 291712 bytes March 25 2025 10:45:28.
query.php File 37035 bytes August 24 2023 13:01:16.
registration-functions.php File 200 bytes November 12 2020 16:17:08.
registration.php File 200 bytes November 12 2020 16:17:08.
rest-api.php File 100257 bytes March 29 2025 02:44:30.
revision.php File 30741 bytes January 28 2025 04:07:24.
rewrite.php File 19541 bytes September 18 2024 23:08:12.
robots-template.php File 5185 bytes April 06 2022 19:33:04.
rss-functions.php File 255 bytes November 17 2020 03:52:06.
rss.php File 23113 bytes September 19 2024 01:40:12.
script-loader.php File 133262 bytes April 25 2025 22:38:30.
script-modules.php File 7712 bytes October 13 2024 22:49:16.
session.php File 258 bytes February 06 2020 11:33:12.
shortcodes.php File 24051 bytes May 25 2024 07:04:12.
sitemaps.php File 3238 bytes May 15 2021 21:38:06.
speculative-loading.php File 8558 bytes February 28 2025 03:14:26.
spl-autoload-compat.php File 441 bytes November 12 2020 16:17:08.
style-engine.php File 7563 bytes May 03 2024 08:47:12.
taxonomy.php File 176227 bytes February 08 2025 16:44:24.
template-canvas.php File 544 bytes October 01 2023 04:22:28.
template-loader.php File 3012 bytes May 26 2020 13:37:10.
template.php File 24154 bytes February 22 2024 00:26:08.
theme-i18n.json File 1526 bytes January 08 2025 17:36:24.
theme-previews.php File 2832 bytes December 08 2023 11:32:24.
theme-templates.php File 6238 bytes February 17 2025 22:49:20.
theme.json File 8704 bytes June 12 2024 10:11:14.
theme.php File 134303 bytes March 18 2025 16:30:26.
update.php File 37503 bytes March 18 2025 02:40:26.
user.php File 175823 bytes March 04 2025 19:19:22.
vars.php File 6562 bytes January 23 2025 00:48:26.
version.php File 1090 bytes July 15 2025 19:09:38.
widgets.php File 70719 bytes January 25 2025 02:20:24.
wp-db.php File 445 bytes July 22 2022 02:45:12.
wp-diff.php File 799 bytes January 23 2025 00:48:26.

Reading File: /home/codekrsu//escapematrixonline.com//wp-includes/query.php

<?php
/**
 * WordPress Query API
 *
 * The query API attempts to get which part of WordPress the user is on. It
 * also provides functionality for getting URL query information.
 *
 * @link https://developer.wordpress.org/themes/basics/the-loop/ More information on The Loop.
 *
 * @package WordPress
 * @subpackage Query
 */

/**
 * Retrieves the value of a query variable in the WP_Query class.
 *
 * @since 1.5.0
 * @since 3.9.0 The `$default_value` argument was introduced.
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @param string $query_var     The variable key to retrieve.
 * @param mixed  $default_value Optional. Value to return if the query variable is not set.
 *                              Default empty string.
 * @return mixed Contents of the query variable.
 */
function get_query_var( $query_var, $default_value = '' ) {
	global $wp_query;
	return $wp_query->get( $query_var, $default_value );
}

/**
 * Retrieves the currently queried object.
 *
 * Wrapper for WP_Query::get_queried_object().
 *
 * @since 3.1.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @return WP_Term|WP_Post_Type|WP_Post|WP_User|null The queried object.
 */
function get_queried_object() {
	global $wp_query;
	return $wp_query->get_queried_object();
}

/**
 * Retrieves the ID of the currently queried object.
 *
 * Wrapper for WP_Query::get_queried_object_id().
 *
 * @since 3.1.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @return int ID of the queried object.
 */
function get_queried_object_id() {
	global $wp_query;
	return $wp_query->get_queried_object_id();
}

/**
 * Sets the value of a query variable in the WP_Query class.
 *
 * @since 2.2.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @param string $query_var Query variable key.
 * @param mixed  $value     Query variable value.
 */
function set_query_var( $query_var, $value ) {
	global $wp_query;
	$wp_query->set( $query_var, $value );
}

/**
 * Sets up The Loop with query parameters.
 *
 * Note: This function will completely override the main query and isn't intended for use
 * by plugins or themes. Its overly-simplistic approach to modifying the main query can be
 * problematic and should be avoided wherever possible. In most cases, there are better,
 * more performant options for modifying the main query such as via the {@see 'pre_get_posts'}
 * action within WP_Query.
 *
 * This must not be used within the WordPress Loop.
 *
 * @since 1.5.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @param array|string $query Array or string of WP_Query arguments.
 * @return WP_Post[]|int[] Array of post objects or post IDs.
 */
function query_posts( $query ) {
	$GLOBALS['wp_query'] = new WP_Query();
	return $GLOBALS['wp_query']->query( $query );
}

/**
 * Destroys the previous query and sets up a new query.
 *
 * This should be used after query_posts() and before another query_posts().
 * This will remove obscure bugs that occur when the previous WP_Query object
 * is not destroyed properly before another is set up.
 *
 * @since 2.3.0
 *
 * @global WP_Query $wp_query     WordPress Query object.
 * @global WP_Query $wp_the_query Copy of the global WP_Query instance created during wp_reset_query().
 */
function wp_reset_query() {
	$GLOBALS['wp_query'] = $GLOBALS['wp_the_query'];
	wp_reset_postdata();
}

/**
 * After looping through a separate query, this function restores
 * the $post global to the current post in the main query.
 *
 * @since 3.0.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 */
function wp_reset_postdata() {
	global $wp_query;

	if ( isset( $wp_query ) ) {
		$wp_query->reset_postdata();
	}
}

/*
 * Query type checks.
 */

/**
 * Determines whether the query is for an existing archive page.
 *
 * Archive pages include category, tag, author, date, custom post type,
 * and custom taxonomy based archives.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 1.5.0
 *
 * @see is_category()
 * @see is_tag()
 * @see is_author()
 * @see is_date()
 * @see is_post_type_archive()
 * @see is_tax()
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @return bool Whether the query is for an existing archive page.
 */
function is_archive() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_archive();
}

/**
 * Determines whether the query is for an existing post type archive page.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 3.1.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @param string|string[] $post_types Optional. Post type or array of posts types
 *                                    to check against. Default empty.
 * @return bool Whether the query is for an existing post type archive page.
 */
function is_post_type_archive( $post_types = '' ) {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_post_type_archive( $post_types );
}

/**
 * Determines whether the query is for an existing attachment page.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 2.0.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @param int|string|int[]|string[] $attachment Optional. Attachment ID, title, slug, or array of such
 *                                              to check against. Default empty.
 * @return bool Whether the query is for an existing attachment page.
 */
function is_attachment( $attachment = '' ) {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_attachment( $attachment );
}

/**
 * Determines whether the query is for an existing author archive page.
 *
 * If the $author parameter is specified, this function will additionally
 * check if the query is for one of the authors specified.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 1.5.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @param int|string|int[]|string[] $author Optional. User ID, nickname, nicename, or array of such
 *                                          to check against. Default empty.
 * @return bool Whether the query is for an existing author archive page.
 */
function is_author( $author = '' ) {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_author( $author );
}

/**
 * Determines whether the query is for an existing category archive page.
 *
 * If the $category parameter is specified, this function will additionally
 * check if the query is for one of the categories specified.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 1.5.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @param int|string|int[]|string[] $category Optional. Category ID, name, slug, or array of such
 *                                            to check against. Default empty.
 * @return bool Whether the query is for an existing category archive page.
 */
function is_category( $category = '' ) {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_category( $category );
}

/**
 * Determines whether the query is for an existing tag archive page.
 *
 * If the $tag parameter is specified, this function will additionally
 * check if the query is for one of the tags specified.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 2.3.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @param int|string|int[]|string[] $tag Optional. Tag ID, name, slug, or array of such
 *                                       to check against. Default empty.
 * @return bool Whether the query is for an existing tag archive page.
 */
function is_tag( $tag = '' ) {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_tag( $tag );
}

/**
 * Determines whether the query is for an existing custom taxonomy archive page.
 *
 * If the $taxonomy parameter is specified, this function will additionally
 * check if the query is for that specific $taxonomy.
 *
 * If the $term parameter is specified in addition to the $taxonomy parameter,
 * this function will additionally check if the query is for one of the terms
 * specified.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 2.5.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @param string|string[]           $taxonomy Optional. Taxonomy slug or slugs to check against.
 *                                            Default empty.
 * @param int|string|int[]|string[] $term     Optional. Term ID, name, slug, or array of such
 *                                            to check against. Default empty.
 * @return bool Whether the query is for an existing custom taxonomy archive page.
 *              True for custom taxonomy archive pages, false for built-in taxonomies
 *              (category and tag archives).
 */
function is_tax( $taxonomy = '', $term = '' ) {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_tax( $taxonomy, $term );
}

/**
 * Determines whether the query is for an existing date archive.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 1.5.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @return bool Whether the query is for an existing date archive.
 */
function is_date() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_date();
}

/**
 * Determines whether the query is for an existing day archive.
 *
 * A conditional check to test whether the page is a date-based archive page displaying posts for the current day.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 1.5.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @return bool Whether the query is for an existing day archive.
 */
function is_day() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_day();
}

/**
 * Determines whether the query is for a feed.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 1.5.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @param string|string[] $feeds Optional. Feed type or array of feed types
 *                                         to check against. Default empty.
 * @return bool Whether the query is for a feed.
 */
function is_feed( $feeds = '' ) {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_feed( $feeds );
}

/**
 * Is the query for a comments feed?
 *
 * @since 3.0.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @return bool Whether the query is for a comments feed.
 */
function is_comment_feed() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_comment_feed();
}

/**
 * Determines whether the query is for the front page of the site.
 *
 * This is for what is displayed at your site's main URL.
 *
 * Depends on the site's "Front page displays" Reading Settings 'show_on_front' and 'page_on_front'.
 *
 * If you set a static page for the front page of your site, this function will return
 * true when viewing that page.
 *
 * Otherwise the same as {@see is_home()}.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 2.5.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @return bool Whether the query is for the front page of the site.
 */
function is_front_page() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_front_page();
}

/**
 * Determines whether the query is for the blog homepage.
 *
 * The blog homepage is the page that shows the time-based blog content of the site.
 *
 * is_home() is dependent on the site's "Front page displays" Reading Settings 'show_on_front'
 * and 'page_for_posts'.
 *
 * If a static page is set for the front page of the site, this function will return true only
 * on the page you set as the "Posts page".
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 1.5.0
 *
 * @see is_front_page()
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @return bool Whether the query is for the blog homepage.
 */
function is_home() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_home();
}

/**
 * Determines whether the query is for the Privacy Policy page.
 *
 * The Privacy Policy page is the page that shows the Privacy Policy content of the site.
 *
 * is_privacy_policy() is dependent on the site's "Change your Privacy Policy page" Privacy Settings 'wp_page_for_privacy_policy'.
 *
 * This function will return true only on the page you set as the "Privacy Policy page".
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 5.2.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @return bool Whether the query is for the Privacy Policy page.
 */
function is_privacy_policy() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_privacy_policy();
}

/**
 * Determines whether the query is for an existing month archive.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 1.5.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @return bool Whether the query is for an existing month archive.
 */
function is_month() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_month();
}

/**
 * Determines whether the query is for an existing single page.
 *
 * If the $page parameter is specified, this function will additionally
 * check if the query is for one of the pages specified.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 1.5.0
 *
 * @see is_single()
 * @see is_singular()
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @param int|string|int[]|string[] $page Optional. Page ID, title, slug, or array of such
 *                                        to check against. Default empty.
 * @return bool Whether the query is for an existing single page.
 */
function is_page( $page = '' ) {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_page( $page );
}

/**
 * Determines whether the query is for a paged result and not for the first page.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 1.5.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @return bool Whether the query is for a paged result.
 */
function is_paged() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_paged();
}

/**
 * Determines whether the query is for a post or page preview.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 2.0.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @return bool Whether the query is for a post or page preview.
 */
function is_preview() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_preview();
}

/**
 * Is the query for the robots.txt file?
 *
 * @since 2.1.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @return bool Whether the query is for the robots.txt file.
 */
function is_robots() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_robots();
}

/**
 * Is the query for the favicon.ico file?
 *
 * @since 5.4.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @return bool Whether the query is for the favicon.ico file.
 */
function is_favicon() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_favicon();
}

/**
 * Determines whether the query is for a search.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 1.5.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @return bool Whether the query is for a search.
 */
function is_search() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_search();
}

/**
 * Determines whether the query is for an existing single post.
 *
 * Works for any post type, except attachments and pages
 *
 * If the $post parameter is specified, this function will additionally
 * check if the query is for one of the Posts specified.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 1.5.0
 *
 * @see is_page()
 * @see is_singular()
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @param int|string|int[]|string[] $post Optional. Post ID, title, slug, or array of such
 *                                        to check against. Default empty.
 * @return bool Whether the query is for an existing single post.
 */
function is_single( $post = '' ) {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_single( $post );
}

/**
 * Determines whether the query is for an existing single post of any post type
 * (post, attachment, page, custom post types).
 *
 * If the $post_types parameter is specified, this function will additionally
 * check if the query is for one of the Posts Types specified.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 1.5.0
 *
 * @see is_page()
 * @see is_single()
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @param string|string[] $post_types Optional. Post type or array of post types
 *                                    to check against. Default empty.
 * @return bool Whether the query is for an existing single post
 *              or any of the given post types.
 */
function is_singular( $post_types = '' ) {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_singular( $post_types );
}

/**
 * Determines whether the query is for a specific time.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 1.5.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @return bool Whether the query is for a specific time.
 */
function is_time() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_time();
}

/**
 * Determines whether the query is for a trackback endpoint call.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 1.5.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @return bool Whether the query is for a trackback endpoint call.
 */
function is_trackback() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_trackback();
}

/**
 * Determines whether the query is for an existing year archive.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 1.5.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @return bool Whether the query is for an existing year archive.
 */
function is_year() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_year();
}

/**
 * Determines whether the query has resulted in a 404 (returns no results).
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 1.5.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @return bool Whether the query is a 404 error.
 */
function is_404() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_404();
}

/**
 * Is the query for an embedded post?
 *
 * @since 4.4.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @return bool Whether the query is for an embedded post.
 */
function is_embed() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '3.1.0' );
		return false;
	}

	return $wp_query->is_embed();
}

/**
 * Determines whether the query is the main query.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 3.3.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @return bool Whether the query is the main query.
 */
function is_main_query() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		_doing_it_wrong( __FUNCTION__, __( 'Conditional query tags do not work before the query is run. Before then, they always return false.' ), '6.1.0' );
		return false;
	}

	if ( 'pre_get_posts' === current_filter() ) {
		_doing_it_wrong(
			__FUNCTION__,
			sprintf(
				/* translators: 1: pre_get_posts, 2: WP_Query->is_main_query(), 3: is_main_query(), 4: Documentation URL. */
				__( 'In %1$s, use the %2$s method, not the %3$s function. See %4$s.' ),
				'<code>pre_get_posts</code>',
				'<code>WP_Query->is_main_query()</code>',
				'<code>is_main_query()</code>',
				__( 'https://developer.wordpress.org/reference/functions/is_main_query/' )
			),
			'3.7.0'
		);
	}

	return $wp_query->is_main_query();
}

/*
 * The Loop. Post loop control.
 */

/**
 * Determines whether current WordPress query has posts to loop over.
 *
 * @since 1.5.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @return bool True if posts are available, false if end of the loop.
 */
function have_posts() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		return false;
	}

	return $wp_query->have_posts();
}

/**
 * Determines whether the caller is in the Loop.
 *
 * For more information on this and similar theme functions, check out
 * the {@link https://developer.wordpress.org/themes/basics/conditional-tags/
 * Conditional Tags} article in the Theme Developer Handbook.
 *
 * @since 2.0.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @return bool True if caller is within loop, false if loop hasn't started or ended.
 */
function in_the_loop() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		return false;
	}

	return $wp_query->in_the_loop;
}

/**
 * Rewind the loop posts.
 *
 * @since 1.5.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 */
function rewind_posts() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		return;
	}

	$wp_query->rewind_posts();
}

/**
 * Iterate the post index in the loop.
 *
 * @since 1.5.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 */
function the_post() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		return;
	}

	$wp_query->the_post();
}

/*
 * Comments loop.
 */

/**
 * Determines whether current WordPress query has comments to loop over.
 *
 * @since 2.2.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @return bool True if comments are available, false if no more comments.
 */
function have_comments() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		return false;
	}

	return $wp_query->have_comments();
}

/**
 * Iterate comment index in the comment loop.
 *
 * @since 2.2.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 */
function the_comment() {
	global $wp_query;

	if ( ! isset( $wp_query ) ) {
		return;
	}

	$wp_query->the_comment();
}

/**
 * Redirect old slugs to the correct permalink.
 *
 * Attempts to find the current slug from the past slugs.
 *
 * @since 2.1.0
 */
function wp_old_slug_redirect() {
	if ( is_404() && '' !== get_query_var( 'name' ) ) {
		// Guess the current post type based on the query vars.
		if ( get_query_var( 'post_type' ) ) {
			$post_type = get_query_var( 'post_type' );
		} elseif ( get_query_var( 'attachment' ) ) {
			$post_type = 'attachment';
		} elseif ( get_query_var( 'pagename' ) ) {
			$post_type = 'page';
		} else {
			$post_type = 'post';
		}

		if ( is_array( $post_type ) ) {
			if ( count( $post_type ) > 1 ) {
				return;
			}
			$post_type = reset( $post_type );
		}

		// Do not attempt redirect for hierarchical post types.
		if ( is_post_type_hierarchical( $post_type ) ) {
			return;
		}

		$id = _find_post_by_old_slug( $post_type );

		if ( ! $id ) {
			$id = _find_post_by_old_date( $post_type );
		}

		/**
		 * Filters the old slug redirect post ID.
		 *
		 * @since 4.9.3
		 *
		 * @param int $id The redirect post ID.
		 */
		$id = apply_filters( 'old_slug_redirect_post_id', $id );

		if ( ! $id ) {
			return;
		}

		$link = get_permalink( $id );

		if ( get_query_var( 'paged' ) > 1 ) {
			$link = user_trailingslashit( trailingslashit( $link ) . 'page/' . get_query_var( 'paged' ) );
		} elseif ( is_embed() ) {
			$link = user_trailingslashit( trailingslashit( $link ) . 'embed' );
		}

		/**
		 * Filters the old slug redirect URL.
		 *
		 * @since 4.4.0
		 *
		 * @param string $link The redirect URL.
		 */
		$link = apply_filters( 'old_slug_redirect_url', $link );

		if ( ! $link ) {
			return;
		}

		wp_redirect( $link, 301 ); // Permanent redirect.
		exit;
	}
}

/**
 * Find the post ID for redirecting an old slug.
 *
 * @since 4.9.3
 * @access private
 *
 * @see wp_old_slug_redirect()
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param string $post_type The current post type based on the query vars.
 * @return int The Post ID.
 */
function _find_post_by_old_slug( $post_type ) {
	global $wpdb;

	$query = $wpdb->prepare( "SELECT post_id FROM $wpdb->postmeta, $wpdb->posts WHERE ID = post_id AND post_type = %s AND meta_key = '_wp_old_slug' AND meta_value = %s", $post_type, get_query_var( 'name' ) );

	/*
	 * If year, monthnum, or day have been specified, make our query more precise
	 * just in case there are multiple identical _wp_old_slug values.
	 */
	if ( get_query_var( 'year' ) ) {
		$query .= $wpdb->prepare( ' AND YEAR(post_date) = %d', get_query_var( 'year' ) );
	}
	if ( get_query_var( 'monthnum' ) ) {
		$query .= $wpdb->prepare( ' AND MONTH(post_date) = %d', get_query_var( 'monthnum' ) );
	}
	if ( get_query_var( 'day' ) ) {
		$query .= $wpdb->prepare( ' AND DAYOFMONTH(post_date) = %d', get_query_var( 'day' ) );
	}

	$key          = md5( $query );
	$last_changed = wp_cache_get_last_changed( 'posts' );
	$cache_key    = "find_post_by_old_slug:$key:$last_changed";
	$cache        = wp_cache_get( $cache_key, 'post-queries' );
	if ( false !== $cache ) {
		$id = $cache;
	} else {
		$id = (int) $wpdb->get_var( $query );
		wp_cache_set( $cache_key, $id, 'post-queries' );
	}

	return $id;
}

/**
 * Find the post ID for redirecting an old date.
 *
 * @since 4.9.3
 * @access private
 *
 * @see wp_old_slug_redirect()
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param string $post_type The current post type based on the query vars.
 * @return int The Post ID.
 */
function _find_post_by_old_date( $post_type ) {
	global $wpdb;

	$date_query = '';
	if ( get_query_var( 'year' ) ) {
		$date_query .= $wpdb->prepare( ' AND YEAR(pm_date.meta_value) = %d', get_query_var( 'year' ) );
	}
	if ( get_query_var( 'monthnum' ) ) {
		$date_query .= $wpdb->prepare( ' AND MONTH(pm_date.meta_value) = %d', get_query_var( 'monthnum' ) );
	}
	if ( get_query_var( 'day' ) ) {
		$date_query .= $wpdb->prepare( ' AND DAYOFMONTH(pm_date.meta_value) = %d', get_query_var( 'day' ) );
	}

	$id = 0;
	if ( $date_query ) {
		$query        = $wpdb->prepare( "SELECT post_id FROM $wpdb->postmeta AS pm_date, $wpdb->posts WHERE ID = post_id AND post_type = %s AND meta_key = '_wp_old_date' AND post_name = %s" . $date_query, $post_type, get_query_var( 'name' ) );
		$key          = md5( $query );
		$last_changed = wp_cache_get_last_changed( 'posts' );
		$cache_key    = "find_post_by_old_date:$key:$last_changed";
		$cache        = wp_cache_get( $cache_key, 'post-queries' );
		if ( false !== $cache ) {
			$id = $cache;
		} else {
			$id = (int) $wpdb->get_var( $query );
			if ( ! $id ) {
				// Check to see if an old slug matches the old date.
				$id = (int) $wpdb->get_var( $wpdb->prepare( "SELECT ID FROM $wpdb->posts, $wpdb->postmeta AS pm_slug, $wpdb->postmeta AS pm_date WHERE ID = pm_slug.post_id AND ID = pm_date.post_id AND post_type = %s AND pm_slug.meta_key = '_wp_old_slug' AND pm_slug.meta_value = %s AND pm_date.meta_key = '_wp_old_date'" . $date_query, $post_type, get_query_var( 'name' ) ) );
			}
			wp_cache_set( $cache_key, $id, 'post-queries' );
		}
	}

	return $id;
}

/**
 * Set up global post data.
 *
 * @since 1.5.0
 * @since 4.4.0 Added the ability to pass a post ID to `$post`.
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @param WP_Post|object|int $post WP_Post instance or Post ID/object.
 * @return bool True when finished.
 */
function setup_postdata( $post ) {
	global $wp_query;

	if ( ! empty( $wp_query ) && $wp_query instanceof WP_Query ) {
		return $wp_query->setup_postdata( $post );
	}

	return false;
}

/**
 * Generates post data.
 *
 * @since 5.2.0
 *
 * @global WP_Query $wp_query WordPress Query object.
 *
 * @param WP_Post|object|int $post WP_Post instance or Post ID/object.
 * @return array|false Elements of post, or false on failure.
 */
function generate_postdata( $post ) {
	global $wp_query;

	if ( ! empty( $wp_query ) && $wp_query instanceof WP_Query ) {
		return $wp_query->generate_postdata( $post );
	}

	return false;
}

SILENT KILLER Tool