函数文档

get_allowed_block_types()

💡 云策文档标注

概述

get_allowed_block_types() 函数用于获取在块编辑器中允许使用的块类型列表。它接受一个 WP_Block_Editor_Context 参数,并返回一个布尔值或字符串数组来控制块类型的启用状态。

关键要点

  • 函数返回类型为 bool|string[],布尔值 true 表示启用所有已注册块类型,false 表示禁用所有,数组则指定允许的块类型 slug。
  • 参数 $block_editor_context 是必需的,提供当前块编辑器的上下文信息。
  • 使用 'allowed_block_types_all' 过滤器(自 5.8.0 起)来全局过滤允许的块类型。
  • 对于旧版本兼容,如果上下文包含 post 数据,会应用已弃用的 'allowed_block_types' 过滤器(自 5.0.0 引入,5.8.0 弃用)。
  • 该函数被 get_block_editor_settings() 调用,用于配置块编辑器设置。

代码示例

function get_allowed_block_types( $block_editor_context ) {
    $allowed_block_types = true;
    $allowed_block_types = apply_filters( 'allowed_block_types_all', $allowed_block_types, $block_editor_context );
    if ( ! empty( $block_editor_context->post ) ) {
        $post = $block_editor_context->post;
        $allowed_block_types = apply_filters_deprecated( 'allowed_block_types', array( $allowed_block_types, $post ), '5.8.0', 'allowed_block_types_all' );
    }
    return $allowed_block_types;
}

注意事项

  • 自 WordPress 5.8.0 版本引入此函数,取代了旧有的过滤机制。
  • 开发者在自定义块类型限制时,应优先使用 'allowed_block_types_all' 过滤器以确保兼容性。
  • 注意处理返回值的类型,以正确配置块编辑器的可用块。

📄 原文内容

Gets the list of allowed block types to use in the block editor.

Parameters

$block_editor_contextWP_Block_Editor_Contextrequired
The current block editor context.

Return

bool|string[] Array of block type slugs, or boolean to enable/disable all.

Source

function get_allowed_block_types( $block_editor_context ) {
	$allowed_block_types = true;

	/**
	 * Filters the allowed block types for all editor types.
	 *
	 * @since 5.8.0
	 *
	 * @param bool|string[]           $allowed_block_types  Array of block type slugs, or boolean to enable/disable all.
	 *                                                      Default true (all registered block types supported).
	 * @param WP_Block_Editor_Context $block_editor_context The current block editor context.
	 */
	$allowed_block_types = apply_filters( 'allowed_block_types_all', $allowed_block_types, $block_editor_context );

	if ( ! empty( $block_editor_context->post ) ) {
		$post = $block_editor_context->post;

		/**
		 * Filters the allowed block types for the editor.
		 *
		 * @since 5.0.0
		 * @deprecated 5.8.0 Use the 'allowed_block_types_all' filter instead.
		 *
		 * @param bool|string[] $allowed_block_types Array of block type slugs, or boolean to enable/disable all.
		 *                                           Default true (all registered block types supported)
		 * @param WP_Post       $post                The post resource data.
		 */
		$allowed_block_types = apply_filters_deprecated( 'allowed_block_types', array( $allowed_block_types, $post ), '5.8.0', 'allowed_block_types_all' );
	}

	return $allowed_block_types;
}

Hooks

apply_filters_deprecated( ‘allowed_block_types’, bool|string[] $allowed_block_types, WP_Post $post )

Filters the allowed block types for the editor.

apply_filters( ‘allowed_block_types_all’, bool|string[] $allowed_block_types, WP_Block_Editor_Context $block_editor_context )

Filters the allowed block types for all editor types.

Changelog

Version Description
5.8.0 Introduced.