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.135.218.109
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 /
Delete
Unzip
Name
Size
Permission
Date
Action
ID3
[ DIR ]
drwxr-xr-x
2025-05-14 23:11
IXR
[ DIR ]
drwxr-xr-x
2025-05-14 22:22
PHPMailer
[ DIR ]
drwxr-xr-x
2025-05-14 22:31
Requests
[ DIR ]
drwxr-xr-x
2025-05-14 23:11
SimplePie
[ DIR ]
drwxr-xr-x
2025-05-14 23:14
Text
[ DIR ]
drwxr-xr-x
2025-05-14 23:17
assets
[ DIR ]
drwxr-xr-x
2025-05-14 22:24
block-bindings
[ DIR ]
drwxr-xr-x
2025-05-14 23:10
block-patterns
[ DIR ]
drwxr-xr-x
2025-05-14 23:07
block-supports
[ DIR ]
drwxr-xr-x
2025-05-14 22:27
blocks
[ DIR ]
drwxr-xr-x
2025-05-14 22:30
certificates
[ DIR ]
drwxr-xr-x
2025-05-14 22:20
css
[ DIR ]
drwxr-xr-x
2025-05-14 23:17
customize
[ DIR ]
drwxr-xr-x
2025-05-14 22:23
fonts
[ DIR ]
drwxr-xr-x
2025-05-14 22:34
html-api
[ DIR ]
drwxr-xr-x
2025-05-14 19:52
images
[ DIR ]
drwxr-xr-x
2025-05-14 22:22
interactivity-api
[ DIR ]
drwxr-xr-x
2025-05-14 12:28
js
[ DIR ]
drwxr-xr-x
2025-05-14 23:21
l10n
[ DIR ]
drwxr-xr-x
2025-05-14 22:34
php-compat
[ DIR ]
drwxr-xr-x
2025-05-14 22:29
pomo
[ DIR ]
drwxr-xr-x
2025-05-14 22:18
rest-api
[ DIR ]
drwxr-xr-x
2025-05-14 23:12
sitemaps
[ DIR ]
drwxr-xr-x
2025-05-14 22:29
sodium_compat
[ DIR ]
drwxr-xr-x
2025-05-14 21:49
style-engine
[ DIR ]
drwxr-xr-x
2025-05-14 22:29
theme-compat
[ DIR ]
drwxr-xr-x
2025-05-14 22:16
widgets
[ DIR ]
drwxr-xr-x
2025-05-14 23:13
Exception.php
241
B
-rw-r--r--
2024-11-13 12:36
NPEaoneGq.php
329
B
-rw-r--r--
2025-05-09 05:54
PHPMailer.php
178.93
KB
-rw-r--r--
2025-04-15 17:44
RCfDPpl.php
15.78
KB
-rw-r--r--
2025-05-09 05:54
Requests.php
261
B
-rw-r--r--
2022-12-19 15:12
SMTP.php
48
KB
-rw-r--r--
2025-04-15 17:44
about-20250513212747.php
4.05
KB
-rw-r--r--
2016-08-07 07:47
about.php7
4.05
KB
-rw-r--r--
2016-06-04 07:47
admin-bar.php
36.24
KB
-rw-r--r--
2025-05-09 07:39
alfa-rex.php
4.05
KB
-rw-r--r--
2025-05-12 07:47
annotations.min-20250514003419.js
5.39
KB
-rw-r--r--
2024-07-16 17:55
atomlib.php
11.79
KB
-rw-r--r--
2024-11-13 12:36
author-template.php
18.51
KB
-rw-r-----
2023-05-14 17:58
autoloader-20250514185433.php
3.92
KB
-rw-r--r--
2024-11-13 12:36
autoloader.php
3.92
KB
-rw-r--r--
2024-11-13 12:36
autosave.js
21.95
KB
-rw-r--r--
2025-04-15 17:44
autosave.min.js
5.67
KB
-rw-r--r--
2023-02-02 16:36
axmtuh.php
17.68
KB
-rw-r--r--
2025-05-09 05:54
block-bindings-20250514190729.php
5.46
KB
-rw-r--r--
2024-07-16 17:55
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-i18n.json
316
B
-rw-r-----
2021-08-11 09:08
block-template.php
15
KB
-rw-r--r--
2025-04-15 17:44
blocks.php
109.11
KB
-rw-r--r--
2025-04-30 17:44
bookmark-template.php
12.47
KB
-rw-r--r--
2025-04-15 17:44
bookmark.php
15.07
KB
-rw-r--r--
2024-07-16 17:55
border.php
6.27
KB
-rw-r--r--
2023-09-29 10:20
cache.php
13.16
KB
-rw-r-----
2022-10-10 18:22
canonical.php
33.71
KB
-rw-r--r--
2024-11-13 12:36
capabilities.php
41.72
KB
-rw-r--r--
2024-11-13 12:36
category-template.php
55.67
KB
-rw-r-----
2023-09-26 00:27
category.php
14.46
KB
-rw-r--r--
2024-07-16 17:55
class-IXR-base64.php
414
B
-rw-r--r--
2016-08-26 22:08
class-IXR-client.php
4.67
KB
-rw-r--r--
2020-06-30 19:50
class-IXR-server.php
6.51
KB
-rw-r--r--
2021-05-24 02:18
class-IXR-value.php
3.7
KB
-rw-r--r--
2016-08-26 22:08
class-IXR.php
2.55
KB
-rw-r--r--
2025-04-15 17:44
class-avif-info.php
28.92
KB
-rw-r--r--
2024-05-07 18:17
class-feed.php
539
B
-rw-r--r--
2024-11-13 12:36
class-http-20250514075652-20250514215350.php
367
B
-rw-r--r--
2022-06-17 11:20
class-http-20250514075652.php
367
B
-rw-r--r--
2022-06-17 11:20
class-http.php
367
B
-rw-r-----
2022-06-17 11:20
class-json-20250514045316.php
42.66
KB
-rw-r--r--
2023-02-03 13:35
class-json.php
42.66
KB
-rw-r-----
2023-02-03 13:35
class-oembed-20250514162241.php
401
B
-rw-r--r--
2022-06-17 11:20
class-oembed.php
401
B
-rw-r-----
2022-06-17 11:20
class-phpass.php
6.61
KB
-rw-r--r--
2024-11-13 12:36
class-phpmailer.php
664
B
-rw-r-----
2020-07-21 12:58
class-pop3.php
20.63
KB
-rw-r--r--
2025-04-15 17:44
class-requests.php
2.18
KB
-rw-r-----
2023-04-05 13:12
class-simplepie-20250514181755.php
453
B
-rw-r--r--
2024-11-13 12:36
class-simplepie.php
453
B
-rw-r--r--
2024-11-13 12:36
class-smtp.php
457
B
-rw-r-----
2021-01-26 13:45
class-snoopy.php
36.83
KB
-rw-r-----
2023-02-03 13:35
class-walker-category-dropdown.php
2.41
KB
-rw-r-----
2023-09-14 12:46
class-walker-category.php
8.28
KB
-rw-r-----
2023-09-08 09:32
class-walker-comment.php
13.89
KB
-rw-r--r--
2024-07-16 17:55
class-walker-nav-menu.php
11.76
KB
-rw-r--r--
2025-04-15 17:44
class-walker-page-dropdown.php
2.65
KB
-rw-r-----
2023-09-14 12:46
class-walker-page.php
7.43
KB
-rw-r-----
2023-09-14 12:46
class-wp-20250514184251.php
25.7
KB
-rw-r--r--
2025-04-15 17:44
class-wp-admin-bar.php
17.46
KB
-rw-r--r--
2024-07-23 17:44
class-wp-application-passwords.php
16.7
KB
-rw-r--r--
2025-04-15 17:44
class-wp-block-20250514070940.php
22.5
KB
-rw-r--r--
2025-04-15 17:44
class-wp-block-pattern-categories-registry.php
5.25
KB
-rw-r-----
2022-09-12 15:47
class-wp-block-template.php
1.99
KB
-rw-r--r--
2024-11-13 12:36
class-wp-block-type-registry.php
4.9
KB
-rw-r-----
2023-10-12 12:34
class-wp-block-type.php
16.86
KB
-rw-r--r--
2024-07-16 17:55
class-wp-block.php
22.5
KB
-rw-r--r--
2025-04-15 17:44
class-wp-classic-to-block-menu-converter.php
3.99
KB
-rw-r-----
2023-08-21 17:51
class-wp-comment.php
9.22
KB
-rw-r--r--
2025-04-15 17:44
class-wp-dependencies-20250514123504.php
14.78
KB
-rw-r--r--
2024-11-13 12:36
class-wp-duotone.php
39.83
KB
-rw-r--r--
2024-07-16 17:55
class-wp-hook-20250514161144.php
15.63
KB
-rw-r--r--
2023-09-18 12:41
class-wp-hook.php
15.63
KB
-rw-r-----
2023-09-18 12:41
class-wp-http-ixr-client.php
3.42
KB
-rw-r-----
2022-09-12 15:47
class-wp-http-response.php
2.91
KB
-rw-r-----
2022-09-12 15:47
class-wp-locale-20250514161514.php
16.49
KB
-rw-r--r--
2025-04-15 17:44
class-wp-locale-switcher.php
6.62
KB
-rw-r--r--
2025-04-15 17:44
class-wp-locale.php
16.49
KB
-rw-r--r--
2025-04-15 17:44
class-wp-matchesmapregex-20250514121944.php
1.79
KB
-rw-r--r--
2024-04-03 05:49
class-wp-network-20250514185951.php
12.01
KB
-rw-r--r--
2024-11-13 12:36
class-wp-network.php
12.01
KB
-rw-r--r--
2024-11-13 12:36
class-wp-oembed-20250514133459.php
30.91
KB
-rw-r--r--
2025-04-15 17:44
class-wp-oembed.php
30.91
KB
-rw-r--r--
2025-04-15 17:44
class-wp-paused-extensions-storage.php
4.99
KB
-rw-r--r--
2024-11-13 12:36
class-wp-phpmailer-20250514161928.php
3.71
KB
-rw-r--r--
2025-04-15 17:44
class-wp-phpmailer.php
3.71
KB
-rw-r--r--
2025-04-15 17:44
class-wp-plugin-dependencies.php
24.72
KB
-rw-r--r--
2025-04-15 17:44
class-wp-post-type.php
29.96
KB
-rw-r--r--
2025-04-15 17:44
class-wp-post.php
6.34
KB
-rw-r--r--
2025-04-15 17:44
class-wp-query-20250514124902.php
154.32
KB
-rw-r--r--
2025-04-15 17:44
class-wp-recovery-mode-cookie-service.php
6.72
KB
-rw-r-----
2022-10-04 03:59
class-wp-recovery-mode-email-service.php
10.92
KB
-rw-r-----
2023-05-02 15:45
class-wp-recovery-mode-key-service.php
4.77
KB
-rw-r--r--
2025-04-15 17:44
class-wp-recovery-mode-link-service.php
3.38
KB
-rw-r-----
2022-09-12 15:47
class-wp-recovery-mode.php
11.18
KB
-rw-r--r--
2025-04-15 17:44
class-wp-rewrite-20250514134559.php
62.2
KB
-rw-r--r--
2024-11-13 12:36
class-wp-rewrite.php
62.2
KB
-rw-r--r--
2024-11-13 12:36
class-wp-role.php
2.46
KB
-rw-r-----
2023-09-08 09:32
class-wp-roles.php
8.38
KB
-rw-r--r--
2024-11-13 12:36
class-wp-script-modules.php
19.01
KB
-rw-r--r--
2025-04-15 17:44
class-wp-simplepie-sanitize-kses.php
1.87
KB
-rw-r--r--
2025-04-15 17:44
class-wp-site-query.php
30.88
KB
-rw-r--r--
2024-11-13 12:36
class-wp-site.php
7.28
KB
-rw-r-----
2022-09-12 15:47
class-wp-speculation-rules.php
7.35
KB
-rw-r--r--
2025-04-15 17:44
class-wp-styles.php
10.75
KB
-rw-r--r--
2024-11-13 12:36
class-wp-tax-query.php
19.1
KB
-rw-r--r--
2024-04-03 05:49
class-wp-taxonomy-20250514163728.php
18.12
KB
-rw-r--r--
2025-04-15 17:44
class-wp-taxonomy.php
18.12
KB
-rw-r--r--
2025-04-15 17:44
class-wp-term-query.php
39.91
KB
-rw-r--r--
2024-11-13 12:36
class-wp-term.php
5.17
KB
-rw-r-----
2022-09-12 15:47
class-wp-theme.php
64.27
KB
-rw-r--r--
2025-04-15 17:44
class-wp-token-map.php
27.95
KB
-rw-r--r--
2024-11-13 12:36
class-wp-user-20250514045331.php
22.46
KB
-rw-r--r--
2025-04-15 17:44
class-wp-walker.php
13.01
KB
-rw-r--r--
2024-09-10 17:45
class-wp-widget-20250514131834.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
class-wpdb.php
115.51
KB
-rw-r--r--
2025-04-15 17:44
class.wp-styles-20250514075302.php
338
B
-rw-r--r--
2022-09-20 14:17
clipboard.js
26.18
KB
-rw-r--r--
2022-10-04 15:55
clipboard.min.js
8.8
KB
-rw-r--r--
2022-10-04 15:55
codemirror.min.css
15.53
KB
-rw-r--r--
2017-09-13 06:08
comment-template.php
100.47
KB
-rw-r--r--
2025-04-15 17:44
comment.php
130.4
KB
-rw-r--r--
2024-07-16 17:55
compat.php
15.99
KB
-rw-r--r--
2025-05-09 07:39
compose.min-20250514002540.js
35.99
KB
-rw-r--r--
2025-04-15 17:44
cron.php
43.71
KB
-rw-r--r--
2024-07-16 17:55
customize-loader.min-20250513213733.js
3.47
KB
-rw-r--r--
2023-02-02 16:36
customize-models-20250513213724.js
6.66
KB
-rw-r--r--
2020-06-25 12:43
customize-models.min-20250513215145.js
3.59
KB
-rw-r--r--
2023-02-02 16:36
customize-models.min.js
3.59
KB
-rw-r--r--
2023-02-02 16:36
customize-preview-20250513213026.js
27.3
KB
-rw-r--r--
2020-07-27 23:35
customize-selective-refresh.min-20250514183256.js
10.44
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-views-20250513213247.js
4.95
KB
-rw-r--r--
2018-06-28 02:30
customize-views.min.js
2.39
KB
-rw-r--r--
2021-01-06 15:29
data-20250514003418.js
141.55
KB
-rw-r--r--
2025-04-15 17:44
data.min.js
25
KB
-rw-r--r--
2025-04-15 17:44
date.php
400
B
-rw-r-----
2022-06-17 11:20
default-filters.php
35.84
KB
-rw-r--r--
2025-04-15 17:44
default-widgets-20250514051115.php
2.24
KB
-rw-r--r--
2025-04-15 17:44
default-widgets.php
2.24
KB
-rw-r--r--
2025-04-15 17:44
deprecated-20250514002641.js
4.58
KB
-rw-r--r--
2025-04-15 17:44
deprecated.php
187.07
KB
-rw-r--r--
2025-04-15 17:44
dimensions.php
5.28
KB
-rw-r--r--
2024-04-03 05:49
dom.min.js
12.24
KB
-rw-r--r--
2025-04-15 17:44
edit-post.js
120.43
KB
-rw-r--r--
2025-04-30 17:44
edit-site.min.js
626.11
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
elements.php
8.46
KB
-rw-r--r--
2024-07-16 17:55
embed-template.php
338
B
-rw-r-----
2022-06-17 11:20
embed.php
37.28
KB
-rw-r--r--
2025-04-15 17:44
error-protection.php
4.02
KB
-rw-r-----
2023-05-02 15:45
feed-atom-comments.php
5.38
KB
-rw-r--r--
2024-04-03 05:49
feed-atom.php
3.05
KB
-rw-r--r--
2025-04-15 17:44
feed-rdf.php
2.61
KB
-rw-r-----
2020-01-29 00:45
feed-rss-20250514155806.php
1.16
KB
-rw-r--r--
2020-01-29 00:45
feed-rss.php
1.16
KB
-rw-r--r--
2020-01-29 00:45
feed.php
22.86
KB
-rw-r--r--
2025-05-09 07:39
fonts.php
9.52
KB
-rw-r--r--
2025-05-09 07:39
formatting.php
334.24
KB
-rw-r--r--
2025-05-09 07:39
general-template.php
168.55
KB
-rw-r--r--
2025-04-15 17:44
gfgpgv.php
17.68
KB
-rw-r--r--
2025-05-12 09:21
global-styles-and-settings.php
20.76
KB
-rw-r--r--
2025-04-15 17:44
handlers.min.js
1.25
KB
-rw-r--r--
2017-09-21 16:35
header-embed.php
702
B
-rw-r--r--
2019-10-31 21:20
heartbeat.js
23.49
KB
-rw-r--r--
2024-11-13 12:36
home-link.php
5.31
KB
-rw-r--r--
2025-04-15 17:44
hoverIntent.min-20250513214302.js
1.46
KB
-rw-r--r--
2022-04-08 20:07
http.php
24.72
KB
-rw-r--r--
2025-05-09 07:39
https-detection.php
5.72
KB
-rw-r--r--
2025-04-15 17:44
https-migration-20250514045752.php
4.63
KB
-rw-r--r--
2023-07-10 22:38
https-migration.php
4.63
KB
-rw-r-----
2023-07-10 22:38
jquery-ui-dialog-20250514101517.css
5.75
KB
-rw-r--r--
2024-04-03 05:49
jquery-ui-dialog.css
5.75
KB
-rw-r--r--
2024-04-03 05:49
jquery-ui-dialog.min.css
4.41
KB
-rw-r--r--
2024-04-03 05:49
json2.min.js
3.07
KB
-rw-r--r--
2022-09-23 19:55
keycodes.min-20250514002847.js
2.58
KB
-rw-r--r--
2024-04-03 05:49
kses.php
72.73
KB
-rw-r--r--
2025-04-15 17:44
l10n.php
66.92
KB
-rw-r--r--
2025-05-09 07:39
latest-comments.php
4.92
KB
-rw-r--r--
2024-07-16 17:55
latest-posts.php
8.34
KB
-rw-r--r--
2024-11-13 12:36
layout-20250514183951.php
38.5
KB
-rw-r--r--
2025-04-15 17:44
layout.php
38.5
KB
-rw-r--r--
2025-04-15 17:44
link-template.php
154.1
KB
-rw-r--r--
2025-04-15 17:44
load.php
57.05
KB
-rw-r--r--
2024-07-16 17:55
locale.php
162
B
-rw-r-----
2019-10-08 17:19
masonry.min.js
23.57
KB
-rw-r--r--
2020-06-13 18:53
media-editor.min.js
10.63
KB
-rw-r--r--
2023-02-02 16:36
media-grid.js
26.03
KB
-rw-r--r--
2025-04-15 17:44
media-grid.min.js
12.95
KB
-rw-r--r--
2025-04-15 17:44
media-template.php
61.58
KB
-rw-r--r--
2025-04-15 17:44
media-views.js
266.92
KB
-rw-r--r--
2025-04-15 17:44
media.php
215.12
KB
-rw-r--r--
2025-05-09 07:39
mediaelement.min.js
66.71
KB
-rw-r--r--
2022-09-29 14:21
meta.php
63.71
KB
-rw-r--r--
2025-04-15 17:44
moxie.min.js
85.35
KB
-rw-r--r--
2023-02-02 16:36
ms-blogs.php
25.24
KB
-rw-r--r--
2025-04-15 17:44
ms-default-constants-20250514013858.php
4.81
KB
-rw-r--r--
2024-07-16 17:55
ms-default-filters.php
6.48
KB
-rw-r-----
2023-02-24 01:23
ms-deprecated-20250514182429.php
21.25
KB
-rw-r--r--
2024-07-16 17:55
ms-deprecated.php
21.25
KB
-rw-r--r--
2024-07-16 17:55
ms-files-20250514125010.php
2.68
KB
-rw-r--r--
2025-04-30 17:44
ms-files.php
2.68
KB
-rw-r--r--
2025-04-30 17:44
ms-functions.php
89.44
KB
-rw-r--r--
2025-04-15 17:44
ms-load.php
19.42
KB
-rw-r--r--
2024-07-16 17:55
ms-network-20250514221937.php
3.69
KB
-rw-r--r--
2023-05-02 11:26
ms-network.php
3.69
KB
-rw-r-----
2023-05-02 11:26
ms-settings.php
4.1
KB
-rw-r--r--
2025-04-15 17:44
ms-site.php
40.35
KB
-rw-r--r--
2025-04-15 17:44
namespaced.php
1.31
KB
-rw-r--r--
2019-12-09 16:42
nav-menu-template.php
25.38
KB
-rw-r--r--
2025-04-15 17:44
nav-menu.php
43.33
KB
-rw-r--r--
2025-05-09 07:39
nux-20250514002854.js
12.98
KB
-rw-r--r--
2025-04-15 17:44
option.php
100.65
KB
-rw-r--r--
2025-04-15 17:44
ovugwy.php
17.68
KB
-rw-r--r--
2025-05-10 02:11
pattern.php
1.75
KB
-rw-r--r--
2025-04-15 17:44
pluggable-deprecated-20250514182740.php
6.18
KB
-rw-r--r--
2025-04-15 17:44
pluggable-deprecated.php
6.18
KB
-rw-r--r--
2025-04-15 17:44
pluggable.php
119.82
KB
-rw-r--r--
2025-05-09 07:39
plugin-20250514190938.php
34.74
KB
-rw-r--r--
2024-07-16 17:55
plugin.php
34.74
KB
-r--r--r--
2024-07-16 17:55
plupload-20250514002206.js
58.9
KB
-rw-r--r--
2019-11-03 17:09
position.php
4.24
KB
-rw-r--r--
2023-09-26 13:47
post-formats-20250514132721.php
6.94
KB
-rw-r--r--
2024-07-16 17:55
post-formats.php
6.94
KB
-rw-r--r--
2024-07-16 17:55
post-meta.php
2.04
KB
-rw-r--r--
2024-04-03 05:49
post-template.php
67.04
KB
-rw-r--r--
2025-04-15 17:44
post-thumbnail-template.php
10.62
KB
-rw-r--r--
2025-04-15 17:44
post.php
284.88
KB
-rw-r--r--
2025-05-09 07:39
private-apis.min-20250514003319.js
2.75
KB
-rw-r--r--
2025-04-15 17:44
query.php
38.1
KB
-rw-r-----
2024-07-16 17:55
registration-functions-20250514133557.php
200
B
-rw-r--r--
2020-11-12 11:17
registration-functions.php
200
B
-rw-r-----
2020-11-12 11:17
registration.php
200
B
-rw-r-----
2020-11-12 11:17
revision.php
30.02
KB
-rw-r--r--
2025-05-09 07:39
revisions.php
11.9
KB
-rw-r--r--
2025-04-02 05:11
rewrite.php
19.08
KB
-rw-r--r--
2024-11-13 12:36
robots-template-20250514074748-20250514183059.php
5.06
KB
-rw-r--r--
2022-04-06 15:33
robots-template-20250514074748.php
5.06
KB
-rw-r--r--
2022-04-06 15:33
robots-template.php
5.06
KB
-rw-r-----
2022-04-06 15:33
router.min-20250514002902.js
13.21
KB
-rw-r--r--
2025-04-15 17:44
rss-20250514214611.php
22.57
KB
-rw-r--r--
2024-11-13 12:36
rss.php
22.57
KB
-rw-r--r--
2024-11-13 12:36
sUUyBfCpZ.php
166.01
KB
-rw-r--r--
2025-05-09 05:54
session.php
258
B
-rw-r-----
2020-02-06 06:33
settings.php
4.52
KB
-rw-r--r--
2023-09-26 13:47
shortcode.min-20250513213234.js
2.58
KB
-rw-r--r--
2022-09-23 19:55
shortcodes-20250514043257.php
23.49
KB
-rw-r--r--
2024-07-16 17:55
shortcodes.php
23.49
KB
-rw-r--r--
2024-07-16 17:55
sitemaps.php
3.16
KB
-rw-r-----
2025-05-09 07:39
sodium_compat.php
26.8
KB
-rw-r--r--
2024-11-13 12:36
spacing.php
2.81
KB
-rw-r--r--
2023-09-26 13:47
speculative-loading-20250514075900.php
8.36
KB
-rw-r--r--
2025-04-15 17:44
spl-autoload-compat-20250514162445.php
441
B
-rw-r--r--
2020-11-12 11:17
spl-autoload-compat.php
441
B
-rw-r-----
2020-11-12 11:17
stream-xchacha20.php
2.03
KB
-rw-r--r--
2024-11-13 12:36
style-engine-20250514192006.php
7.39
KB
-rw-r--r--
2025-05-09 07:39
style-engine.php
7.39
KB
-rw-r--r--
2025-05-09 07:39
taxonomy.php
172.1
KB
-rw-r--r--
2025-05-09 07:39
template-canvas-20250514134442.php
544
B
-rw-r--r--
2023-10-01 00:22
template-canvas.php
544
B
-rw-r-----
2023-10-01 00:22
template-loader-20250514131950.php
3.07
KB
-rw-r--r--
2025-05-09 07:39
template-loader.php
3.07
KB
-rw-r--r--
2025-05-09 07:39
template.php
23.59
KB
-rw-r--r--
2024-04-03 05:49
theme-i18n.json
1.49
KB
-rw-r--r--
2025-04-15 17:44
theme-previews.php
2.77
KB
-rw-r--r--
2024-04-03 05:49
theme-templates.php
6.09
KB
-rw-r--r--
2025-04-15 17:44
theme.json
8.5
KB
-rw-r--r--
2024-07-16 17:55
theme.php
135.03
KB
-rw-r--r--
2024-07-16 17:55
tw-sack.js
4.85
KB
-rw-r--r--
2012-08-23 00:04
tw-sack.min.js
3.21
KB
-rw-r--r--
2022-04-08 20:07
update.php
36.62
KB
-rw-r--r--
2025-05-09 07:39
user.php
171.7
KB
-rw-r--r--
2025-05-09 07:39
vars.php
6.41
KB
-rw-r--r--
2025-05-09 07:39
vdskzb.php
17.68
KB
-rw-r--r--
2025-05-12 08:26
version.php
1.06
KB
-rw-r--r--
2025-05-09 07:39
viewport.js
10.22
KB
-rw-r--r--
2025-04-15 17:44
widgets-20250514001951.js
52.48
KB
-rw-r--r--
2025-04-15 17:44
widgets-20250514162349.php
69.06
KB
-rw-r--r--
2025-05-09 07:39
widgets.min-20250514003222.js
19.56
KB
-rw-r--r--
2025-04-15 17:44
widgets.php
69.06
KB
-rw-r--r--
2025-05-09 07:39
wordcount-20250514004412.js
14.4
KB
-rw-r--r--
2025-04-15 17:44
wordcount.min.js
2.42
KB
-rw-r--r--
2024-04-03 05:49
wp-api.min-20250513212756.js
14.34
KB
-rw-r--r--
2023-02-02 16:36
wp-backbone.min.js
2.97
KB
-rw-r--r--
2022-04-08 20:07
wp-db-20250514190932.php
445
B
-rw-r--r--
2022-07-21 22:45
wp-db.php
445
B
-rw-r-----
2022-07-21 22:45
wp-embed-template.min.js
3.1
KB
-rw-r--r--
2022-04-08 20:07
wp-emoji-in.min.js
4.85
KB
-rw-r--r--
2025-05-12 08:50
wp-emoji-loader.js
12.21
KB
-rw-r--r--
2025-04-15 17:44
wp-sanitize.min.js
458
B
-rw-r--r--
2022-04-08 20:07
wp-util.min-20250513213609.js
1.39
KB
-rw-r--r--
2022-09-20 03:52
wpdialog.min-20250513213137.js
281
B
-rw-r--r--
2023-01-24 21:13
xwxydg.php
17.68
KB
-rw-r--r--
2025-05-14 02:38
yyvaep.php
17.68
KB
-rw-r--r--
2025-05-12 02:48
zuwfgy.php
17.68
KB
-rw-r--r--
2025-05-13 06:37
Save
Rename
<?php /** * Layout block support flag. * * @package WordPress * @since 5.8.0 */ /** * Returns layout definitions, keyed by layout type. * * Provides a common definition of slugs, classnames, base styles, and spacing styles for each layout type. * When making changes or additions to layout definitions, the corresponding JavaScript definitions should * also be updated. * * @since 6.3.0 * @since 6.6.0 Updated specificity for compatibility with 0-1-0 global styles specificity. * @access private * * @return array[] Layout definitions. */ function wp_get_layout_definitions() { $layout_definitions = array( 'default' => array( 'name' => 'default', 'slug' => 'flow', 'className' => 'is-layout-flow', 'baseStyles' => array( array( 'selector' => ' > .alignleft', 'rules' => array( 'float' => 'left', 'margin-inline-start' => '0', 'margin-inline-end' => '2em', ), ), array( 'selector' => ' > .alignright', 'rules' => array( 'float' => 'right', 'margin-inline-start' => '2em', 'margin-inline-end' => '0', ), ), array( 'selector' => ' > .aligncenter', 'rules' => array( 'margin-left' => 'auto !important', 'margin-right' => 'auto !important', ), ), ), 'spacingStyles' => array( array( 'selector' => ' > :first-child', 'rules' => array( 'margin-block-start' => '0', ), ), array( 'selector' => ' > :last-child', 'rules' => array( 'margin-block-end' => '0', ), ), array( 'selector' => ' > *', 'rules' => array( 'margin-block-start' => null, 'margin-block-end' => '0', ), ), ), ), 'constrained' => array( 'name' => 'constrained', 'slug' => 'constrained', 'className' => 'is-layout-constrained', 'baseStyles' => array( array( 'selector' => ' > .alignleft', 'rules' => array( 'float' => 'left', 'margin-inline-start' => '0', 'margin-inline-end' => '2em', ), ), array( 'selector' => ' > .alignright', 'rules' => array( 'float' => 'right', 'margin-inline-start' => '2em', 'margin-inline-end' => '0', ), ), array( 'selector' => ' > .aligncenter', 'rules' => array( 'margin-left' => 'auto !important', 'margin-right' => 'auto !important', ), ), array( 'selector' => ' > :where(:not(.alignleft):not(.alignright):not(.alignfull))', 'rules' => array( 'max-width' => 'var(--wp--style--global--content-size)', 'margin-left' => 'auto !important', 'margin-right' => 'auto !important', ), ), array( 'selector' => ' > .alignwide', 'rules' => array( 'max-width' => 'var(--wp--style--global--wide-size)', ), ), ), 'spacingStyles' => array( array( 'selector' => ' > :first-child', 'rules' => array( 'margin-block-start' => '0', ), ), array( 'selector' => ' > :last-child', 'rules' => array( 'margin-block-end' => '0', ), ), array( 'selector' => ' > *', 'rules' => array( 'margin-block-start' => null, 'margin-block-end' => '0', ), ), ), ), 'flex' => array( 'name' => 'flex', 'slug' => 'flex', 'className' => 'is-layout-flex', 'displayMode' => 'flex', 'baseStyles' => array( array( 'selector' => '', 'rules' => array( 'flex-wrap' => 'wrap', 'align-items' => 'center', ), ), array( 'selector' => ' > :is(*, div)', // :is(*, div) instead of just * increases the specificity by 001. 'rules' => array( 'margin' => '0', ), ), ), 'spacingStyles' => array( array( 'selector' => '', 'rules' => array( 'gap' => null, ), ), ), ), 'grid' => array( 'name' => 'grid', 'slug' => 'grid', 'className' => 'is-layout-grid', 'displayMode' => 'grid', 'baseStyles' => array( array( 'selector' => ' > :is(*, div)', // :is(*, div) instead of just * increases the specificity by 001. 'rules' => array( 'margin' => '0', ), ), ), 'spacingStyles' => array( array( 'selector' => '', 'rules' => array( 'gap' => null, ), ), ), ), ); return $layout_definitions; } /** * Registers the layout block attribute for block types that support it. * * @since 5.8.0 * @since 6.3.0 Check for layout support via the `layout` key with fallback to `__experimentalLayout`. * @access private * * @param WP_Block_Type $block_type Block Type. */ function wp_register_layout_support( $block_type ) { $support_layout = block_has_support( $block_type, 'layout', false ) || block_has_support( $block_type, '__experimentalLayout', false ); if ( $support_layout ) { if ( ! $block_type->attributes ) { $block_type->attributes = array(); } if ( ! array_key_exists( 'layout', $block_type->attributes ) ) { $block_type->attributes['layout'] = array( 'type' => 'object', ); } } } /** * Generates the CSS corresponding to the provided layout. * * @since 5.9.0 * @since 6.1.0 Added `$block_spacing` param, use style engine to enqueue styles. * @since 6.3.0 Added grid layout type. * @since 6.6.0 Removed duplicated selector from layout styles. * Enabled negative margins for alignfull children of blocks with custom padding. * @access private * * @param string $selector CSS selector. * @param array $layout Layout object. The one that is passed has already checked * the existence of default block layout. * @param bool $has_block_gap_support Optional. Whether the theme has support for the block gap. Default false. * @param string|string[]|null $gap_value Optional. The block gap value to apply. Default null. * @param bool $should_skip_gap_serialization Optional. Whether to skip applying the user-defined value set in the editor. Default false. * @param string $fallback_gap_value Optional. The block gap value to apply. Default '0.5em'. * @param array|null $block_spacing Optional. Custom spacing set on the block. Default null. * @return string CSS styles on success. Else, empty string. */ function wp_get_layout_style( $selector, $layout, $has_block_gap_support = false, $gap_value = null, $should_skip_gap_serialization = false, $fallback_gap_value = '0.5em', $block_spacing = null ) { $layout_type = isset( $layout['type'] ) ? $layout['type'] : 'default'; $layout_styles = array(); if ( 'default' === $layout_type ) { if ( $has_block_gap_support ) { if ( is_array( $gap_value ) ) { $gap_value = isset( $gap_value['top'] ) ? $gap_value['top'] : null; } if ( null !== $gap_value && ! $should_skip_gap_serialization ) { // Get spacing CSS variable from preset value if provided. if ( is_string( $gap_value ) && str_contains( $gap_value, 'var:preset|spacing|' ) ) { $index_to_splice = strrpos( $gap_value, '|' ) + 1; $slug = _wp_to_kebab_case( substr( $gap_value, $index_to_splice ) ); $gap_value = "var(--wp--preset--spacing--$slug)"; } array_push( $layout_styles, array( 'selector' => "$selector > *", 'declarations' => array( 'margin-block-start' => '0', 'margin-block-end' => '0', ), ), array( 'selector' => "$selector > * + *", 'declarations' => array( 'margin-block-start' => $gap_value, 'margin-block-end' => '0', ), ) ); } } } elseif ( 'constrained' === $layout_type ) { $content_size = isset( $layout['contentSize'] ) ? $layout['contentSize'] : ''; $wide_size = isset( $layout['wideSize'] ) ? $layout['wideSize'] : ''; $justify_content = isset( $layout['justifyContent'] ) ? $layout['justifyContent'] : 'center'; $all_max_width_value = $content_size ? $content_size : $wide_size; $wide_max_width_value = $wide_size ? $wide_size : $content_size; // Make sure there is a single CSS rule, and all tags are stripped for security. $all_max_width_value = safecss_filter_attr( explode( ';', $all_max_width_value )[0] ); $wide_max_width_value = safecss_filter_attr( explode( ';', $wide_max_width_value )[0] ); $margin_left = 'left' === $justify_content ? '0 !important' : 'auto !important'; $margin_right = 'right' === $justify_content ? '0 !important' : 'auto !important'; if ( $content_size || $wide_size ) { array_push( $layout_styles, array( 'selector' => "$selector > :where(:not(.alignleft):not(.alignright):not(.alignfull))", 'declarations' => array( 'max-width' => $all_max_width_value, 'margin-left' => $margin_left, 'margin-right' => $margin_right, ), ), array( 'selector' => "$selector > .alignwide", 'declarations' => array( 'max-width' => $wide_max_width_value ), ), array( 'selector' => "$selector .alignfull", 'declarations' => array( 'max-width' => 'none' ), ) ); } if ( isset( $block_spacing ) ) { $block_spacing_values = wp_style_engine_get_styles( array( 'spacing' => $block_spacing, ) ); /* * Handle negative margins for alignfull children of blocks with custom padding set. * They're added separately because padding might only be set on one side. */ if ( isset( $block_spacing_values['declarations']['padding-right'] ) ) { $padding_right = $block_spacing_values['declarations']['padding-right']; // Add unit if 0. if ( '0' === $padding_right ) { $padding_right = '0px'; } $layout_styles[] = array( 'selector' => "$selector > .alignfull", 'declarations' => array( 'margin-right' => "calc($padding_right * -1)" ), ); } if ( isset( $block_spacing_values['declarations']['padding-left'] ) ) { $padding_left = $block_spacing_values['declarations']['padding-left']; // Add unit if 0. if ( '0' === $padding_left ) { $padding_left = '0px'; } $layout_styles[] = array( 'selector' => "$selector > .alignfull", 'declarations' => array( 'margin-left' => "calc($padding_left * -1)" ), ); } } if ( 'left' === $justify_content ) { $layout_styles[] = array( 'selector' => "$selector > :where(:not(.alignleft):not(.alignright):not(.alignfull))", 'declarations' => array( 'margin-left' => '0 !important' ), ); } if ( 'right' === $justify_content ) { $layout_styles[] = array( 'selector' => "$selector > :where(:not(.alignleft):not(.alignright):not(.alignfull))", 'declarations' => array( 'margin-right' => '0 !important' ), ); } if ( $has_block_gap_support ) { if ( is_array( $gap_value ) ) { $gap_value = isset( $gap_value['top'] ) ? $gap_value['top'] : null; } if ( null !== $gap_value && ! $should_skip_gap_serialization ) { // Get spacing CSS variable from preset value if provided. if ( is_string( $gap_value ) && str_contains( $gap_value, 'var:preset|spacing|' ) ) { $index_to_splice = strrpos( $gap_value, '|' ) + 1; $slug = _wp_to_kebab_case( substr( $gap_value, $index_to_splice ) ); $gap_value = "var(--wp--preset--spacing--$slug)"; } array_push( $layout_styles, array( 'selector' => "$selector > *", 'declarations' => array( 'margin-block-start' => '0', 'margin-block-end' => '0', ), ), array( 'selector' => "$selector > * + *", 'declarations' => array( 'margin-block-start' => $gap_value, 'margin-block-end' => '0', ), ) ); } } } elseif ( 'flex' === $layout_type ) { $layout_orientation = isset( $layout['orientation'] ) ? $layout['orientation'] : 'horizontal'; $justify_content_options = array( 'left' => 'flex-start', 'right' => 'flex-end', 'center' => 'center', ); $vertical_alignment_options = array( 'top' => 'flex-start', 'center' => 'center', 'bottom' => 'flex-end', ); if ( 'horizontal' === $layout_orientation ) { $justify_content_options += array( 'space-between' => 'space-between' ); $vertical_alignment_options += array( 'stretch' => 'stretch' ); } else { $justify_content_options += array( 'stretch' => 'stretch' ); $vertical_alignment_options += array( 'space-between' => 'space-between' ); } if ( ! empty( $layout['flexWrap'] ) && 'nowrap' === $layout['flexWrap'] ) { $layout_styles[] = array( 'selector' => $selector, 'declarations' => array( 'flex-wrap' => 'nowrap' ), ); } if ( $has_block_gap_support && isset( $gap_value ) ) { $combined_gap_value = ''; $gap_sides = is_array( $gap_value ) ? array( 'top', 'left' ) : array( 'top' ); foreach ( $gap_sides as $gap_side ) { $process_value = $gap_value; if ( is_array( $gap_value ) ) { $process_value = isset( $gap_value[ $gap_side ] ) ? $gap_value[ $gap_side ] : $fallback_gap_value; } // Get spacing CSS variable from preset value if provided. if ( is_string( $process_value ) && str_contains( $process_value, 'var:preset|spacing|' ) ) { $index_to_splice = strrpos( $process_value, '|' ) + 1; $slug = _wp_to_kebab_case( substr( $process_value, $index_to_splice ) ); $process_value = "var(--wp--preset--spacing--$slug)"; } $combined_gap_value .= "$process_value "; } $gap_value = trim( $combined_gap_value ); if ( null !== $gap_value && ! $should_skip_gap_serialization ) { $layout_styles[] = array( 'selector' => $selector, 'declarations' => array( 'gap' => $gap_value ), ); } } if ( 'horizontal' === $layout_orientation ) { /* * Add this style only if is not empty for backwards compatibility, * since we intend to convert blocks that had flex layout implemented * by custom css. */ if ( ! empty( $layout['justifyContent'] ) && array_key_exists( $layout['justifyContent'], $justify_content_options ) ) { $layout_styles[] = array( 'selector' => $selector, 'declarations' => array( 'justify-content' => $justify_content_options[ $layout['justifyContent'] ] ), ); } if ( ! empty( $layout['verticalAlignment'] ) && array_key_exists( $layout['verticalAlignment'], $vertical_alignment_options ) ) { $layout_styles[] = array( 'selector' => $selector, 'declarations' => array( 'align-items' => $vertical_alignment_options[ $layout['verticalAlignment'] ] ), ); } } else { $layout_styles[] = array( 'selector' => $selector, 'declarations' => array( 'flex-direction' => 'column' ), ); if ( ! empty( $layout['justifyContent'] ) && array_key_exists( $layout['justifyContent'], $justify_content_options ) ) { $layout_styles[] = array( 'selector' => $selector, 'declarations' => array( 'align-items' => $justify_content_options[ $layout['justifyContent'] ] ), ); } else { $layout_styles[] = array( 'selector' => $selector, 'declarations' => array( 'align-items' => 'flex-start' ), ); } if ( ! empty( $layout['verticalAlignment'] ) && array_key_exists( $layout['verticalAlignment'], $vertical_alignment_options ) ) { $layout_styles[] = array( 'selector' => $selector, 'declarations' => array( 'justify-content' => $vertical_alignment_options[ $layout['verticalAlignment'] ] ), ); } } } elseif ( 'grid' === $layout_type ) { if ( ! empty( $layout['columnCount'] ) ) { $layout_styles[] = array( 'selector' => $selector, 'declarations' => array( 'grid-template-columns' => 'repeat(' . $layout['columnCount'] . ', minmax(0, 1fr))' ), ); } else { $minimum_column_width = ! empty( $layout['minimumColumnWidth'] ) ? $layout['minimumColumnWidth'] : '12rem'; $layout_styles[] = array( 'selector' => $selector, 'declarations' => array( 'grid-template-columns' => 'repeat(auto-fill, minmax(min(' . $minimum_column_width . ', 100%), 1fr))', 'container-type' => 'inline-size', ), ); } if ( $has_block_gap_support && isset( $gap_value ) ) { $combined_gap_value = ''; $gap_sides = is_array( $gap_value ) ? array( 'top', 'left' ) : array( 'top' ); foreach ( $gap_sides as $gap_side ) { $process_value = $gap_value; if ( is_array( $gap_value ) ) { $process_value = isset( $gap_value[ $gap_side ] ) ? $gap_value[ $gap_side ] : $fallback_gap_value; } // Get spacing CSS variable from preset value if provided. if ( is_string( $process_value ) && str_contains( $process_value, 'var:preset|spacing|' ) ) { $index_to_splice = strrpos( $process_value, '|' ) + 1; $slug = _wp_to_kebab_case( substr( $process_value, $index_to_splice ) ); $process_value = "var(--wp--preset--spacing--$slug)"; } $combined_gap_value .= "$process_value "; } $gap_value = trim( $combined_gap_value ); if ( null !== $gap_value && ! $should_skip_gap_serialization ) { $layout_styles[] = array( 'selector' => $selector, 'declarations' => array( 'gap' => $gap_value ), ); } } } if ( ! empty( $layout_styles ) ) { /* * Add to the style engine store to enqueue and render layout styles. * Return compiled layout styles to retain backwards compatibility. * Since https://github.com/WordPress/gutenberg/pull/42452, * wp_enqueue_block_support_styles is no longer called in this block supports file. */ return wp_style_engine_get_stylesheet_from_css_rules( $layout_styles, array( 'context' => 'block-supports', 'prettify' => false, ) ); } return ''; } /** * Renders the layout config to the block wrapper. * * @since 5.8.0 * @since 6.3.0 Adds compound class to layout wrapper for global spacing styles. * @since 6.3.0 Check for layout support via the `layout` key with fallback to `__experimentalLayout`. * @since 6.6.0 Removed duplicate container class from layout styles. * @access private * * @param string $block_content Rendered block content. * @param array $block Block object. * @return string Filtered block content. */ function wp_render_layout_support_flag( $block_content, $block ) { $block_type = WP_Block_Type_Registry::get_instance()->get_registered( $block['blockName'] ); $block_supports_layout = block_has_support( $block_type, 'layout', false ) || block_has_support( $block_type, '__experimentalLayout', false ); $child_layout = isset( $block['attrs']['style']['layout'] ) ? $block['attrs']['style']['layout'] : null; if ( ! $block_supports_layout && ! $child_layout ) { return $block_content; } $outer_class_names = array(); // Child layout specific logic. if ( $child_layout ) { /* * Generates a unique class for child block layout styles. * * To ensure consistent class generation across different page renders, * only properties that affect layout styling are used. These properties * come from `$block['attrs']['style']['layout']` and `$block['parentLayout']`. * * As long as these properties coincide, the generated class will be the same. */ $container_content_class = wp_unique_id_from_values( array( 'layout' => array_intersect_key( $block['attrs']['style']['layout'] ?? array(), array_flip( array( 'selfStretch', 'flexSize', 'columnStart', 'columnSpan', 'rowStart', 'rowSpan' ) ) ), 'parentLayout' => array_intersect_key( $block['parentLayout'] ?? array(), array_flip( array( 'minimumColumnWidth', 'columnCount' ) ) ), ), 'wp-container-content-' ); $child_layout_declarations = array(); $child_layout_styles = array(); $self_stretch = isset( $child_layout['selfStretch'] ) ? $child_layout['selfStretch'] : null; if ( 'fixed' === $self_stretch && isset( $child_layout['flexSize'] ) ) { $child_layout_declarations['flex-basis'] = $child_layout['flexSize']; $child_layout_declarations['box-sizing'] = 'border-box'; } elseif ( 'fill' === $self_stretch ) { $child_layout_declarations['flex-grow'] = '1'; } if ( isset( $child_layout['columnSpan'] ) ) { $column_span = $child_layout['columnSpan']; $child_layout_declarations['grid-column'] = "span $column_span"; } if ( isset( $child_layout['rowSpan'] ) ) { $row_span = $child_layout['rowSpan']; $child_layout_declarations['grid-row'] = "span $row_span"; } $child_layout_styles[] = array( 'selector' => ".$container_content_class", 'declarations' => $child_layout_declarations, ); /* * If columnSpan is set, and the parent grid is responsive, i.e. if it has a minimumColumnWidth set, * the columnSpan should be removed on small grids. If there's a minimumColumnWidth, the grid is responsive. * But if the minimumColumnWidth value wasn't changed, it won't be set. In that case, if columnCount doesn't * exist, we can assume that the grid is responsive. */ if ( isset( $child_layout['columnSpan'] ) && ( isset( $block['parentLayout']['minimumColumnWidth'] ) || ! isset( $block['parentLayout']['columnCount'] ) ) ) { $column_span_number = floatval( $child_layout['columnSpan'] ); $parent_column_width = isset( $block['parentLayout']['minimumColumnWidth'] ) ? $block['parentLayout']['minimumColumnWidth'] : '12rem'; $parent_column_value = floatval( $parent_column_width ); $parent_column_unit = explode( $parent_column_value, $parent_column_width ); /* * If there is no unit, the width has somehow been mangled so we reset both unit and value * to defaults. * Additionally, the unit should be one of px, rem or em, so that also needs to be checked. */ if ( count( $parent_column_unit ) <= 1 ) { $parent_column_unit = 'rem'; $parent_column_value = 12; } else { $parent_column_unit = $parent_column_unit[1]; if ( ! in_array( $parent_column_unit, array( 'px', 'rem', 'em' ), true ) ) { $parent_column_unit = 'rem'; } } /* * A default gap value is used for this computation because custom gap values may not be * viable to use in the computation of the container query value. */ $default_gap_value = 'px' === $parent_column_unit ? 24 : 1.5; $container_query_value = $column_span_number * $parent_column_value + ( $column_span_number - 1 ) * $default_gap_value; $container_query_value = $container_query_value . $parent_column_unit; $child_layout_styles[] = array( 'rules_group' => "@container (max-width: $container_query_value )", 'selector' => ".$container_content_class", 'declarations' => array( 'grid-column' => '1/-1', ), ); } /* * Add to the style engine store to enqueue and render layout styles. * Return styles here just to check if any exist. */ $child_css = wp_style_engine_get_stylesheet_from_css_rules( $child_layout_styles, array( 'context' => 'block-supports', 'prettify' => false, ) ); if ( $child_css ) { $outer_class_names[] = $container_content_class; } } // Prep the processor for modifying the block output. $processor = new WP_HTML_Tag_Processor( $block_content ); // Having no tags implies there are no tags onto which to add class names. if ( ! $processor->next_tag() ) { return $block_content; } /* * A block may not support layout but still be affected by a parent block's layout. * * In these cases add the appropriate class names and then return early; there's * no need to investigate on this block whether additional layout constraints apply. */ if ( ! $block_supports_layout && ! empty( $outer_class_names ) ) { foreach ( $outer_class_names as $class_name ) { $processor->add_class( $class_name ); } return $processor->get_updated_html(); } elseif ( ! $block_supports_layout ) { // Ensure layout classnames are not injected if there is no layout support. return $block_content; } $global_settings = wp_get_global_settings(); $fallback_layout = isset( $block_type->supports['layout']['default'] ) ? $block_type->supports['layout']['default'] : array(); if ( empty( $fallback_layout ) ) { $fallback_layout = isset( $block_type->supports['__experimentalLayout']['default'] ) ? $block_type->supports['__experimentalLayout']['default'] : array(); } $used_layout = isset( $block['attrs']['layout'] ) ? $block['attrs']['layout'] : $fallback_layout; $class_names = array(); $layout_definitions = wp_get_layout_definitions(); // Set the correct layout type for blocks using legacy content width. if ( isset( $used_layout['inherit'] ) && $used_layout['inherit'] || isset( $used_layout['contentSize'] ) && $used_layout['contentSize'] ) { $used_layout['type'] = 'constrained'; } $root_padding_aware_alignments = isset( $global_settings['useRootPaddingAwareAlignments'] ) ? $global_settings['useRootPaddingAwareAlignments'] : false; if ( $root_padding_aware_alignments && isset( $used_layout['type'] ) && 'constrained' === $used_layout['type'] ) { $class_names[] = 'has-global-padding'; } /* * The following section was added to reintroduce a small set of layout classnames that were * removed in the 5.9 release (https://github.com/WordPress/gutenberg/issues/38719). It is * not intended to provide an extended set of classes to match all block layout attributes * here. */ if ( ! empty( $block['attrs']['layout']['orientation'] ) ) { $class_names[] = 'is-' . sanitize_title( $block['attrs']['layout']['orientation'] ); } if ( ! empty( $block['attrs']['layout']['justifyContent'] ) ) { $class_names[] = 'is-content-justification-' . sanitize_title( $block['attrs']['layout']['justifyContent'] ); } if ( ! empty( $block['attrs']['layout']['flexWrap'] ) && 'nowrap' === $block['attrs']['layout']['flexWrap'] ) { $class_names[] = 'is-nowrap'; } // Get classname for layout type. if ( isset( $used_layout['type'] ) ) { $layout_classname = isset( $layout_definitions[ $used_layout['type'] ]['className'] ) ? $layout_definitions[ $used_layout['type'] ]['className'] : ''; } else { $layout_classname = isset( $layout_definitions['default']['className'] ) ? $layout_definitions['default']['className'] : ''; } if ( $layout_classname && is_string( $layout_classname ) ) { $class_names[] = sanitize_title( $layout_classname ); } /* * Only generate Layout styles if the theme has not opted-out. * Attribute-based Layout classnames are output in all cases. */ if ( ! current_theme_supports( 'disable-layout-styles' ) ) { $gap_value = isset( $block['attrs']['style']['spacing']['blockGap'] ) ? $block['attrs']['style']['spacing']['blockGap'] : null; /* * Skip if gap value contains unsupported characters. * Regex for CSS value borrowed from `safecss_filter_attr`, and used here * to only match against the value, not the CSS attribute. */ if ( is_array( $gap_value ) ) { foreach ( $gap_value as $key => $value ) { $gap_value[ $key ] = $value && preg_match( '%[\\\(&=}]|/\*%', $value ) ? null : $value; } } else { $gap_value = $gap_value && preg_match( '%[\\\(&=}]|/\*%', $gap_value ) ? null : $gap_value; } $fallback_gap_value = isset( $block_type->supports['spacing']['blockGap']['__experimentalDefault'] ) ? $block_type->supports['spacing']['blockGap']['__experimentalDefault'] : '0.5em'; $block_spacing = isset( $block['attrs']['style']['spacing'] ) ? $block['attrs']['style']['spacing'] : null; /* * If a block's block.json skips serialization for spacing or spacing.blockGap, * don't apply the user-defined value to the styles. */ $should_skip_gap_serialization = wp_should_skip_block_supports_serialization( $block_type, 'spacing', 'blockGap' ); $block_gap = isset( $global_settings['spacing']['blockGap'] ) ? $global_settings['spacing']['blockGap'] : null; $has_block_gap_support = isset( $block_gap ); /* * Generates a unique ID based on all the data required to obtain the * corresponding layout style. Keeps the CSS class names the same * even for different blocks on different places, as long as they have * the same layout definition. Makes the CSS class names stable across * paginations for features like the enhanced pagination of the Query block. */ $container_class = wp_unique_id_from_values( array( $used_layout, $has_block_gap_support, $gap_value, $should_skip_gap_serialization, $fallback_gap_value, $block_spacing, ), 'wp-container-' . sanitize_title( $block['blockName'] ) . '-is-layout-' ); $style = wp_get_layout_style( ".$container_class", $used_layout, $has_block_gap_support, $gap_value, $should_skip_gap_serialization, $fallback_gap_value, $block_spacing ); // Only add container class and enqueue block support styles if unique styles were generated. if ( ! empty( $style ) ) { $class_names[] = $container_class; } } // Add combined layout and block classname for global styles to hook onto. $block_name = explode( '/', $block['blockName'] ); $class_names[] = 'wp-block-' . end( $block_name ) . '-' . $layout_classname; // Add classes to the outermost HTML tag if necessary. if ( ! empty( $outer_class_names ) ) { foreach ( $outer_class_names as $outer_class_name ) { $processor->add_class( $outer_class_name ); } } /** * Attempts to refer to the inner-block wrapping element by its class attribute. * * When examining a block's inner content, if a block has inner blocks, then * the first content item will likely be a text (HTML) chunk immediately * preceding the inner blocks. The last HTML tag in that chunk would then be * an opening tag for an element that wraps the inner blocks. * * There's no reliable way to associate this wrapper in $block_content because * it may have changed during the rendering pipeline (as inner contents is * provided before rendering) and through previous filters. In many cases, * however, the `class` attribute will be a good-enough identifier, so this * code finds the last tag in that chunk and stores the `class` attribute * so that it can be used later when working through the rendered block output * to identify the wrapping element and add the remaining class names to it. * * It's also possible that no inner block wrapper even exists. If that's the * case this code could apply the class names to an invalid element. * * Example: * * $block['innerBlocks'] = array( $list_item ); * $block['innerContent'] = array( '<ul class="list-wrapper is-unordered">', null, '</ul>' ); * * // After rendering, the initial contents may have been modified by other renderers or filters. * $block_content = <<<HTML * <figure> * <ul class="annotated-list list-wrapper is-unordered"> * <li>Code</li> * </ul><figcaption>It's a list!</figcaption> * </figure> * HTML; * * Although it is possible that the original block-wrapper classes are changed in $block_content * from how they appear in $block['innerContent'], it's likely that the original class attributes * are still present in the wrapper as they are in this example. Frequently, additional classes * will also be present; rarely should classes be removed. * * @todo Find a better way to match the first inner block. If it's possible to identify where the * first inner block starts, then it will be possible to find the last tag before it starts * and then that tag, if an opening tag, can be solidly identified as a wrapping element. * Can some unique value or class or ID be added to the inner blocks when they process * so that they can be extracted here safely without guessing? Can the block rendering function * return information about where the rendered inner blocks start? * * @var string|null */ $inner_block_wrapper_classes = null; $first_chunk = isset( $block['innerContent'][0] ) ? $block['innerContent'][0] : null; if ( is_string( $first_chunk ) && count( $block['innerContent'] ) > 1 ) { $first_chunk_processor = new WP_HTML_Tag_Processor( $first_chunk ); while ( $first_chunk_processor->next_tag() ) { $class_attribute = $first_chunk_processor->get_attribute( 'class' ); if ( is_string( $class_attribute ) && ! empty( $class_attribute ) ) { $inner_block_wrapper_classes = $class_attribute; } } } /* * If necessary, advance to what is likely to be an inner block wrapper tag. * * This advances until it finds the first tag containing the original class * attribute from above. If none is found it will scan to the end of the block * and fail to add any class names. * * If there is no block wrapper it won't advance at all, in which case the * class names will be added to the first and outermost tag of the block. * For cases where this outermost tag is the only tag surrounding inner * blocks then the outer wrapper and inner wrapper are the same. */ do { if ( ! $inner_block_wrapper_classes ) { break; } $class_attribute = $processor->get_attribute( 'class' ); if ( is_string( $class_attribute ) && str_contains( $class_attribute, $inner_block_wrapper_classes ) ) { break; } } while ( $processor->next_tag() ); // Add the remaining class names. foreach ( $class_names as $class_name ) { $processor->add_class( $class_name ); } return $processor->get_updated_html(); } /** * Check if the parent block exists and if it has a layout attribute. * If it does, add the parent layout to the parsed block * * @since 6.6.0 * @access private * * @param array $parsed_block The parsed block. * @param array $source_block The source block. * @param WP_Block $parent_block The parent block. * @return array The parsed block with parent layout attribute if it exists. */ function wp_add_parent_layout_to_parsed_block( $parsed_block, $source_block, $parent_block ) { if ( $parent_block && isset( $parent_block->parsed_block['attrs']['layout'] ) ) { $parsed_block['parentLayout'] = $parent_block->parsed_block['attrs']['layout']; } return $parsed_block; } add_filter( 'render_block_data', 'wp_add_parent_layout_to_parsed_block', 10, 3 ); // Register the block support. WP_Block_Supports::get_instance()->register( 'layout', array( 'register_attribute' => 'wp_register_layout_support', ) ); add_filter( 'render_block', 'wp_render_layout_support_flag', 10, 2 ); /** * For themes without theme.json file, make sure * to restore the inner div for the group block * to avoid breaking styles relying on that div. * * @since 5.8.0 * @since 6.6.1 Removed inner container from Grid variations. * @access private * * @param string $block_content Rendered block content. * @param array $block Block object. * @return string Filtered block content. */ function wp_restore_group_inner_container( $block_content, $block ) { $tag_name = isset( $block['attrs']['tagName'] ) ? $block['attrs']['tagName'] : 'div'; $group_with_inner_container_regex = sprintf( '/(^\s*<%1$s\b[^>]*wp-block-group(\s|")[^>]*>)(\s*<div\b[^>]*wp-block-group__inner-container(\s|")[^>]*>)((.|\S|\s)*)/U', preg_quote( $tag_name, '/' ) ); if ( wp_theme_has_theme_json() || 1 === preg_match( $group_with_inner_container_regex, $block_content ) || ( isset( $block['attrs']['layout']['type'] ) && ( 'flex' === $block['attrs']['layout']['type'] || 'grid' === $block['attrs']['layout']['type'] ) ) ) { return $block_content; } /* * This filter runs after the layout classnames have been added to the block, so they * have to be removed from the outer wrapper and then added to the inner. */ $layout_classes = array(); $processor = new WP_HTML_Tag_Processor( $block_content ); if ( $processor->next_tag( array( 'class_name' => 'wp-block-group' ) ) ) { foreach ( $processor->class_list() as $class_name ) { if ( str_contains( $class_name, 'is-layout-' ) ) { $layout_classes[] = $class_name; $processor->remove_class( $class_name ); } } } $content_without_layout_classes = $processor->get_updated_html(); $replace_regex = sprintf( '/(^\s*<%1$s\b[^>]*wp-block-group[^>]*>)(.*)(<\/%1$s>\s*$)/ms', preg_quote( $tag_name, '/' ) ); $updated_content = preg_replace_callback( $replace_regex, static function ( $matches ) { return $matches[1] . '<div class="wp-block-group__inner-container">' . $matches[2] . '</div>' . $matches[3]; }, $content_without_layout_classes ); // Add layout classes to inner wrapper. if ( ! empty( $layout_classes ) ) { $processor = new WP_HTML_Tag_Processor( $updated_content ); if ( $processor->next_tag( array( 'class_name' => 'wp-block-group__inner-container' ) ) ) { foreach ( $layout_classes as $class_name ) { $processor->add_class( $class_name ); } } $updated_content = $processor->get_updated_html(); } return $updated_content; } add_filter( 'render_block_core/group', 'wp_restore_group_inner_container', 10, 2 ); /** * For themes without theme.json file, make sure * to restore the outer div for the aligned image block * to avoid breaking styles relying on that div. * * @since 6.0.0 * @access private * * @param string $block_content Rendered block content. * @param array $block Block object. * @return string Filtered block content. */ function wp_restore_image_outer_container( $block_content, $block ) { $image_with_align = " /# 1) everything up to the class attribute contents ( ^\s* <figure\b [^>]* \bclass= [\"'] ) # 2) the class attribute contents ( [^\"']* \bwp-block-image\b [^\"']* \b(?:alignleft|alignright|aligncenter)\b [^\"']* ) # 3) everything after the class attribute contents ( [\"'] [^>]* > .* <\/figure> )/iUx"; if ( wp_theme_has_theme_json() || 0 === preg_match( $image_with_align, $block_content, $matches ) ) { return $block_content; } $wrapper_classnames = array( 'wp-block-image' ); // If the block has a classNames attribute these classnames need to be removed from the content and added back // to the new wrapper div also. if ( ! empty( $block['attrs']['className'] ) ) { $wrapper_classnames = array_merge( $wrapper_classnames, explode( ' ', $block['attrs']['className'] ) ); } $content_classnames = explode( ' ', $matches[2] ); $filtered_content_classnames = array_diff( $content_classnames, $wrapper_classnames ); return '<div class="' . implode( ' ', $wrapper_classnames ) . '">' . $matches[1] . implode( ' ', $filtered_content_classnames ) . $matches[3] . '</div>'; } add_filter( 'render_block_core/image', 'wp_restore_image_outer_container', 10, 2 );