當(dāng)前位置:首頁(yè)>WordPress建站>WordPress開發(fā)>WordPress 6.5 新增的塊綁定 API 使用示例

WordPress 6.5 新增的塊綁定 API 使用示例

WordPress 6.5 引入了一種擴(kuò)展塊的新方法——塊綁定 APIBlock Bindings?API),該方法大大減少了在塊編輯器中集成不同類型數(shù)據(jù)所需的自定義代碼。

什么是塊綁定 API

假設(shè)給定一個(gè)核心塊,并且用它顯示來自特定源的數(shù)據(jù),例如,文章元數(shù)據(jù)或自定義PHP邏輯。如何實(shí)現(xiàn)呢?

顯示古騰堡編輯器中的標(biāo)題和段落的屏幕截圖,其中有一個(gè)大紅色箭頭指向該段落。 該段落寫道:“你如何用其他地方的數(shù)據(jù)替換這句話?”

這實(shí)際上是一個(gè)棘手的問題:在 WordPress 的早期版本中,您無(wú)法使用Gutenberg的核心塊來執(zhí)行此操作 – 相反,它需要?jiǎng)?chuàng)建一個(gè)具有特定邏輯的自定義塊來從相關(guān)源中讀取數(shù)據(jù)。但從 WordPress 6.5 開始已經(jīng)有實(shí)現(xiàn)的方式。

使用塊綁定 API,您現(xiàn)在可以綁定核心塊以從不同的源讀取,而無(wú)需編寫自定義塊樣板 – 這意味著可以綁定段落以從文章的元數(shù)據(jù)中讀取,或綁定標(biāo)題以從插件中讀取PHP 邏輯,所有這些都不需要處理React、塊注冊(cè)以及為您想要讀取的每個(gè)新源從頭開始編寫自定義塊的其他細(xì)節(jié)。

WordPress 6.5 中塊綁定 API 的初始版本是朝著簡(jiǎn)化擴(kuò)展編輯器和擴(kuò)展塊功能的過程邁出的一大步。在幕后,該 API 已經(jīng)支持了 WordPress 6.5 中附帶的一個(gè)展示功能:將核心塊連接文章元數(shù)據(jù)中的自定義字段。

使用相同的功能,作為高級(jí)用例,還可以定義塊并從自定義源讀取塊 – 下面簡(jiǎn)單說一下。

注意:有關(guān)創(chuàng)建和使用塊綁定的更詳細(xì)演練,請(qǐng)參閱WordPress 開發(fā)人員博客中的塊綁定簡(jiǎn)介教程

塊綁定如何工作?

概述

在了解塊綁定可以通過自定義源啟用的豐富功能之前,本節(jié)將首先回顧 API 的一般工作原理,然后詳細(xì)說明如何將核心塊綁定到文章元數(shù)據(jù)中的自定義字段。

下表列出了當(dāng)前可以綁定的兼容塊和屬性: 

支持的塊支持的屬性
圖像網(wǎng)址、ALT、標(biāo)題
段落內(nèi)容
標(biāo)題內(nèi)容
按鈕url、文本、鏈接目標(biāo)、rel

雖然目前兼容性列表還很短,但這已經(jīng)支持了廣泛的用例,并且計(jì)劃在未來支持其余核心塊以及自定義塊。

要使用塊綁定,您需要指定應(yīng)使用塊標(biāo)記從特定的注冊(cè)源讀取這些屬性;然后,當(dāng)在前端渲染時(shí),將執(zhí)行這些源的邏輯。

綁定后,相關(guān)屬性的編輯將被鎖定,并且編輯器中將出現(xiàn)指示器以表明綁定已創(chuàng)建。

古騰堡編輯器的截圖; 選擇一個(gè)段落,塊工具欄中有圖標(biāo),段落周圍有紫色輪廓,聲明該塊已綁定。

下面的示例,是如何通過內(nèi)置自定義字段支持來利用它。

自定義字段

重要的是,在塊綁定 API 的第一個(gè)版本中,還沒有用于將屬性綁定到自定義字段的UI。因此,有必要使用古騰堡中的代碼編輯器手動(dòng)添加標(biāo)記。

