EmDash 保留了熟悉的內容概念,如文章、頁面、分類法、選單、媒體和修訂。Astro 提供佈景主題層:路由、佈局、元件和伺服器渲染。
保持熟悉的部分
編輯器仍然使用具名內容類型、結構化欄位、草稿和已發布狀態、階層式分類、扁平標籤、巢狀選單、媒體和修訂歷史。這些概念被遷移到 EmDash 集合和管理介面中。
開發工作流程發生了變化。PHP 範本選擇變為明確的 Astro 路由,範本部件變為匯入的元件,程式碼與資料庫內容分開部署。建置公開網站不需要 React;.astro 元件將伺服器端 TypeScript 與類 HTML 範本結合在一起。
概念對應
| WordPress | EmDash 和 Astro |
|---|---|
| Post Type | EmDash 集合 |
| Post Meta | 集合欄位 |
| 分類或標籤 | EmDash 分類法 |
WP_Query | getEmDashCollection() |
get_post() | getEmDashEntry() |
the_content() | <PortableText /> |
| 範本層級 | src/pages/ 中的檔案 |
| 範本部件 | 匯入的 .astro 元件 |
header.php 和 footer.php | Astro 佈局 |
wp_nav_menu() | getMenu() |
| 側邊欄 | 小工具區域和 <WidgetArea /> |
| Options API | 網站設定,或外掛的 ctx.kv |
| WordPress 外掛 | 沙盒或原生 EmDash 外掛 |
內容模型
在 EmDash 管理後台的內容類型下建立和編輯集合。集合有明確的型別化欄位,可以啟用草稿、修訂、排程發布、搜尋、SEO 或留言。
查詢返回 Astro 即時集合項目。entry.id 是路由識別碼,通常是 slug;entry.data.id 是資料庫內容 ID。
以下封存按發布順序查詢文章:
---
import { getEmDashCollection } from "emdash";
const { entries: posts, error } = await getEmDashCollection("posts", {
orderBy: { published_at: "desc" },
limit: 10,
});
if (error) return new Response("無法載入文章", { status: 500 });
---
{posts.map((post) => (
<article>
<h2><a href={`/posts/${post.id}`}>{post.data.title}</a></h2>
{post.data.excerpt && <p>{post.data.excerpt}</p>}
</article>
))}
佈景主題檔案
Astro 路由取代了 WordPress 範本層級。範本選擇自己的 URL 結構,而不是依賴魔術檔名。
| WordPress 檔案 | 目前部落格範本檔案 |
|---|---|
front-page.php 或 home.php | src/pages/index.astro |
single.php | src/pages/posts/[slug].astro |
archive.php | src/pages/posts/index.astro |
page.php | src/pages/pages/[slug].astro |
category.php | src/pages/category/[slug].astro |
tag.php | src/pages/tag/[slug].astro |
search.php | src/pages/search.astro |
404.php | src/pages/404.astro |
header.php 和 footer.php | src/layouts/Base.astro |
有關 EmDash 範本使用的專案結構、元件語法、Props、插槽、佈局、路由和伺服器渲染查詢流程,請閱讀面向 WordPress 開發者的 Astro。
選單和小工具區域
選單和小工具區域存在於資料庫中,設定後仍可編輯。範本在請求時查詢它們:
---
import { getMenu } from "emdash";
import { WidgetArea } from "emdash/ui";
const primary = await getMenu("primary");
---
<nav>
{primary?.items.map((item) => <a href={item.url}>{item.label}</a>)}
</nav>
<aside><WidgetArea name="sidebar" /></aside>
網站設定和分類法
自訂器風格的網站身分位於 EmDash 設定中。取得一次設定,並在存在時使用解析後的標誌 URL:
---
import { getSiteSettings } from "emdash";
const settings = await getSiteSettings();
---
<a href="/">
{settings.logo?.url
? <img src={settings.logo.url} alt={settings.logo.alt || settings.title} />
: settings.title}
</a>
分類法術語是獨立記錄,而非直接儲存在 entry.data 中的值。解析一個術語,然後在集合篩選器中使用其 slug:
import { getEmDashCollection, getTerm } from "emdash";
const news = await getTerm("category", "news", { includeCounts: false });
const { entries: posts } = news
? await getEmDashCollection("posts", { where: { category: news.slug } })
: { entries: [] };
外掛格式
EmDash 有兩種外掛格式:
- 沙盒外掛使用
emdash-plugin.jsonc作為其身分和信任合約,加上使用SandboxedPlugin型別的預設匯出src/plugin.ts物件。它可以在隔離的執行時中執行,並使用 Block Kit 建構管理 UI。 - 原生外掛匯出建置時的描述符工廠和使用
definePlugin()建構的執行時createPlugin()函式。用於 React 管理元件、公開 Astro 元件或頁面片段。
從選擇外掛格式開始。掛鉤名稱和 PluginContext API 是共用的,但套件和處理常式的形式不可互換。
匯入 WordPress 內容
在管理側邊欄中開啟 WordPress 匯入,或直接造訪 /_emdash/admin/import/wordpress。EmDash 支援兩種匯入路徑:
- 上傳從 工具 → 匯出 匯出的 WordPress eXtended RSS(WXR)檔案。
- 在 WordPress 網站上安裝 EmDash Exporter 外掛,並使用 WordPress 應用程式密碼連線。此路徑可以包含一般公開 REST API 不公開的內容。
不使用匯出器輸入 WordPress URL 可以偵測網站並統計公開文章、頁面和媒體。該 REST 探測不匯入內容。
匯入器將 WordPress 的 publish 對應到 EmDash 的 published。草稿、待審、私密、排程、資源回收筒和未知狀態變為草稿。在變更 DNS 或停用 WordPress 之前,請檢查匯入的權限和發布狀態。
完整步驟和重試行為請參見從 WordPress 遷移。
編輯器工作流程
EmDash 管理後台提供集合清單、Portable Text 編輯器、媒體管理、選單編輯、分類法管理、修訂和預覽連結。它不是 wp-admin 的視覺副本:Gutenberg 區塊變為 Portable Text,可用的介面取決於為網站設定的集合和功能。