get_the_block_template_html()WP 5.8.0

Получает HTML-разметку текущего блочного шаблона.

Читайте про блочные темы (FSE).

Функция берет содержимое текущего блочного шаблона, обрабатывает в нем шорткоды и блоки через do_blocks(), затем применяет стандартные фильтры форматирования и оборачивает результат в контейнер <div class="wp-site-blocks">...</div>.

Функция помечена как приватная для ядра WP. Ее не стоит использовать в темах и плагинах как часть публичного API, потому что поведение может измениться.

Она используется в файле wp-includes/template-loader.php.

Если подходящий шаблон не найден, авторизованный пользователь получает HTML-сообщение об ошибке, а обычный посетитель — пустую строку.

Внутренняя функция — эта функция рассчитана на использование самим ядром. Не рекомендуется использовать эту функцию в своем коде.

Работает на основе: do_blocks(), do_shortcode(), _block_template_add_skip_link()

Хуков нет.

Возвращает

Строку.

  • строку — HTML-разметку текущего блочного шаблона.
  • строку — HTML-сообщение <h1>No matching template found</h1>, если контент шаблона не найден и текущий посетитель авторизован.
  • '' (пустая строка) — если контент шаблона не найден и текущий посетитель не авторизован.

Использование

get_the_block_template_html();

Примеры

0

#1 Получение HTML текущего блочного шаблона

Функция получает готовую HTML-разметку шаблона. Так как функция приватная, пример подходит только для понимания ее работы.

$template_html = get_the_block_template_html();

if ( $template_html ) {
	echo $template_html;
}

Заметки

  • Global. Строка. $_wp_current_template_id
  • Global. Строка. $_wp_current_template_content
  • Global. WP_Embed. $wp_embed WordPress Embed object.
  • Global. WP_Query. $wp_query WordPress Query object.

Список изменений

С версии 5.8.0 Введена.

Код get_the_block_template_html() WP 7.0

function get_the_block_template_html() {
	global $_wp_current_template_id, $_wp_current_template_content, $wp_embed, $wp_query;

	if ( ! $_wp_current_template_content ) {
		if ( is_user_logged_in() ) {
			return '<h1>' . esc_html__( 'No matching template found' ) . '</h1>';
		}
		return '';
	}

	$content = $wp_embed->run_shortcode( $_wp_current_template_content );
	$content = $wp_embed->autoembed( $content );
	$content = shortcode_unautop( $content );
	$content = do_shortcode( $content );

	/*
	 * Most block themes omit the `core/query` and `core/post-template` blocks in their singular content templates.
	 * While this technically still works since singular content templates are always for only one post, it results in
	 * the main query loop never being entered which causes bugs in core and the plugin ecosystem.
	 *
	 * The workaround below ensures that the loop is started even for those singular templates. The while loop will by
	 * definition only go through a single iteration, i.e. `do_blocks()` is only called once. Additional safeguard
	 * checks are included to ensure the main query loop has not been tampered with and really only encompasses a
	 * single post.
	 *
	 * Even if the block template contained a `core/query` and `core/post-template` block referencing the main query
	 * loop, it would not cause errors since it would use a cloned instance and go through the same loop of a single
	 * post, within the actual main query loop.
	 *
	 * This special logic should be skipped if the current template does not come from the current theme, in which case
	 * it has been injected by a plugin by hijacking the block template loader mechanism. In that case, entirely custom
	 * logic may be applied which is unpredictable and therefore safer to omit this special handling on.
	 */
	if (
		$_wp_current_template_id &&
		str_starts_with( $_wp_current_template_id, get_stylesheet() . '//' ) &&
		is_singular() &&
		1 === $wp_query->post_count &&
		have_posts()
	) {
		while ( have_posts() ) {
			the_post();
			$content = do_blocks( $content );
		}
	} else {
		$content = do_blocks( $content );
	}

	$content = wptexturize( $content );
	$content = convert_smilies( $content );
	$content = wp_filter_content_tags( $content, 'template' );
	$content = str_replace( ']]>', ']]&gt;', $content );

	// Wrap block template in .wp-site-blocks to allow for specific descendant styles
	// (e.g. `.wp-site-blocks > *`).
	$template_html = '<div class="wp-site-blocks">' . $content . '</div>';

	// Back-compat for plugins that disable functionality by unhooking one of these actions.
	if (
		! has_action( 'wp_footer', 'the_block_template_skip_link' ) ||
		! has_action( 'wp_enqueue_scripts', 'wp_enqueue_block_template_skip_link' )
	) {
		return $template_html;
	}

	return _block_template_add_skip_link( $template_html );
}