EmDash behält vertraute Inhaltskonzepte wie Beiträge, Seiten, Taxonomien, Menüs, Medien und Revisionen bei. Astro liefert die Theme-Schicht: Routen, Layouts, Komponenten und Server-Rendering.
Was vertraut bleibt
Redakteure arbeiten weiterhin mit benannten Inhaltstypen, strukturierten Feldern, Entwurfs- und Veröffentlichungsstatus, hierarchischen Kategorien, flachen Tags, verschachtelten Menüs, Medien und Revisionshistorie. Diese Konzepte werden in EmDash-Sammlungen und Verwaltungsbildschirme überführt.
Der Entwicklungsworkflow ändert sich. Die PHP-Template-Auswahl wird zu expliziten Astro-Routen, Template Parts werden zu importierten Komponenten, und Code wird getrennt vom Datenbankinhalt deployt. Sie benötigen kein React, um die öffentliche Website zu erstellen; .astro-Komponenten kombinieren serverseitiges TypeScript mit HTML-ähnlichen Templates.
Konzeptzuordnung
| WordPress | EmDash und Astro |
|---|---|
| Post Type | EmDash-Sammlung |
| Post Meta | Sammlungsfeld |
| Kategorie oder Tag | EmDash-Taxonomie |
WP_Query | getEmDashCollection() |
get_post() | getEmDashEntry() |
the_content() | <PortableText /> |
| Template-Hierarchie | Dateien in src/pages/ |
| Template Part | Importierte .astro-Komponente |
header.php und footer.php | Astro-Layout |
wp_nav_menu() | getMenu() |
| Sidebar | Widget-Bereich und <WidgetArea /> |
| Options API | Site-Einstellungen oder ctx.kv eines Plugins |
| WordPress-Plugin | Sandboxed oder natives EmDash-Plugin |
Inhaltsmodell
Erstellen und bearbeiten Sie Sammlungen unter Inhaltstypen in der EmDash-Verwaltung. Eine Sammlung hat explizit typisierte Felder und kann Entwürfe, Revisionen, Zeitplanung, Suche, SEO oder Kommentare aktivieren.
Abfragen geben Astro-Live-Collection-Einträge zurück. entry.id ist der Routen-Bezeichner und ist normalerweise der Slug; entry.data.id ist die Datenbank-Inhalts-ID.
Das folgende Archiv fragt Beiträge in Veröffentlichungsreihenfolge ab:
---
import { getEmDashCollection } from "emdash";
const { entries: posts, error } = await getEmDashCollection("posts", {
orderBy: { published_at: "desc" },
limit: 10,
});
if (error) return new Response("Beiträge konnten nicht geladen werden", { 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>
))}
Theme-Dateien
Astro-Routen ersetzen die WordPress-Template-Hierarchie. Ein Template wählt seine eigene URL-Struktur, anstatt sich auf magische Dateinamen zu verlassen.
| WordPress-Datei | Aktuelle Blog-Template-Datei |
|---|---|
front-page.php oder 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 und footer.php | src/layouts/Base.astro |
Lesen Sie Astro für WordPress-Entwickler für die Projektstruktur, Komponentensyntax, Props, Slots, Layouts, Routing und den servergerenderten Abfrageablauf, die von EmDash-Templates verwendet werden.
Menüs und Widget-Bereiche
Menüs und Widget-Bereiche leben in der Datenbank und bleiben nach der Einrichtung bearbeitbar. Templates fragen sie zur Anforderungszeit ab:
---
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>
Site-Einstellungen und Taxonomien
Customizer-ähnliche Website-Identität lebt in den EmDash-Einstellungen. Rufen Sie die Einstellungen einmal ab und verwenden Sie die aufgelöste Logo-URL, wenn eine vorhanden ist:
---
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>
Taxonomie-Begriffe sind separate Datensätze und keine direkt in entry.data gespeicherten Werte. Lösen Sie einen Begriff auf und verwenden Sie dann seinen Slug in einem Sammlungsfilter:
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: [] };
Plugin-Formate
EmDash hat zwei Plugin-Formate:
- Ein Sandboxed Plugin verwendet
emdash-plugin.jsoncfür seine Identität und seinen Vertrauensvertrag, plus ein standardmäßig exportiertessrc/plugin.ts-Objekt vom TypSandboxedPlugin. Es kann in einer isolierten Runtime laufen und Block Kit für die Admin-UI verwenden. - Ein natives Plugin exportiert eine Build-Time-Deskriptor-Factory und eine Runtime-
createPlugin()-Funktion, erstellt mitdefinePlugin(). Verwenden Sie dieses Format für React-Admin-Komponenten, öffentliche Astro-Komponenten oder Seitenfragmente.
Beginnen Sie mit Ein Plugin-Format wählen. Die Hook-Namen und PluginContext-APIs sind gemeinsam, aber die Paket- und Handler-Formen sind nicht austauschbar.
WordPress-Inhalte importieren
Öffnen Sie WordPress importieren in der Admin-Seitenleiste oder besuchen Sie direkt /_emdash/admin/import/wordpress. EmDash unterstützt zwei Importpfade:
- Laden Sie eine WordPress eXtended RSS (WXR)-Datei hoch, die über Werkzeuge → Exportieren exportiert wurde.
- Installieren Sie das EmDash Exporter Plugin auf der WordPress-Site und verbinden Sie es mit einem WordPress-Anwendungspasswort. Dieser Pfad kann Inhalte einschließen, die eine normale öffentliche REST-API nicht bereitstellt.
Die Eingabe einer WordPress-URL ohne den Exporter kann die Site erkennen und öffentliche Beiträge, Seiten und Medien zählen. Diese REST-Abfrage importiert keine Inhalte.
Der Importer ordnet WordPress publish dem EmDash-Status published zu. Entwurf, ausstehend, privat, geplant, Papierkorb und unbekannte Status werden zu Entwürfen. Überprüfen Sie importierte Berechtigungen und den Veröffentlichungsstatus, bevor Sie DNS ändern oder WordPress stilllegen.
Folgen Sie Von WordPress migrieren für das vollständige Verfahren und das Wiederholungsverhalten.
Redaktioneller Workflow
Die EmDash-Verwaltung bietet Sammlungslisten, einen Portable-Text-Editor, Medienverwaltung, Menübearbeitung, Taxonomieverwaltung, Revisionen und Vorschau-Links. Es ist keine visuelle Kopie von wp-admin: Gutenberg-Blöcke werden zu Portable Text, und die verfügbaren Bildschirme hängen von den für die Site konfigurierten Sammlungen und Funktionen ab.