要將受支持的屬性綁定到文章元數(shù)據(jù)中的自定義字段,您可以使用如下標(biāo)記:

<!-- wp:paragraph {
	"metadata":{
		"bindings":{
			"content":{
				"source":"core/post-meta",
				"args":{
					"key":"book-genre"
				}
			}
		}
	}
} -->
<p></p>
<!-- /wp:paragraph -->

為了使其工作,您需要通過在主題functions.php或插件中包含如下代碼來確保該字段已注冊(cè)到文章元數(shù)據(jù)。

register_meta(
    'post',
    'book-genre',
    array(
        'show_in_rest' => true,
        'single'       => true,
        'type'         => 'string',
        'default'      => 'Default text field',
    )
);

*請(qǐng)注意,出于安全考慮,該show_in_rest屬性必須暫時(shí)設(shè)置為true,盡管后續(xù)可能會(huì)想辦法刪除此要求。

未來更多數(shù)據(jù)來源

對(duì)文章元數(shù)據(jù)的支持只是一個(gè)開始,計(jì)劃是為 WordPress 6.6 添加更多內(nèi)置數(shù)據(jù)來源,例如站點(diǎn)、用戶和分類數(shù)據(jù)。

即使這樣,塊綁定 API 已經(jīng)具有允許注冊(cè)自定義源的功能,這與內(nèi)部用于注冊(cè)上述源的core/post-meta功能相同。

注冊(cè)自定義源

概述

要注冊(cè)塊綁定源,需要使用具有以下簽名的函數(shù)register_block_bindings_source()

register_block_bindings_source(
	string $source_name,
	array $source_properties
);

有兩個(gè)可用參數(shù):

  • $source_name:自定義綁定源的唯一名稱,格式為namespace/slug. 命名空間是必需的。
  • $source_properties:用于定義綁定源的屬性數(shù)組:
    • label:表示綁定源的國(guó)際化文本字符串。注意:當(dāng)前未在 UI 中的任何位置顯示。
    • get_value_callback:當(dāng)塊的綁定屬性源與參數(shù)$source_name匹配時(shí)調(diào)用的 PHP 可調(diào)用對(duì)象(函數(shù)、閉包等)。
    • use_context:(?可選)如果回調(diào)需要,則使用上下文數(shù)組擴(kuò)展塊實(shí)例。例如,要使用當(dāng)前帖子 ID,應(yīng)將其設(shè)置為[ 'postId' ]

當(dāng) WordPress 在解析塊時(shí)遇到自定義綁定源時(shí),它將運(yùn)行該get_value_callback?函數(shù),其簽名應(yīng)如下所示:

projectslug_bindings_callback(
	array $source_args, 
	WP_Block $block_instance, 
	string $attribute_name
);

它最多可以接受三個(gè)參數(shù),但您不需要包含它們,除非您的邏輯需要它們:

  • $source_args:通過塊的 metadata.bindings.$attribute.args屬性傳遞的參數(shù)數(shù)組。
  • $block_instance:綁定作為WP_Block對(duì)象連接到的塊的當(dāng)前實(shí)例。
  • $attribute_name:通過塊上的 metadata.bindings.$attribute屬性鍵設(shè)置的當(dāng)前屬性。

使用注冊(cè)機(jī)制

在實(shí)踐中,您可以使用以下注冊(cè)函數(shù)來創(chuàng)建版權(quán)信息的簡(jiǎn)單綁定:

add_action( 'init', 'projectslug_register_block_bindings' );

function projectslug_register_block_bindings() {
	register_block_bindings_source( 'projectslug/copyright', array(
		'label'              => __( 'Copyright', 'projectslug' ),
		'get_value_callback' => 'projectslug_copyright_binding'
	) );
}

function projectslug_copyright_binding() {
	return '&copy; ' . date( 'Y' );
}

以下是如何將段落綁定到塊標(biāo)記中的版權(quán)源,以及它在前端的外觀:

