Edit File by line
/home/zeestwma/redstone.../wp-inclu.../blocks
File: template-part.php
<?php
[0] Fix | Delete
/**
[1] Fix | Delete
* Server-side rendering of the `core/template-part` block.
[2] Fix | Delete
*
[3] Fix | Delete
* @package WordPress
[4] Fix | Delete
*/
[5] Fix | Delete
[6] Fix | Delete
/**
[7] Fix | Delete
* Renders the `core/template-part` block on the server.
[8] Fix | Delete
*
[9] Fix | Delete
* @since 5.9.0
[10] Fix | Delete
*
[11] Fix | Delete
* @global WP_Embed $wp_embed WordPress Embed object.
[12] Fix | Delete
*
[13] Fix | Delete
* @param array $attributes The block attributes.
[14] Fix | Delete
*
[15] Fix | Delete
* @return string The render.
[16] Fix | Delete
*/
[17] Fix | Delete
function render_block_core_template_part( $attributes ) {
[18] Fix | Delete
static $seen_ids = array();
[19] Fix | Delete
[20] Fix | Delete
$template_part_id = null;
[21] Fix | Delete
$content = null;
[22] Fix | Delete
$area = WP_TEMPLATE_PART_AREA_UNCATEGORIZED;
[23] Fix | Delete
$theme = isset( $attributes['theme'] ) ? $attributes['theme'] : get_stylesheet();
[24] Fix | Delete
[25] Fix | Delete
if ( isset( $attributes['slug'] ) && get_stylesheet() === $theme ) {
[26] Fix | Delete
$template_part_id = $theme . '//' . $attributes['slug'];
[27] Fix | Delete
$template_part_query = new WP_Query(
[28] Fix | Delete
array(
[29] Fix | Delete
'post_type' => 'wp_template_part',
[30] Fix | Delete
'post_status' => 'publish',
[31] Fix | Delete
'post_name__in' => array( $attributes['slug'] ),
[32] Fix | Delete
'tax_query' => array(
[33] Fix | Delete
array(
[34] Fix | Delete
'taxonomy' => 'wp_theme',
[35] Fix | Delete
'field' => 'name',
[36] Fix | Delete
'terms' => $theme,
[37] Fix | Delete
),
[38] Fix | Delete
),
[39] Fix | Delete
'posts_per_page' => 1,
[40] Fix | Delete
'no_found_rows' => true,
[41] Fix | Delete
'lazy_load_term_meta' => false, // Do not lazy load term meta, as template parts only have one term.
[42] Fix | Delete
)
[43] Fix | Delete
);
[44] Fix | Delete
$template_part_post = $template_part_query->have_posts() ? $template_part_query->next_post() : null;
[45] Fix | Delete
if ( $template_part_post ) {
[46] Fix | Delete
// A published post might already exist if this template part was customized elsewhere
[47] Fix | Delete
// or if it's part of a customized template.
[48] Fix | Delete
$block_template = _build_block_template_result_from_post( $template_part_post );
[49] Fix | Delete
$content = $block_template->content;
[50] Fix | Delete
if ( isset( $block_template->area ) ) {
[51] Fix | Delete
$area = $block_template->area;
[52] Fix | Delete
}
[53] Fix | Delete
/**
[54] Fix | Delete
* Fires when a block template part is loaded from a template post stored in the database.
[55] Fix | Delete
*
[56] Fix | Delete
* @since 5.9.0
[57] Fix | Delete
*
[58] Fix | Delete
* @param string $template_part_id The requested template part namespaced to the theme.
[59] Fix | Delete
* @param array $attributes The block attributes.
[60] Fix | Delete
* @param WP_Post $template_part_post The template part post object.
[61] Fix | Delete
* @param string $content The template part content.
[62] Fix | Delete
*/
[63] Fix | Delete
do_action( 'render_block_core_template_part_post', $template_part_id, $attributes, $template_part_post, $content );
[64] Fix | Delete
} else {
[65] Fix | Delete
$template_part_file_path = '';
[66] Fix | Delete
// Else, if the template part was provided by the active theme,
[67] Fix | Delete
// render the corresponding file content.
[68] Fix | Delete
if ( 0 === validate_file( $attributes['slug'] ) ) {
[69] Fix | Delete
$block_template = get_block_file_template( $template_part_id, 'wp_template_part' );
[70] Fix | Delete
[71] Fix | Delete
if ( isset( $block_template->content ) ) {
[72] Fix | Delete
$content = $block_template->content;
[73] Fix | Delete
}
[74] Fix | Delete
if ( isset( $block_template->area ) ) {
[75] Fix | Delete
$area = $block_template->area;
[76] Fix | Delete
}
[77] Fix | Delete
[78] Fix | Delete
// Needed for the `render_block_core_template_part_file` and `render_block_core_template_part_none` actions below.
[79] Fix | Delete
$block_template_file = _get_block_template_file( 'wp_template_part', $attributes['slug'] );
[80] Fix | Delete
if ( $block_template_file ) {
[81] Fix | Delete
$template_part_file_path = $block_template_file['path'];
[82] Fix | Delete
}
[83] Fix | Delete
}
[84] Fix | Delete
[85] Fix | Delete
if ( '' !== $content && null !== $content ) {
[86] Fix | Delete
/**
[87] Fix | Delete
* Fires when a block template part is loaded from a template part in the theme.
[88] Fix | Delete
*
[89] Fix | Delete
* @since 5.9.0
[90] Fix | Delete
*
[91] Fix | Delete
* @param string $template_part_id The requested template part namespaced to the theme.
[92] Fix | Delete
* @param array $attributes The block attributes.
[93] Fix | Delete
* @param string $template_part_file_path Absolute path to the template path.
[94] Fix | Delete
* @param string $content The template part content.
[95] Fix | Delete
*/
[96] Fix | Delete
do_action( 'render_block_core_template_part_file', $template_part_id, $attributes, $template_part_file_path, $content );
[97] Fix | Delete
} else {
[98] Fix | Delete
/**
[99] Fix | Delete
* Fires when a requested block template part does not exist in the database nor in the theme.
[100] Fix | Delete
*
[101] Fix | Delete
* @since 5.9.0
[102] Fix | Delete
*
[103] Fix | Delete
* @param string $template_part_id The requested template part namespaced to the theme.
[104] Fix | Delete
* @param array $attributes The block attributes.
[105] Fix | Delete
* @param string $template_part_file_path Absolute path to the not found template path.
[106] Fix | Delete
*/
[107] Fix | Delete
do_action( 'render_block_core_template_part_none', $template_part_id, $attributes, $template_part_file_path );
[108] Fix | Delete
}
[109] Fix | Delete
}
[110] Fix | Delete
}
[111] Fix | Delete
[112] Fix | Delete
// WP_DEBUG_DISPLAY must only be honored when WP_DEBUG. This precedent
[113] Fix | Delete
// is set in `wp_debug_mode()`.
[114] Fix | Delete
$is_debug = WP_DEBUG && WP_DEBUG_DISPLAY;
[115] Fix | Delete
[116] Fix | Delete
if ( is_null( $content ) ) {
[117] Fix | Delete
if ( $is_debug && isset( $attributes['slug'] ) ) {
[118] Fix | Delete
return sprintf(
[119] Fix | Delete
/* translators: %s: Template part slug. */
[120] Fix | Delete
__( 'Template part has been deleted or is unavailable: %s' ),
[121] Fix | Delete
$attributes['slug']
[122] Fix | Delete
);
[123] Fix | Delete
}
[124] Fix | Delete
[125] Fix | Delete
return '';
[126] Fix | Delete
}
[127] Fix | Delete
[128] Fix | Delete
if ( isset( $seen_ids[ $template_part_id ] ) ) {
[129] Fix | Delete
return $is_debug ?
[130] Fix | Delete
// translators: Visible only in the front end, this warning takes the place of a faulty block.
[131] Fix | Delete
__( '[block rendering halted]' ) :
[132] Fix | Delete
'';
[133] Fix | Delete
}
[134] Fix | Delete
[135] Fix | Delete
// Look up area definition.
[136] Fix | Delete
$area_definition = null;
[137] Fix | Delete
$defined_areas = get_allowed_block_template_part_areas();
[138] Fix | Delete
foreach ( $defined_areas as $defined_area ) {
[139] Fix | Delete
if ( $defined_area['area'] === $area ) {
[140] Fix | Delete
$area_definition = $defined_area;
[141] Fix | Delete
break;
[142] Fix | Delete
}
[143] Fix | Delete
}
[144] Fix | Delete
[145] Fix | Delete
// If $area is not allowed, set it back to the uncategorized default.
[146] Fix | Delete
if ( ! $area_definition ) {
[147] Fix | Delete
$area = WP_TEMPLATE_PART_AREA_UNCATEGORIZED;
[148] Fix | Delete
}
[149] Fix | Delete
[150] Fix | Delete
// Run through the actions that are typically taken on the_content.
[151] Fix | Delete
$content = shortcode_unautop( $content );
[152] Fix | Delete
$content = do_shortcode( $content );
[153] Fix | Delete
$seen_ids[ $template_part_id ] = true;
[154] Fix | Delete
$content = do_blocks( $content );
[155] Fix | Delete
unset( $seen_ids[ $template_part_id ] );
[156] Fix | Delete
$content = wptexturize( $content );
[157] Fix | Delete
$content = convert_smilies( $content );
[158] Fix | Delete
$content = wp_filter_content_tags( $content, "template_part_{$area}" );
[159] Fix | Delete
[160] Fix | Delete
// Handle embeds for block template parts.
[161] Fix | Delete
global $wp_embed;
[162] Fix | Delete
$content = $wp_embed->autoembed( $content );
[163] Fix | Delete
[164] Fix | Delete
if ( empty( $attributes['tagName'] ) || tag_escape( $attributes['tagName'] ) !== $attributes['tagName'] ) {
[165] Fix | Delete
$area_tag = 'div';
[166] Fix | Delete
if ( $area_definition && isset( $area_definition['area_tag'] ) ) {
[167] Fix | Delete
$area_tag = $area_definition['area_tag'];
[168] Fix | Delete
}
[169] Fix | Delete
$html_tag = $area_tag;
[170] Fix | Delete
} else {
[171] Fix | Delete
$html_tag = esc_attr( $attributes['tagName'] );
[172] Fix | Delete
}
[173] Fix | Delete
$wrapper_attributes = get_block_wrapper_attributes();
[174] Fix | Delete
[175] Fix | Delete
return "<$html_tag $wrapper_attributes>" . str_replace( ']]>', ']]&gt;', $content ) . "</$html_tag>";
[176] Fix | Delete
}
[177] Fix | Delete
[178] Fix | Delete
/**
[179] Fix | Delete
* Returns an array of area variation objects for the template part block.
[180] Fix | Delete
*
[181] Fix | Delete
* @since 6.1.0
[182] Fix | Delete
*
[183] Fix | Delete
* @param array $instance_variations The variations for instances.
[184] Fix | Delete
*
[185] Fix | Delete
* @return array Array containing the block variation objects.
[186] Fix | Delete
*/
[187] Fix | Delete
function build_template_part_block_area_variations( $instance_variations ) {
[188] Fix | Delete
$variations = array();
[189] Fix | Delete
$defined_areas = get_allowed_block_template_part_areas();
[190] Fix | Delete
[191] Fix | Delete
foreach ( $defined_areas as $area ) {
[192] Fix | Delete
if ( 'uncategorized' !== $area['area'] ) {
[193] Fix | Delete
$has_instance_for_area = false;
[194] Fix | Delete
foreach ( $instance_variations as $variation ) {
[195] Fix | Delete
if ( $variation['attributes']['area'] === $area['area'] ) {
[196] Fix | Delete
$has_instance_for_area = true;
[197] Fix | Delete
break;
[198] Fix | Delete
}
[199] Fix | Delete
}
[200] Fix | Delete
[201] Fix | Delete
$scope = $has_instance_for_area ? array() : array( 'inserter' );
[202] Fix | Delete
[203] Fix | Delete
$variations[] = array(
[204] Fix | Delete
'name' => 'area_' . $area['area'],
[205] Fix | Delete
'title' => $area['label'],
[206] Fix | Delete
'description' => $area['description'],
[207] Fix | Delete
'attributes' => array(
[208] Fix | Delete
'area' => $area['area'],
[209] Fix | Delete
),
[210] Fix | Delete
'scope' => $scope,
[211] Fix | Delete
'icon' => $area['icon'],
[212] Fix | Delete
);
[213] Fix | Delete
}
[214] Fix | Delete
}
[215] Fix | Delete
return $variations;
[216] Fix | Delete
}
[217] Fix | Delete
[218] Fix | Delete
/**
[219] Fix | Delete
* Returns an array of instance variation objects for the template part block
[220] Fix | Delete
*
[221] Fix | Delete
* @since 6.1.0
[222] Fix | Delete
*
[223] Fix | Delete
* @return array Array containing the block variation objects.
[224] Fix | Delete
*/
[225] Fix | Delete
function build_template_part_block_instance_variations() {
[226] Fix | Delete
// Block themes are unavailable during installation.
[227] Fix | Delete
if ( wp_installing() ) {
[228] Fix | Delete
return array();
[229] Fix | Delete
}
[230] Fix | Delete
[231] Fix | Delete
if ( ! current_theme_supports( 'block-templates' ) && ! current_theme_supports( 'block-template-parts' ) ) {
[232] Fix | Delete
return array();
[233] Fix | Delete
}
[234] Fix | Delete
[235] Fix | Delete
$variations = array();
[236] Fix | Delete
$template_parts = get_block_templates(
[237] Fix | Delete
array(
[238] Fix | Delete
'post_type' => 'wp_template_part',
[239] Fix | Delete
),
[240] Fix | Delete
'wp_template_part'
[241] Fix | Delete
);
[242] Fix | Delete
[243] Fix | Delete
$defined_areas = get_allowed_block_template_part_areas();
[244] Fix | Delete
$icon_by_area = array_combine( array_column( $defined_areas, 'area' ), array_column( $defined_areas, 'icon' ) );
[245] Fix | Delete
[246] Fix | Delete
foreach ( $template_parts as $template_part ) {
[247] Fix | Delete
$variations[] = array(
[248] Fix | Delete
'name' => 'instance_' . sanitize_title( $template_part->slug ),
[249] Fix | Delete
'title' => $template_part->title,
[250] Fix | Delete
// If there's no description for the template part don't show the
[251] Fix | Delete
// block description. This is a bit hacky, but prevent the fallback
[252] Fix | Delete
// by using a non-breaking space so that the value of description
[253] Fix | Delete
// isn't falsey.
[254] Fix | Delete
'description' => $template_part->description || '&nbsp;',
[255] Fix | Delete
'attributes' => array(
[256] Fix | Delete
'slug' => $template_part->slug,
[257] Fix | Delete
'theme' => $template_part->theme,
[258] Fix | Delete
'area' => $template_part->area,
[259] Fix | Delete
),
[260] Fix | Delete
'scope' => array( 'inserter' ),
[261] Fix | Delete
'icon' => isset( $icon_by_area[ $template_part->area ] ) ? $icon_by_area[ $template_part->area ] : null,
[262] Fix | Delete
'example' => array(
[263] Fix | Delete
'attributes' => array(
[264] Fix | Delete
'slug' => $template_part->slug,
[265] Fix | Delete
'theme' => $template_part->theme,
[266] Fix | Delete
'area' => $template_part->area,
[267] Fix | Delete
),
[268] Fix | Delete
),
[269] Fix | Delete
);
[270] Fix | Delete
}
[271] Fix | Delete
return $variations;
[272] Fix | Delete
}
[273] Fix | Delete
[274] Fix | Delete
/**
[275] Fix | Delete
* Returns an array of all template part block variations.
[276] Fix | Delete
*
[277] Fix | Delete
* @since 5.9.0
[278] Fix | Delete
*
[279] Fix | Delete
* @return array Array containing the block variation objects.
[280] Fix | Delete
*/
[281] Fix | Delete
function build_template_part_block_variations() {
[282] Fix | Delete
$instance_variations = build_template_part_block_instance_variations();
[283] Fix | Delete
$area_variations = build_template_part_block_area_variations( $instance_variations );
[284] Fix | Delete
return array_merge( $area_variations, $instance_variations );
[285] Fix | Delete
}
[286] Fix | Delete
[287] Fix | Delete
/**
[288] Fix | Delete
* Registers the `core/template-part` block on the server.
[289] Fix | Delete
*
[290] Fix | Delete
* @since 5.9.0
[291] Fix | Delete
*/
[292] Fix | Delete
function register_block_core_template_part() {
[293] Fix | Delete
register_block_type_from_metadata(
[294] Fix | Delete
__DIR__ . '/template-part',
[295] Fix | Delete
array(
[296] Fix | Delete
'render_callback' => 'render_block_core_template_part',
[297] Fix | Delete
'variation_callback' => 'build_template_part_block_variations',
[298] Fix | Delete
)
[299] Fix | Delete
);
[300] Fix | Delete
}
[301] Fix | Delete
add_action( 'init', 'register_block_core_template_part' );
[302] Fix | Delete
[303] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function