has_block

函式
has_block ( $block_name, $post = null )
引數
  • (string) $block_name Full block type to look for.
    Required:
  • (int|string|WP_Post|null) $post Optional. Post content, post ID, or post object. Defaults to global $post.
    Required:
    Default: null
返回值
  • (bool) Whether the post content contains the specified block.
相關
  • parse_blocks()
定義位置
相關方法
has_blocksparse_blocksdo_blocks_flatten_blocksserialize_block
引入
5.0.0
棄用
-

has_block: 這個函式用於檢查一個文章或頁面的內容中是否存在特定的塊: 該函式將塊的型別作為一個引數,如果該塊存在,則返回一個布林值為true,否則為false。

確定$post或一個字串是否包含一個特定的塊型別。

這個測試對效能進行了優化,而不是嚴格的準確性,它檢測了塊型別是否存在,但沒有驗證其結構,也沒有檢查可重用的塊。對於嚴格的準確性,你應該在文章內容上使用塊分析器。

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;
}

常見問題

FAQs
檢視更多 >