<!-- wp:paragraph {
	"metadata":{
		"bindings":{
			"content":{
				"source":"projectslug/copyright"
			}
		}
	}
} -->
<p>Copyright Block</p>
<!-- /wp:paragraph -->
標(biāo)題為“塊綁定版權(quán)示例”的帖子的屏幕截圖; 內(nèi)容中有一個(gè)版權(quán)符號(hào)和2024年。

當(dāng)然,這是一個(gè)簡(jiǎn)單的示例,您可以利用回調(diào)簽名中的其他參數(shù)來創(chuàng)建更廣泛的邏輯。

其他API函數(shù)

此外,目前還有一些其他函數(shù)屬于公共 API:

  • unregister_block_bindings_source( $string source_name ) : 取消注冊(cè)源
  • get_all_registered_block_bindings_sources():獲取所有已注冊(cè)的源
  • get_block_bindings_source( $string source_name ) : 檢索已注冊(cè)的源

另請(qǐng)注意,雖然核心源在編輯器 UI 中使用共享 API,但請(qǐng)注意,這些編輯器 API 將暫時(shí)保持私有狀態(tài),同時(shí)繼續(xù)討論如何圍繞此功能標(biāo)準(zhǔn)化 UI 擴(kuò)展。

這意味著,如果您想實(shí)現(xiàn)一個(gè) UI 來輕松處理自定義字段,目前您需要自己創(chuàng)建該功能。

進(jìn)一步學(xué)習(xí)和后續(xù)步驟

有關(guān)如何在自己的項(xiàng)目中使用塊綁定的更多靈感,請(qǐng)參閱block-bindings.php中的注冊(cè)邏輯和內(nèi)置的core/post-meta源,并查看塊綁定簡(jiǎn)介教程系列。

塊綁定才剛剛開始,未來的計(jì)劃包括:

  • 添加直接從 UI編輯元字段值的可能性。
  • 添加 UI 以允許用戶通過編輯器添加綁定。
  • 創(chuàng)建新的內(nèi)置源:站點(diǎn)數(shù)據(jù)、發(fā)布數(shù)據(jù)和分類數(shù)據(jù)。
  • 添加對(duì)更多核心塊的支持。
  • 為開發(fā)人員添加擴(kuò)展編輯器 UI 的能力。

與往常一樣,我們非常歡迎提供反饋,我們邀請(qǐng)您在Github、或 WordPress?Slack上分享您的想法和用例,以幫助塑造 Block Bindings API 的開發(fā)。

聲明:本站所有文章,如無(wú)特殊說明或標(biāo)注,均為本站原創(chuàng)發(fā)布。任何個(gè)人或組織,在未征得本站同意時(shí),禁止復(fù)制、盜用、采集、發(fā)布本站內(nèi)容到任何網(wǎng)站、書籍等各類媒體平臺(tái)。如若本站內(nèi)容侵犯了原著者的合法權(quán)益,可聯(lián)系我們進(jìn)行處理。

給TA打賞
共{{data.count}}人
人已打賞
歡迎關(guān)注WordPress大學(xué)公眾號(hào) WPDAXUE
WordPress開發(fā)

如何將自定義支付網(wǎng)關(guān)與 WooCommerce Checkout 區(qū)塊集成

2024-2-22 12:52:25

WordPress開發(fā)

在 WordPress 中添加自定義功能/函數(shù)的四種方法

2024-3-9 21:28:30

0 條回復(fù) A文章作者 M管理員
    暫無(wú)討論,說說你的看法吧
?
個(gè)人中心
購(gòu)物車
優(yōu)惠劵
今日簽到
有新私信 私信列表
搜索

江津市| 安西县| 梁山县| 洛宁县| 理塘县| 临西县| 奇台县| 柯坪县| 若羌县| 库尔勒市| 额尔古纳市| 甘孜县| 凤翔县| 元江| 股票| 噶尔县| 酉阳| 富蕴县| 嵩明县| 望江县| 湖州市| 乌兰县| 汝城县| 永丰县| 故城县| 双牌县| 喀什市| 龙胜| 陆丰市| 视频| 通榆县| 无棣县| 临湘市| 和硕县| 彭州市| 武安市| 香河县| 奉新县| 临沭县| 大田县| 高唐县|