目錄
在WordPress區塊中使用外部API
保存設置屬性
在區塊設置UI中顯示值
首頁 web前端 css教學 在塊編輯器中保存自定義WordPress塊的設置

在塊編輯器中保存自定義WordPress塊的設置

Mar 09, 2025 pm 01:05 PM

Saving Settings for a Custom WordPress Block in the Block Editor

本系列教程已經完成了許多工作!我們創建了一個自定義WordPress區塊,它從外部API獲取數據並在前端渲染。然後,我們擴展了這項工作,使數據也能直接在WordPress區塊編輯器中渲染。之後,我們使用WordPress InspectorControls包中的組件創建了該區塊的設置UI。

最後一步是保存設置選項。如果我們回憶上一篇文章的內容,我們實際上能夠“保存”我們在區塊設置UI中的選擇,但是這些選擇實際上並沒有存儲在任何地方。如果我們進行一些選擇,保存它們,然後返回到帖子,設置將完全重置。

讓我們閉環並保存這些設置,以便在下一次編輯包含我們自定義區塊的帖子時,它們能夠持久保存!

在WordPress區塊中使用外部API

  • 前端渲染數據
  • 後端渲染數據
  • 創建自定義設置UI
  • 保存自定義區塊設置 (此處!)
  • 使用實時API數據 (即將推出)

保存設置屬性

我們正在使用一個提供足球隊排名的API,我們用它來獲取基於國家、聯賽和賽季的排名顯示。我們可以為每個屬性創建新的屬性,如下所示:

// index.js

attributes: {
  data: {
    type: "object",
  },
  settings: {
    type: "object",
    default: {
      country: {
        type: "string",
      },
      league: {
        type: "string",
      },
      season: {
        type: "string",
      },
    },
  },
},
登入後複製
登入後複製

接下來,我們需要從LeagueSettings.js設置屬性。每當我們的設置UI中的ComboboxControl更新時,我們需要使用setAttributes()方法設置屬性。當我們只使用一個數據端點時,這更直接。但是現在我們有多個輸入,它就稍微複雜一些。

這就是我將如何組織它。我將在LeagueSettings.js中創建一個新的對象,它遵循設置屬性及其值的結構。

// LeagueSettings.js

let localSettings = {
  country: attributes.settings.country,
  league: attributes.settings.league,
  season: attributes.settings.season,
};
登入後複製
登入後複製

我還將初始狀態變量從null更改為相應的設置變量。

// LeagueSettings.js

const [country, setCountry] = useState(attributes.settings.country);
const [league, setLeague] = useState(attributes.settings.league);
const [season, setSeason] = useState(attributes.settings.season);
登入後複製

在每個handle______Change()中,我將創建一個setLocalAttributes(),它帶有一個參數,該參數使用擴展運算符克隆並用新的國家、聯賽和賽季值覆蓋之前的localSettings對象。

// LeagueSettings.js

function handleCountryChange(value) {
  // 初始代码
  setLocalAttributes({ ...localSettings, country: value });
  // 代码的其余部分
}

function handleLeagueChange(value) {
  // 初始代码
  setLocalAttributes({ ...localSettings, league: value });
  // 代码的其余部分
}

function handleSeasonChange(value) {
  // 初始代码
  setLocalAttributes({ ...localSettings, season: value });
  // 代码的其余部分
}
登入後複製

我們可以這樣定義setLocalAttributes()

// LeagueSettings.js

function setLocalAttributes(value) {
  let newSettings = Object.assign(localSettings, value);
  localSettings = { ...newSettings };
  setAttributes({ settings: localSettings });
}
登入後複製

因此,我們使用Object.assign()來合併這兩個對象。然後我們可以將newSettings對象克隆回localSettings,因為我們還需要在每次進行新的選擇並發生更改時考慮每個設置屬性。

最後,我們可以像平時一樣使用setAttributes()來設置最終對象。您可以通過更新UI中的選擇來確認上述屬性是否正在更改。

另一個確認方法是在DevTools中執行console.log()來查找屬性。

仔細看看那個截圖。這些值存儲在attributes.settings中。由於useState()鉤子,每次我們在設置中進行更改時,React都會重新渲染,因此我們能夠看到它實時發生。

在區塊設置UI中顯示值

將設置值存儲在控件選項本身中並不是很有用,因為每個控件都依賴於其他設置值(例如,按聯賽的排名取決於選擇的賽季)。但在設置值是靜態的並且設置彼此獨立的情況下,它非常有用。

在不使當前設置複雜化的前提下,我們可以在設置面板內創建另一個部分來顯示當前屬性。您可以選擇自己的方式來顯示設置值,但我將從@wordpress/components包中導入一個Tip組件:

// index.js

attributes: {
  data: {
    type: "object",
  },
  settings: {
    type: "object",
    default: {
      country: {
        type: "string",
      },
      league: {
        type: "string",
      },
      season: {
        type: "string",
      },
    },
  },
},
登入後複製
登入後複製

在這裡,我將對值進行條件檢查,然後再在Tip組件中顯示它們:

// LeagueSettings.js

let localSettings = {
  country: attributes.settings.country,
  league: attributes.settings.league,
  season: attributes.settings.season,
};
登入後複製
登入後複製

這就是它在區塊編輯器中的工作方式:

當可以顯示實時數據而無需每次都手動更新它們時,API數據更強大。我們將在本系列的下一部分中探討這一點。

以上是在塊編輯器中保存自定義WordPress塊的設置的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1670
14
CakePHP 教程
1428
52
Laravel 教程
1329
25
PHP教程
1273
29
C# 教程
1256
24
靜態表單提供商的比較 靜態表單提供商的比較 Apr 16, 2025 am 11:20 AM

讓我們嘗試在這裡造成一個術語:“靜態表單提供商”。你帶上html

使Sass更快的概念證明 使Sass更快的概念證明 Apr 16, 2025 am 10:38 AM

在一個新項目開始時,Sass彙編發生在眼睛的眨眼中。感覺很棒,尤其是當它與browsersync配對時,它重新加載

每周平台新聞:HTML加載屬性,主要的ARIA規格以及從iframe轉移到Shadow dom 每周平台新聞:HTML加載屬性,主要的ARIA規格以及從iframe轉移到Shadow dom Apr 17, 2025 am 10:55 AM

在本週的平台新聞綜述中,Chrome引入了一個用於加載的新屬性,Web開發人員的可訪問性規範以及BBC Move

帶有HTML對話框元素的一些動手 帶有HTML對話框元素的一些動手 Apr 16, 2025 am 11:33 AM

這是我第一次查看HTML元素。我已經意識到了一段時間,但是尚未將其旋轉。它很酷,

紙張形式 紙張形式 Apr 16, 2025 am 11:24 AM

購買或建造是技術的經典辯論。自己構建東西可能會感覺更便宜,因為您的信用卡賬單上沒有訂單項,但是

'訂閱播客”鏈接應在哪裡? '訂閱播客”鏈接應在哪裡? Apr 16, 2025 pm 12:04 PM

有一段時間,iTunes是播客中的大狗,因此,如果您將“訂閱播客”鏈接到喜歡:

託管您自己的非JavaScript分析的選項 託管您自己的非JavaScript分析的選項 Apr 15, 2025 am 11:09 AM

有很多分析平台可幫助您跟踪網站上的訪問者和使用數據。也許最著名的是Google Analytics(廣泛使用)

See all articles