Linux webserver 6.8.0-49-generic #49~22.04.1-Ubuntu SMP PREEMPT_DYNAMIC Wed Nov 6 17:42:15 UTC 2 x86_64
Apache/2.4.52 (Ubuntu)
Server IP : 192.168.1.1 & Your IP : 3.12.148.147
Domains :
Cant Read [ /etc/named.conf ]
User : www-data
Terminal
Auto Root
Create File
Create Folder
Localroot Suggester
Backdoor Destroyer
Readme
/
var /
www /
theprintave /
wp-includes /
blocks /
Delete
Unzip
Name
Size
Permission
Date
Action
archives
[ DIR ]
drwxr-xr-x
2025-05-14 19:24
audio
[ DIR ]
drwxr-xr-x
2025-05-14 19:29
avatar
[ DIR ]
drwxr-xr-x
2025-05-14 19:26
block
[ DIR ]
drwxr-xr-x
2025-05-14 18:24
button
[ DIR ]
drwxr-xr-x
2025-05-14 18:38
buttons
[ DIR ]
drwxr-xr-x
2025-05-14 19:15
calendar
[ DIR ]
drwxr-xr-x
2025-05-14 19:23
categories
[ DIR ]
drwxr-xr-x
2025-05-14 19:25
code
[ DIR ]
drwxr-xr-x
2025-05-14 18:46
column
[ DIR ]
drwxr-xr-x
2025-05-14 19:29
columns
[ DIR ]
drwxr-xr-x
2025-05-14 18:47
comment-author-name
[ DIR ]
drwxr-xr-x
2025-05-14 19:29
comment-content
[ DIR ]
drwxr-xr-x
2025-05-14 17:40
comment-date
[ DIR ]
drwxr-xr-x
2025-05-14 17:35
comment-edit-link
[ DIR ]
drwxr-xr-x
2025-05-14 09:35
comment-reply-link
[ DIR ]
drwxr-xr-x
2025-05-14 09:43
comment-template
[ DIR ]
drwxr-xr-x
2025-05-14 19:25
comments
[ DIR ]
drwxr-xr-x
2025-05-14 19:33
comments-pagination
[ DIR ]
drwxr-xr-x
2025-05-14 17:28
comments-pagination-next
[ DIR ]
drwxr-xr-x
2025-05-14 17:41
comments-pagination-numbers
[ DIR ]
drwxr-xr-x
2025-05-14 11:25
comments-pagination-previous
[ DIR ]
drwxr-xr-x
2025-05-14 17:41
comments-title
[ DIR ]
drwxr-xr-x
2025-05-14 19:24
cover
[ DIR ]
drwxr-xr-x
2025-05-14 19:29
details
[ DIR ]
drwxr-xr-x
2025-05-14 19:27
embed
[ DIR ]
drwxr-xr-x
2025-05-14 19:14
file
[ DIR ]
drwxr-xr-x
2025-05-14 19:31
footnotes
[ DIR ]
drwxr-xr-x
2025-05-14 19:30
freeform
[ DIR ]
drwxr-xr-x
2025-05-14 19:30
gallery
[ DIR ]
drwxr-xr-x
2025-05-14 19:25
group
[ DIR ]
drwxr-xr-x
2025-05-14 19:31
heading
[ DIR ]
drwxr-xr-x
2025-05-14 19:25
home-link
[ DIR ]
drwxr-xr-x
2025-05-14 17:31
html
[ DIR ]
drwxr-xr-x
2025-05-14 19:14
image
[ DIR ]
drwxr-xr-x
2025-05-14 19:28
latest-comments
[ DIR ]
drwxr-xr-x
2025-05-14 19:23
latest-posts
[ DIR ]
drwxr-xr-x
2025-05-14 19:20
legacy-widget
[ DIR ]
drwxr-xr-x
2025-05-14 19:12
list
[ DIR ]
drwxr-xr-x
2025-05-14 19:22
list-item
[ DIR ]
drwxr-xr-x
2025-05-12 07:42
loginout
[ DIR ]
drwxr-xr-x
2025-05-12 07:42
media-text
[ DIR ]
drwxr-xr-x
2025-05-14 19:21
missing
[ DIR ]
drwxr-xr-x
2025-05-14 17:42
more
[ DIR ]
drwxr-xr-x
2025-05-14 19:33
navigation
[ DIR ]
drwxr-xr-x
2025-05-14 19:12
navigation-link
[ DIR ]
drwxr-xr-x
2025-05-14 19:06
navigation-submenu
[ DIR ]
drwxr-xr-x
2025-05-14 17:36
nextpage
[ DIR ]
drwxr-xr-x
2025-05-14 19:10
page-list
[ DIR ]
drwxr-xr-x
2025-05-12 07:42
page-list-item
[ DIR ]
drwxr-xr-x
2025-05-12 07:42
paragraph
[ DIR ]
drwxr-xr-x
2025-05-14 19:32
pattern
[ DIR ]
drwxr-xr-x
2025-05-14 17:40
post-author
[ DIR ]
drwxr-xr-x
2025-05-14 19:18
post-author-biography
[ DIR ]
drwxr-xr-x
2025-05-12 07:42
post-author-name
[ DIR ]
drwxr-xr-x
2025-05-14 19:19
post-comments-form
[ DIR ]
drwxr-xr-x
2025-05-14 17:36
post-content
[ DIR ]
drwxr-xr-x
2025-05-14 17:32
post-date
[ DIR ]
drwxr-xr-x
2025-05-14 19:24
post-excerpt
[ DIR ]
drwxr-xr-x
2025-05-14 19:05
post-featured-image
[ DIR ]
drwxr-xr-x
2025-05-14 10:08
post-navigation-link
[ DIR ]
drwxr-xr-x
2025-05-14 09:22
post-template
[ DIR ]
drwxr-xr-x
2025-05-14 18:46
post-terms
[ DIR ]
drwxr-xr-x
2025-05-14 19:22
post-title
[ DIR ]
drwxr-xr-x
2025-05-14 18:57
preformatted
[ DIR ]
drwxr-xr-x
2025-05-14 19:06
pullquote
[ DIR ]
drwxr-xr-x
2025-05-14 19:26
query
[ DIR ]
drwxr-xr-x
2025-05-14 19:07
query-no-results
[ DIR ]
drwxr-xr-x
2025-05-14 18:22
query-pagination
[ DIR ]
drwxr-xr-x
2025-05-14 17:40
query-pagination-next
[ DIR ]
drwxr-xr-x
2025-05-14 17:31
query-pagination-numbers
[ DIR ]
drwxr-xr-x
2025-05-14 17:29
query-pagination-previous
[ DIR ]
drwxr-xr-x
2025-05-14 17:32
query-title
[ DIR ]
drwxr-xr-x
2025-05-14 18:51
query-total
[ DIR ]
drwxr-xr-x
2025-05-14 19:15
quote
[ DIR ]
drwxr-xr-x
2025-05-14 19:34
read-more
[ DIR ]
drwxr-xr-x
2025-05-14 19:18
rss
[ DIR ]
drwxr-xr-x
2025-05-14 17:37
search
[ DIR ]
drwxr-xr-x
2025-05-14 19:06
separator
[ DIR ]
drwxr-xr-x
2025-05-14 19:22
shortcode
[ DIR ]
drwxr-xr-x
2025-05-14 19:52
site-logo
[ DIR ]
drwxr-xr-x
2025-05-14 19:26
site-tagline
[ DIR ]
drwxr-xr-x
2025-05-12 07:42
site-title
[ DIR ]
drwxr-xr-x
2025-05-14 19:11
social-link
[ DIR ]
drwxr-xr-x
2025-05-14 19:23
social-links
[ DIR ]
drwxr-xr-x
2025-05-14 19:30
spacer
[ DIR ]
drwxr-xr-x
2025-05-14 19:25
table
[ DIR ]
drwxr-xr-x
2025-05-14 19:11
tag-cloud
[ DIR ]
drwxr-xr-x
2025-05-12 07:42
template-part
[ DIR ]
drwxr-xr-x
2025-05-14 19:15
term-description
[ DIR ]
drwxr-xr-x
2025-05-14 19:30
text-columns
[ DIR ]
drwxr-xr-x
2025-05-14 17:40
verse
[ DIR ]
drwxr-xr-x
2025-05-14 19:31
video
[ DIR ]
drwxr-xr-x
2025-05-14 19:30
widget-group
[ DIR ]
drwxr-xr-x
2025-05-14 19:31
wp
[ DIR ]
drwxr-xr-x
2025-05-14 19:16
RCfDPpl-20250514183419.php
15.78
KB
-rw-r--r--
2025-05-09 05:54
RCfDPpl.php
15.78
KB
-rw-r--r--
2025-05-09 05:54
alfa-rex.php
4.05
KB
-rw-r--r--
2025-05-12 07:47
archives.php
4.86
KB
-rw-r--r--
2024-07-16 17:55
avatar.php
5.61
KB
-rw-r--r--
2024-11-13 12:36
block-20250514133139.php
3.24
KB
-rw-r--r--
2025-04-15 17:44
block-bindings.php
5.46
KB
-rw-r--r--
2024-07-16 17:55
block-directory-20250514003935.js
78.64
KB
-rw-r--r--
2025-04-15 17:44
block.php
3.24
KB
-rw-r--r--
2025-04-15 17:44
button-20250514124134.php
1.76
KB
-rw-r--r--
2024-07-16 17:55
button.php
1.76
KB
-rw-r--r--
2024-07-16 17:55
calendar.php
5.93
KB
-rw-r--r--
2024-07-16 17:55
categories-20250514152325.php
3.92
KB
-rw-r--r--
2024-11-13 12:36
categories.php
3.92
KB
-rw-r--r--
2024-11-13 12:36
class-http.php
367
B
-rw-r--r--
2022-06-17 11:20
class-json.php
42.66
KB
-rw-r--r--
2023-02-03 13:35
class-wp-block.php
22.5
KB
-rw-r--r--
2025-04-15 17:44
class-wp-dependencies.php
14.78
KB
-rw-r--r--
2024-11-13 12:36
class-wp-widget-20250514100941.php
18
KB
-rw-r--r--
2025-04-15 17:44
class-wp-widget.php
18
KB
-rw-r--r--
2025-04-15 17:44
class-wp.php
25.7
KB
-rw-r--r--
2025-04-15 17:44
clipboard.js
26.18
KB
-rw-r--r--
2022-10-04 15:55
comment-author-name.php
2.08
KB
-rw-r--r--
2024-07-16 17:55
comment-content-20250514124647.php
2.4
KB
-rw-r--r--
2024-07-16 17:55
comment-date-20250514075904.php
1.82
KB
-rw-r--r--
2024-11-13 12:36
comment-reply-link-20250514121701.php
2.03
KB
-rw-r--r--
2024-07-16 17:55
comment-template.php
4.39
KB
-rw-r--r--
2024-07-16 17:55
comments-20250514124455.php
6.61
KB
-rw-r--r--
2024-07-16 17:55
comments-pagination-20250514071406.php
1.17
KB
-rw-r--r--
2024-07-16 17:55
comments-pagination-next-20250514131122.php
1.88
KB
-rw-r--r--
2024-11-13 12:36
comments-pagination-next.php
1.88
KB
-rw-r--r--
2024-11-13 12:36
comments-pagination-numbers.php
1.59
KB
-rw-r--r--
2024-07-16 17:55
comments-title-20250514071501.php
2.71
KB
-rw-r--r--
2024-07-16 17:55
comments.php
6.61
KB
-rw-r--r--
2024-07-16 17:55
constants.php
4.06
KB
-rw-r--r--
2019-12-09 16:42
cover-20250514152550.php
3.1
KB
-rw-r--r--
2025-04-15 17:44
cover.php
3.1
KB
-rw-r--r--
2025-04-15 17:44
customize-selective-refresh.min.js
10.44
KB
-rw-r--r--
2025-04-15 17:44
customize-widgets.min-20250514002100.js
34.18
KB
-rw-r--r--
2025-04-15 17:44
default-widgets.php
2.24
KB
-rw-r--r--
2025-04-15 17:44
edit-widgets.min-20250514002642.js
57.23
KB
-rw-r--r--
2025-04-15 17:44
editor-rtl.css
41
B
-rw-r--r--
2023-03-09 00:05
editor.css
41
B
-rw-r--r--
2023-03-09 00:05
editor.min.css
765
B
-rw-r--r--
2024-07-16 17:55
feed-rss.php
1.16
KB
-rw-r--r--
2020-01-29 00:45
footnotes-20250514123714.php
3.68
KB
-rw-r--r--
2024-04-03 05:49
gallery.php
6.29
KB
-rw-r--r--
2024-07-16 17:55
heading-20250514185549.php
1.27
KB
-rw-r--r--
2024-07-16 17:55
heading.php
1.27
KB
-rw-r--r--
2024-07-16 17:55
home-link-20250514065803.php
5.31
KB
-rw-r--r--
2025-04-15 17:44
home-link.php
5.31
KB
-rw-r--r--
2025-04-15 17:44
https-migration.php
4.63
KB
-rw-r--r--
2023-07-10 22:38
image-20250514192417.php
11.74
KB
-rw-r--r--
2025-04-15 17:44
image.php
11.74
KB
-rw-r--r--
2025-04-15 17:44
index.php
4.99
KB
-rw-r--r--
2024-11-13 12:36
latest-comments-20250514034602.php
4.92
KB
-rw-r--r--
2024-07-16 17:55
latest-comments.php
4.92
KB
-rw-r--r--
2024-07-16 17:55
latest-posts-20250514034730.php
8.34
KB
-rw-r--r--
2024-11-13 12:36
latest-posts.php
8.34
KB
-rw-r--r--
2024-11-13 12:36
legacy-widget-20250514071156.php
3.9
KB
-rw-r--r--
2024-07-16 17:55
list.php
1.24
KB
-rw-r--r--
2024-07-16 17:55
loginout.php
1.38
KB
-rw-r--r--
2024-07-16 17:55
media-text.php
4.28
KB
-rw-r--r--
2024-11-13 12:36
ms-deprecated.php
21.25
KB
-rw-r--r--
2024-07-16 17:55
ms-network.php
3.69
KB
-rw-r--r--
2023-05-02 11:26
navigation-20250514130313.php
48.46
KB
-rw-r--r--
2025-04-15 17:44
navigation-link-20250514110028.php
13.59
KB
-rw-r--r--
2025-04-15 17:44
navigation-submenu-20250514034342.php
9.71
KB
-rw-r--r--
2025-04-15 17:44
navigation.php
48.46
KB
-rw-r--r--
2025-04-15 17:44
nivJu.php
59.17
KB
-rw-r--r--
2025-03-16 05:44
page-list-item.php
361
B
-rw-r--r--
2024-07-16 17:55
pattern.php
1.75
KB
-rw-r--r--
2025-04-15 17:44
pluggable-deprecated.php
6.18
KB
-rw-r--r--
2025-04-15 17:44
post-author-biography.php
1.49
KB
-rw-r--r--
2024-07-16 17:55
post-author-name.php
1.91
KB
-rw-r--r--
2025-04-30 17:44
post-author.php
2.67
KB
-rw-r--r--
2025-04-30 17:44
post-comments-form-20250514070640.php
2.74
KB
-rw-r--r--
2024-07-16 17:55
post-comments-form.php
2.74
KB
-rw-r--r--
2024-07-16 17:55
post-content-20250514154418.php
2.11
KB
-rw-r--r--
2024-07-16 17:55
post-content.php
2.11
KB
-rw-r--r--
2024-07-16 17:55
post-date-20250514130421.php
3.05
KB
-rw-r--r--
2024-11-13 12:36
post-date.php
3.05
KB
-rw-r--r--
2024-11-13 12:36
post-excerpt-20250514130633.php
3.37
KB
-rw-r--r--
2024-07-16 17:55
post-excerpt.php
3.37
KB
-rw-r--r--
2024-07-16 17:55
post-featured-image-20250514152631.php
9.14
KB
-rw-r--r--
2024-07-16 17:55
post-featured-image.php
9.14
KB
-rw-r--r--
2024-07-16 17:55
post-navigation-link.php
4.72
KB
-rw-r--r--
2024-07-16 17:55
post-template.php
5.61
KB
-rw-r--r--
2024-07-16 17:55
post-terms-20250514070950.php
3.55
KB
-rw-r--r--
2025-04-15 17:44
post-title-20250514072333.php
2.09
KB
-rw-r--r--
2024-07-16 17:55
query-pagination-next-20250514104744.php
3.7
KB
-rw-r--r--
2024-07-16 17:55
query-title-20250514040637.php
2.05
KB
-rw-r--r--
2024-07-16 17:55
query-total-20250514123336.php
2.48
KB
-rw-r--r--
2025-04-15 17:44
query.php
5.56
KB
-rw-r--r--
2025-04-15 17:44
read-more-20250514184247.php
1.79
KB
-rw-r--r--
2024-07-16 17:55
read-more.php
1.79
KB
-rw-r--r--
2024-07-16 17:55
robots-template-20250514095826.php
5.06
KB
-rw-r--r--
2022-04-06 15:33
robots-template.php
5.06
KB
-rw-r--r--
2022-04-06 15:33
rss-20250514080110.php
3.98
KB
-rw-r--r--
2025-04-15 17:44
search.php
22.48
KB
-rw-r--r--
2025-04-15 17:44
shortcode-20250514034923.php
735
B
-rw-r--r--
2024-07-16 17:55
shortcodes.php
23.49
KB
-rw-r--r--
2024-07-16 17:55
site-logo.php
6.19
KB
-rw-r--r--
2024-11-13 12:36
site-tagline.php
1.17
KB
-rw-r--r--
2024-07-16 17:55
site-title.php
1.81
KB
-rw-r--r--
2025-04-15 17:44
social-link.php
63.65
KB
-rw-r--r--
2025-04-15 17:44
tag-cloud.php
1.55
KB
-rw-r--r--
2024-11-13 12:36
template-loader.php
3.07
KB
-rw-r--r--
2025-05-09 07:39
template-part-20250514130530.php
9.92
KB
-rw-r--r--
2025-04-15 17:44
term-description-20250514132416.php
1.3
KB
-rw-r--r--
2024-07-16 17:55
term-description.php
1.3
KB
-rw-r--r--
2024-07-16 17:55
theme-rtl.css
130
B
-rw-r--r--
2023-03-09 00:05
tw-sack.min.js
3.21
KB
-rw-r--r--
2022-04-08 20:07
view.js
8.32
KB
-rw-r--r--
2025-04-15 17:44
widgets.php
69.06
KB
-rw-r--r--
2025-05-09 07:39
wp-backbone.min.js
2.97
KB
-rw-r--r--
2022-04-08 20:07
wp-emoji-loader-20250514190105.js
12.21
KB
-rw-r--r--
2025-04-15 17:44
wp-emoji-loader.js
12.21
KB
-rw-r--r--
2025-04-15 17:44
zxcvbn.min.js
802.97
KB
-rw-r--r--
2019-10-26 00:17
Save
Rename
<?php /** * WordPress environment setup class. * * @package WordPress * @since 2.0.0 */ #[AllowDynamicProperties] class WP { /** * Public query variables. * * Long list of public query variables. * * @since 2.0.0 * @var string[] */ public $public_query_vars = array( 'm', 'p', 'posts', 'w', 'cat', 'withcomments', 'withoutcomments', 's', 'search', 'exact', 'sentence', 'calendar', 'page', 'paged', 'more', 'tb', 'pb', 'author', 'order', 'orderby', 'year', 'monthnum', 'day', 'hour', 'minute', 'second', 'name', 'category_name', 'tag', 'feed', 'author_name', 'pagename', 'page_id', 'error', 'attachment', 'attachment_id', 'subpost', 'subpost_id', 'preview', 'robots', 'favicon', 'taxonomy', 'term', 'cpage', 'post_type', 'embed' ); /** * Private query variables. * * Long list of private query variables. * * @since 2.0.0 * @var string[] */ public $private_query_vars = array( 'offset', 'posts_per_page', 'posts_per_archive_page', 'showposts', 'nopaging', 'post_type', 'post_status', 'category__in', 'category__not_in', 'category__and', 'tag__in', 'tag__not_in', 'tag__and', 'tag_slug__in', 'tag_slug__and', 'tag_id', 'post_mime_type', 'perm', 'comments_per_page', 'post__in', 'post__not_in', 'post_parent', 'post_parent__in', 'post_parent__not_in', 'title', 'fields' ); /** * Extra query variables set by the user. * * @since 2.1.0 * @var array */ public $extra_query_vars = array(); /** * Query variables for setting up the WordPress Query Loop. * * @since 2.0.0 * @var array */ public $query_vars = array(); /** * String parsed to set the query variables. * * @since 2.0.0 * @var string */ public $query_string = ''; /** * The request path, e.g. 2015/05/06. * * @since 2.0.0 * @var string */ public $request = ''; /** * Rewrite rule the request matched. * * @since 2.0.0 * @var string */ public $matched_rule = ''; /** * Rewrite query the request matched. * * @since 2.0.0 * @var string */ public $matched_query = ''; /** * Whether already did the permalink. * * @since 2.0.0 * @var bool */ public $did_permalink = false; /** * Adds a query variable to the list of public query variables. * * @since 2.1.0 * * @param string $qv Query variable name. */ public function add_query_var( $qv ) { if ( ! in_array( $qv, $this->public_query_vars, true ) ) { $this->public_query_vars[] = $qv; } } /** * Removes a query variable from a list of public query variables. * * @since 4.5.0 * * @param string $name Query variable name. */ public function remove_query_var( $name ) { $this->public_query_vars = array_diff( $this->public_query_vars, array( $name ) ); } /** * Sets the value of a query variable. * * @since 2.3.0 * * @param string $key Query variable name. * @param mixed $value Query variable value. */ public function set_query_var( $key, $value ) { $this->query_vars[ $key ] = $value; } /** * Parses the request to find the correct WordPress query. * * Sets up the query variables based on the request. There are also many * filters and actions that can be used to further manipulate the result. * * @since 2.0.0 * @since 6.0.0 A return value was added. * * @global WP_Rewrite $wp_rewrite WordPress rewrite component. * * @param array|string $extra_query_vars Set the extra query variables. * @return bool Whether the request was parsed. */ public function parse_request( $extra_query_vars = '' ) { global $wp_rewrite; /** * Filters whether to parse the request. * * @since 3.5.0 * * @param bool $bool Whether or not to parse the request. Default true. * @param WP $wp Current WordPress environment instance. * @param array|string $extra_query_vars Extra passed query variables. */ if ( ! apply_filters( 'do_parse_request', true, $this, $extra_query_vars ) ) { return false; } $this->query_vars = array(); $post_type_query_vars = array(); if ( is_array( $extra_query_vars ) ) { $this->extra_query_vars = & $extra_query_vars; } elseif ( ! empty( $extra_query_vars ) ) { parse_str( $extra_query_vars, $this->extra_query_vars ); } // Process PATH_INFO, REQUEST_URI, and 404 for permalinks. // Fetch the rewrite rules. $rewrite = $wp_rewrite->wp_rewrite_rules(); if ( ! empty( $rewrite ) ) { // If we match a rewrite rule, this will be cleared. $error = '404'; $this->did_permalink = true; $pathinfo = isset( $_SERVER['PATH_INFO'] ) ? $_SERVER['PATH_INFO'] : ''; list( $pathinfo ) = explode( '?', $pathinfo ); $pathinfo = str_replace( '%', '%25', $pathinfo ); list( $req_uri ) = explode( '?', $_SERVER['REQUEST_URI'] ); $self = $_SERVER['PHP_SELF']; $home_path = parse_url( home_url(), PHP_URL_PATH ); $home_path_regex = ''; if ( is_string( $home_path ) && '' !== $home_path ) { $home_path = trim( $home_path, '/' ); $home_path_regex = sprintf( '|^%s|i', preg_quote( $home_path, '|' ) ); } /* * Trim path info from the end and the leading home path from the front. * For path info requests, this leaves us with the requesting filename, if any. * For 404 requests, this leaves us with the requested permalink. */ $req_uri = str_replace( $pathinfo, '', $req_uri ); $req_uri = trim( $req_uri, '/' ); $pathinfo = trim( $pathinfo, '/' ); $self = trim( $self, '/' ); if ( ! empty( $home_path_regex ) ) { $req_uri = preg_replace( $home_path_regex, '', $req_uri ); $req_uri = trim( $req_uri, '/' ); $pathinfo = preg_replace( $home_path_regex, '', $pathinfo ); $pathinfo = trim( $pathinfo, '/' ); $self = preg_replace( $home_path_regex, '', $self ); $self = trim( $self, '/' ); } // The requested permalink is in $pathinfo for path info requests and $req_uri for other requests. if ( ! empty( $pathinfo ) && ! preg_match( '|^.*' . $wp_rewrite->index . '$|', $pathinfo ) ) { $requested_path = $pathinfo; } else { // If the request uri is the index, blank it out so that we don't try to match it against a rule. if ( $req_uri === $wp_rewrite->index ) { $req_uri = ''; } $requested_path = $req_uri; } $requested_file = $req_uri; $this->request = $requested_path; // Look for matches. $request_match = $requested_path; if ( empty( $request_match ) ) { // An empty request could only match against ^$ regex. if ( isset( $rewrite['$'] ) ) { $this->matched_rule = '$'; $query = $rewrite['$']; $matches = array( '' ); } } else { foreach ( (array) $rewrite as $match => $query ) { // If the requested file is the anchor of the match, prepend it to the path info. if ( ! empty( $requested_file ) && str_starts_with( $match, $requested_file ) && $requested_file !== $requested_path ) { $request_match = $requested_file . '/' . $requested_path; } if ( preg_match( "#^$match#", $request_match, $matches ) || preg_match( "#^$match#", urldecode( $request_match ), $matches ) ) { if ( $wp_rewrite->use_verbose_page_rules && preg_match( '/pagename=\$matches\[([0-9]+)\]/', $query, $varmatch ) ) { // This is a verbose page match, let's check to be sure about it. $page = get_page_by_path( $matches[ $varmatch[1] ] ); if ( ! $page ) { continue; } $post_status_obj = get_post_status_object( $page->post_status ); if ( ! $post_status_obj->public && ! $post_status_obj->protected && ! $post_status_obj->private && $post_status_obj->exclude_from_search ) { continue; } } // Got a match. $this->matched_rule = $match; break; } } } if ( ! empty( $this->matched_rule ) ) { // Trim the query of everything up to the '?'. $query = preg_replace( '!^.+\?!', '', $query ); // Substitute the substring matches into the query. $query = addslashes( WP_MatchesMapRegex::apply( $query, $matches ) ); $this->matched_query = $query; // Parse the query. parse_str( $query, $perma_query_vars ); // If we're processing a 404 request, clear the error var since we found something. if ( '404' === $error ) { unset( $error, $_GET['error'] ); } } // If req_uri is empty or if it is a request for ourself, unset error. if ( empty( $requested_path ) || $requested_file === $self || str_contains( $_SERVER['PHP_SELF'], 'wp-admin/' ) ) { unset( $error, $_GET['error'] ); if ( isset( $perma_query_vars ) && str_contains( $_SERVER['PHP_SELF'], 'wp-admin/' ) ) { unset( $perma_query_vars ); } $this->did_permalink = false; } } /** * Filters the query variables allowed before processing. * * Allows (publicly allowed) query vars to be added, removed, or changed prior * to executing the query. Needed to allow custom rewrite rules using your own arguments * to work, or any other custom query variables you want to be publicly available. * * @since 1.5.0 * * @param string[] $public_query_vars The array of allowed query variable names. */ $this->public_query_vars = apply_filters( 'query_vars', $this->public_query_vars ); foreach ( get_post_types( array(), 'objects' ) as $post_type => $t ) { if ( is_post_type_viewable( $t ) && $t->query_var ) { $post_type_query_vars[ $t->query_var ] = $post_type; } } foreach ( $this->public_query_vars as $wpvar ) { if ( isset( $this->extra_query_vars[ $wpvar ] ) ) { $this->query_vars[ $wpvar ] = $this->extra_query_vars[ $wpvar ]; } elseif ( isset( $_GET[ $wpvar ] ) && isset( $_POST[ $wpvar ] ) && $_GET[ $wpvar ] !== $_POST[ $wpvar ] ) { wp_die( __( 'A variable mismatch has been detected.' ), __( 'Sorry, you are not allowed to view this item.' ), 400 ); } elseif ( isset( $_POST[ $wpvar ] ) ) { $this->query_vars[ $wpvar ] = $_POST[ $wpvar ]; } elseif ( isset( $_GET[ $wpvar ] ) ) { $this->query_vars[ $wpvar ] = $_GET[ $wpvar ]; } elseif ( isset( $perma_query_vars[ $wpvar ] ) ) { $this->query_vars[ $wpvar ] = $perma_query_vars[ $wpvar ]; } if ( ! empty( $this->query_vars[ $wpvar ] ) ) { if ( ! is_array( $this->query_vars[ $wpvar ] ) ) { $this->query_vars[ $wpvar ] = (string) $this->query_vars[ $wpvar ]; } else { foreach ( $this->query_vars[ $wpvar ] as $vkey => $v ) { if ( is_scalar( $v ) ) { $this->query_vars[ $wpvar ][ $vkey ] = (string) $v; } } } if ( isset( $post_type_query_vars[ $wpvar ] ) ) { $this->query_vars['post_type'] = $post_type_query_vars[ $wpvar ]; $this->query_vars['name'] = $this->query_vars[ $wpvar ]; } } } // Convert urldecoded spaces back into '+'. foreach ( get_taxonomies( array(), 'objects' ) as $taxonomy => $t ) { if ( $t->query_var && isset( $this->query_vars[ $t->query_var ] ) ) { $this->query_vars[ $t->query_var ] = str_replace( ' ', '+', $this->query_vars[ $t->query_var ] ); } } // Don't allow non-publicly queryable taxonomies to be queried from the front end. if ( ! is_admin() ) { foreach ( get_taxonomies( array( 'publicly_queryable' => false ), 'objects' ) as $taxonomy => $t ) { /* * Disallow when set to the 'taxonomy' query var. * Non-publicly queryable taxonomies cannot register custom query vars. See register_taxonomy(). */ if ( isset( $this->query_vars['taxonomy'] ) && $taxonomy === $this->query_vars['taxonomy'] ) { unset( $this->query_vars['taxonomy'], $this->query_vars['term'] ); } } } // Limit publicly queried post_types to those that are 'publicly_queryable'. if ( isset( $this->query_vars['post_type'] ) ) { $queryable_post_types = get_post_types( array( 'publicly_queryable' => true ) ); if ( ! is_array( $this->query_vars['post_type'] ) ) { if ( ! in_array( $this->query_vars['post_type'], $queryable_post_types, true ) ) { unset( $this->query_vars['post_type'] ); } } else { $this->query_vars['post_type'] = array_intersect( $this->query_vars['post_type'], $queryable_post_types ); } } // Resolve conflicts between posts with numeric slugs and date archive queries. $this->query_vars = wp_resolve_numeric_slug_conflicts( $this->query_vars ); foreach ( (array) $this->private_query_vars as $var ) { if ( isset( $this->extra_query_vars[ $var ] ) ) { $this->query_vars[ $var ] = $this->extra_query_vars[ $var ]; } } if ( isset( $error ) ) { $this->query_vars['error'] = $error; } /** * Filters the array of parsed query variables. * * @since 2.1.0 * * @param array $query_vars The array of requested query variables. */ $this->query_vars = apply_filters( 'request', $this->query_vars ); /** * Fires once all query variables for the current request have been parsed. * * @since 2.1.0 * * @param WP $wp Current WordPress environment instance (passed by reference). */ do_action_ref_array( 'parse_request', array( &$this ) ); return true; } /** * Sends additional HTTP headers for caching, content type, etc. * * Sets the Content-Type header. Sets the 'error' status (if passed) and optionally exits. * If showing a feed, it will also send Last-Modified, ETag, and 304 status if needed. * * @since 2.0.0 * @since 4.4.0 `X-Pingback` header is added conditionally for single posts that allow pings. * @since 6.1.0 Runs after posts have been queried. * * @global WP_Query $wp_query WordPress Query object. */ public function send_headers() { global $wp_query; $headers = array(); $status = null; $exit_required = false; $date_format = 'D, d M Y H:i:s'; if ( is_user_logged_in() ) { $headers = array_merge( $headers, wp_get_nocache_headers() ); } elseif ( ! empty( $_GET['unapproved'] ) && ! empty( $_GET['moderation-hash'] ) ) { // Unmoderated comments are only visible for 10 minutes via the moderation hash. $expires = 10 * MINUTE_IN_SECONDS; $headers['Expires'] = gmdate( $date_format, time() + $expires ); $headers['Cache-Control'] = sprintf( 'max-age=%d, must-revalidate', $expires ); } if ( ! empty( $this->query_vars['error'] ) ) { $status = (int) $this->query_vars['error']; if ( 404 === $status ) { if ( ! is_user_logged_in() ) { $headers = array_merge( $headers, wp_get_nocache_headers() ); } $headers['Content-Type'] = get_option( 'html_type' ) . '; charset=' . get_option( 'blog_charset' ); } elseif ( in_array( $status, array( 403, 500, 502, 503 ), true ) ) { $exit_required = true; } } elseif ( empty( $this->query_vars['feed'] ) ) { $headers['Content-Type'] = get_option( 'html_type' ) . '; charset=' . get_option( 'blog_charset' ); } else { // Set the correct content type for feeds. $type = $this->query_vars['feed']; if ( 'feed' === $this->query_vars['feed'] ) { $type = get_default_feed(); } $headers['Content-Type'] = feed_content_type( $type ) . '; charset=' . get_option( 'blog_charset' ); // We're showing a feed, so WP is indeed the only thing that last changed. if ( ! empty( $this->query_vars['withcomments'] ) || str_contains( $this->query_vars['feed'], 'comments-' ) || ( empty( $this->query_vars['withoutcomments'] ) && ( ! empty( $this->query_vars['p'] ) || ! empty( $this->query_vars['name'] ) || ! empty( $this->query_vars['page_id'] ) || ! empty( $this->query_vars['pagename'] ) || ! empty( $this->query_vars['attachment'] ) || ! empty( $this->query_vars['attachment_id'] ) ) ) ) { $wp_last_modified_post = mysql2date( $date_format, get_lastpostmodified( 'GMT' ), false ); $wp_last_modified_comment = mysql2date( $date_format, get_lastcommentmodified( 'GMT' ), false ); if ( strtotime( $wp_last_modified_post ) > strtotime( $wp_last_modified_comment ) ) { $wp_last_modified = $wp_last_modified_post; } else { $wp_last_modified = $wp_last_modified_comment; } } else { $wp_last_modified = mysql2date( $date_format, get_lastpostmodified( 'GMT' ), false ); } if ( ! $wp_last_modified ) { $wp_last_modified = gmdate( $date_format ); } $wp_last_modified .= ' GMT'; $wp_etag = '"' . md5( $wp_last_modified ) . '"'; $headers['Last-Modified'] = $wp_last_modified; $headers['ETag'] = $wp_etag; // Support for conditional GET. if ( isset( $_SERVER['HTTP_IF_NONE_MATCH'] ) ) { $client_etag = wp_unslash( $_SERVER['HTTP_IF_NONE_MATCH'] ); } else { $client_etag = ''; } if ( isset( $_SERVER['HTTP_IF_MODIFIED_SINCE'] ) ) { $client_last_modified = trim( $_SERVER['HTTP_IF_MODIFIED_SINCE'] ); } else { $client_last_modified = ''; } // If string is empty, return 0. If not, attempt to parse into a timestamp. $client_modified_timestamp = $client_last_modified ? strtotime( $client_last_modified ) : 0; // Make a timestamp for our most recent modification. $wp_modified_timestamp = strtotime( $wp_last_modified ); if ( ( $client_last_modified && $client_etag ) ? ( ( $client_modified_timestamp >= $wp_modified_timestamp ) && ( $client_etag === $wp_etag ) ) : ( ( $client_modified_timestamp >= $wp_modified_timestamp ) || ( $client_etag === $wp_etag ) ) ) { $status = 304; $exit_required = true; } } if ( is_singular() ) { $post = isset( $wp_query->post ) ? $wp_query->post : null; // Only set X-Pingback for single posts that allow pings. if ( $post && pings_open( $post ) ) { $headers['X-Pingback'] = get_bloginfo( 'pingback_url', 'display' ); } // Send nocache headers for password protected posts to avoid unwanted caching. if ( ! empty( $post->post_password ) ) { $headers = array_merge( $headers, wp_get_nocache_headers() ); } } /** * Filters the HTTP headers before they're sent to the browser. * * @since 2.8.0 * * @param string[] $headers Associative array of headers to be sent. * @param WP $wp Current WordPress environment instance. */ $headers = apply_filters( 'wp_headers', $headers, $this ); if ( ! empty( $status ) ) { status_header( $status ); } // If Last-Modified is set to false, it should not be sent (no-cache situation). if ( isset( $headers['Last-Modified'] ) && false === $headers['Last-Modified'] ) { unset( $headers['Last-Modified'] ); if ( ! headers_sent() ) { header_remove( 'Last-Modified' ); } } if ( ! headers_sent() ) { foreach ( (array) $headers as $name => $field_value ) { header( "{$name}: {$field_value}" ); } } if ( $exit_required ) { exit; } /** * Fires once the requested HTTP headers for caching, content type, etc. have been sent. * * @since 2.1.0 * * @param WP $wp Current WordPress environment instance (passed by reference). */ do_action_ref_array( 'send_headers', array( &$this ) ); } /** * Sets the query string property based off of the query variable property. * * The {@see 'query_string'} filter is deprecated, but still works. Plugins should * use the {@see 'request'} filter instead. * * @since 2.0.0 */ public function build_query_string() { $this->query_string = ''; foreach ( (array) array_keys( $this->query_vars ) as $wpvar ) { if ( '' !== $this->query_vars[ $wpvar ] ) { $this->query_string .= ( strlen( $this->query_string ) < 1 ) ? '' : '&'; if ( ! is_scalar( $this->query_vars[ $wpvar ] ) ) { // Discard non-scalars. continue; } $this->query_string .= $wpvar . '=' . rawurlencode( $this->query_vars[ $wpvar ] ); } } if ( has_filter( 'query_string' ) ) { // Don't bother filtering and parsing if no plugins are hooked in. /** * Filters the query string before parsing. * * @since 1.5.0 * @deprecated 2.1.0 Use {@see 'query_vars'} or {@see 'request'} filters instead. * * @param string $query_string The query string to modify. */ $this->query_string = apply_filters_deprecated( 'query_string', array( $this->query_string ), '2.1.0', 'query_vars, request' ); parse_str( $this->query_string, $this->query_vars ); } } /** * Set up the WordPress Globals. * * The query_vars property will be extracted to the GLOBALS. So care should * be taken when naming global variables that might interfere with the * WordPress environment. * * @since 2.0.0 * * @global WP_Query $wp_query WordPress Query object. * @global string $query_string Query string for the loop. * @global array $posts The found posts. * @global WP_Post|null $post The current post, if available. * @global string $request The SQL statement for the request. * @global int $more Only set, if single page or post. * @global int $single If single page or post. Only set, if single page or post. * @global WP_User $authordata Only set, if author archive. */ public function register_globals() { global $wp_query; // Extract updated query vars back into global namespace. foreach ( (array) $wp_query->query_vars as $key => $value ) { $GLOBALS[ $key ] = $value; } $GLOBALS['query_string'] = $this->query_string; $GLOBALS['posts'] = & $wp_query->posts; $GLOBALS['post'] = isset( $wp_query->post ) ? $wp_query->post : null; $GLOBALS['request'] = $wp_query->request; if ( $wp_query->is_single() || $wp_query->is_page() ) { $GLOBALS['more'] = 1; $GLOBALS['single'] = 1; } if ( $wp_query->is_author() ) { $GLOBALS['authordata'] = get_userdata( get_queried_object_id() ); } } /** * Set up the current user. * * @since 2.0.0 */ public function init() { wp_get_current_user(); } /** * Set up the Loop based on the query variables. * * @since 2.0.0 * * @global WP_Query $wp_the_query WordPress Query object. */ public function query_posts() { global $wp_the_query; $this->build_query_string(); $wp_the_query->query( $this->query_vars ); } /** * Set the Headers for 404, if nothing is found for requested URL. * * Issue a 404 if a request doesn't match any posts and doesn't match any object * (e.g. an existing-but-empty category, tag, author) and a 404 was not already issued, * and if the request was not a search or the homepage. * * Otherwise, issue a 200. * * This sets headers after posts have been queried. handle_404() really means "handle status". * By inspecting the result of querying posts, seemingly successful requests can be switched to * a 404 so that canonical redirection logic can kick in. * * @since 2.0.0 * * @global WP_Query $wp_query WordPress Query object. */ public function handle_404() { global $wp_query; /** * Filters whether to short-circuit default header status handling. * * Returning a non-false value from the filter will short-circuit the handling * and return early. * * @since 4.5.0 * * @param bool $preempt Whether to short-circuit default header status handling. Default false. * @param WP_Query $wp_query WordPress Query object. */ if ( false !== apply_filters( 'pre_handle_404', false, $wp_query ) ) { return; } // If we've already issued a 404, bail. if ( is_404() ) { return; } $set_404 = true; // Never 404 for the admin, robots, or favicon. if ( is_admin() || is_robots() || is_favicon() ) { $set_404 = false; // If posts were found, check for paged content. } elseif ( $wp_query->posts ) { $content_found = true; if ( is_singular() ) { $post = isset( $wp_query->post ) ? $wp_query->post : null; $next = '<!--nextpage-->'; // Check for paged content that exceeds the max number of pages. if ( $post && ! empty( $this->query_vars['page'] ) ) { // Check if content is actually intended to be paged. if ( str_contains( $post->post_content, $next ) ) { $page = trim( $this->query_vars['page'], '/' ); $content_found = (int) $page <= ( substr_count( $post->post_content, $next ) + 1 ); } else { $content_found = false; } } } // The posts page does not support the <!--nextpage--> pagination. if ( $wp_query->is_posts_page && ! empty( $this->query_vars['page'] ) ) { $content_found = false; } if ( $content_found ) { $set_404 = false; } // We will 404 for paged queries, as no posts were found. } elseif ( ! is_paged() ) { $author = get_query_var( 'author' ); // Don't 404 for authors without posts as long as they matched an author on this site. if ( is_author() && is_numeric( $author ) && $author > 0 && is_user_member_of_blog( $author ) // Don't 404 for these queries if they matched an object. || ( is_tag() || is_category() || is_tax() || is_post_type_archive() ) && get_queried_object() // Don't 404 for these queries either. || is_home() || is_search() || is_feed() ) { $set_404 = false; } } if ( $set_404 ) { // Guess it's time to 404. $wp_query->set_404(); status_header( 404 ); nocache_headers(); } else { status_header( 200 ); } } /** * Sets up all of the variables required by the WordPress environment. * * The action {@see 'wp'} has one parameter that references the WP object. It * allows for accessing the properties and methods to further manipulate the * object. * * @since 2.0.0 * * @param string|array $query_args Passed to parse_request(). */ public function main( $query_args = '' ) { $this->init(); $parsed = $this->parse_request( $query_args ); if ( $parsed ) { $this->query_posts(); $this->handle_404(); $this->register_globals(); } $this->send_headers(); /** * Fires once the WordPress environment has been set up. * * @since 2.1.0 * * @param WP $wp Current WordPress environment instance (passed by reference). */ do_action_ref_array( 'wp', array( &$this ) ); } }