Zum Inhalt springen

EmDash für WordPress-Entwickler

EmDash überführt vertraute WordPress-Konzepte wie Beiträge, Seiten, Taxonomien, Menüs, Widgets und Mediathek in einen modernen Astro-Stack. Die redaktionelle Logik bleibt dabei gut wiedererkennbar.

Wenn Sie Plattformen vor einer Migration vergleichen, lesen Sie EmDash vs WordPress und WordPress zu Astro mit EmDash.

Die Konzepte, die Sie von WordPress kennen, sind erstklassige Funktionen in EmDash:

  • Collections funktionieren wie benutzerdefinierte Inhaltstypen: Sie definieren die Struktur und fragen sie anschließend in Templates ab
  • Taxonomien funktionieren auf die gleiche Weise – hierarchisch (wie Kategorien) und flach (wie Tags)
  • Menüs mit Drag-and-Drop-Sortierung und verschachtelten Elementen
  • Widget-Bereiche für Sidebars und dynamische Inhaltsbereiche
  • Mediathek mit Upload, Organisation und Bildverwaltung
  • Admin-Oberfläche, die Redakteure nutzen können, ohne Code zu berühren

Die Implementierung ändert sich, aber das mentale Modell bleibt gleich:

TypeScript statt PHP

Templates sind Astro-Komponenten. Die Syntax ist sauberer, aber das Konzept ist dasselbe: Server-Code, der HTML ausgibt.

Content-APIs statt WP_Query

Abfragefunktionen wie getEmDashCollection() ersetzen WP_Query. Kein SQL, nur Funktionsaufrufe.

Dateibasiertes Routing

Dateien in src/pages/ werden zu URLs. Keine Rewrite-Regeln oder Template-Hierarchie zum Auswendiglernen.

Komponenten statt Template-Parts

Importieren und verwenden Sie Komponenten. Gleiche Idee wie get_template_part(), bessere Organisation.

WordPressEmDashAnmerkungen
Custom Post TypesCollectionsÜber Admin-UI oder API definieren
WP_QuerygetEmDashCollection()Filter, Limits, Taxonomie-Abfragen
get_post()getEmDashEntry()Gibt Eintrag oder null zurück
Categories/TagsTaxonomiesHierarchische Unterstützung erhalten
register_nav_menus()getMenu()Erstklassige Menüunterstützung
register_sidebar()getWidgetArea()Erstklassige Widget-Bereiche
bloginfo('name')getSiteSetting("title")Site-Settings-API
the_content()<PortableText />Strukturierte Inhaltsdarstellung
ShortcodesPortable Text blocksBenutzerdefinierte Komponenten
add_action/filter()Plugin hookscontent:beforeSave, etc.
wp_optionsctx.kvKey-Value-Speicher
Theme directorysrc/ directoryKomponenten, Layouts, Seiten
functions.phpastro.config.mjs + EmDash configBuild- und Laufzeitkonfiguration

WordPress-Abfragen verwenden WP_Query oder Hilfsfunktionen. EmDash verwendet typisierte Abfragefunktionen.

archive.php
<?php
$posts = new WP_Query([
'post_type' => 'post',
'posts_per_page' => 10,
'post_status' => 'publish',
'category_name' => 'news',
]);
while ($posts->have_posts()) :
$posts->the_post();
?>
<h2><?php the_title(); ?></h2>
<?php the_excerpt(); ?>
<?php endwhile; ?>
single.php
<?php
$post = get_post($id);
?>
<article>
<h1><?php echo $post->post_title; ?></h1>
<?php echo apply_filters('the_content', $post->post_content); ?>
</article>

WordPress verwendet eine Template-Hierarchie, um auszuwählen, welche Datei eine Seite rendert. Astro verwendet explizites, dateibasiertes Routing.

WordPress-TemplateEmDash-Äquivalent
index.phpsrc/pages/index.astro
single.phpsrc/pages/posts/[slug].astro
single-{type}.phpsrc/pages/{type}/[slug].astro
page.phpsrc/pages/pages/[slug].astro
archive.phpsrc/pages/posts/index.astro
archive-{type}.phpsrc/pages/{type}/index.astro
category.phpsrc/pages/categories/[slug].astro
tag.phpsrc/pages/tags/[slug].astro
search.phpsrc/pages/search.astro
404.phpsrc/pages/404.astro
header.php / footer.phpsrc/layouts/Base.astro
sidebar.phpsrc/components/Sidebar.astro

WordPress Template Parts werden zu Astro-Komponenten:

functions.php / template
// In template:
get_template_part('template-parts/content', 'post');
// template-parts/content-post.php:
<article class="post">
<h2><?php the_title(); ?></h2>
<?php the_excerpt(); ?>
</article>

EmDash bietet erstklassige Menüunterstützung mit automatischer URL-Auflösung:

header.php
<?php
wp_nav_menu([
'theme_location' => 'primary',
'container' => 'nav',
]);
?>

Menüs werden über die Admin-Oberfläche, Seed-Dateien oder WordPress-Import erstellt.

Widget-Bereiche funktionieren wie Sidebars in WordPress:

sidebar.php
<?php if (is_active_sidebar('sidebar-1')) : ?>
<aside>
<?php dynamic_sidebar('sidebar-1'); ?>
</aside>
<?php endif; ?>

Website-Optionen und Customizer-Einstellungen werden auf getSiteSetting() abgebildet:

WordPressEmDash
bloginfo('name')getSiteSetting("title")
bloginfo('description')getSiteSetting("tagline")
get_custom_logo()getSiteSetting("logo")
get_option('date_format')getSiteSetting("dateFormat")
home_url()Astro.site
import { getSiteSetting } from "emdash";
const title = await getSiteSetting("title");
const logo = await getSiteSetting("logo"); // Gibt { mediaId, alt, url } zurück

Taxonomien funktionieren konzeptionell gleich – hierarchisch (wie Kategorien) oder flach (wie Tags):

import { getTaxonomyTerms, getEntryTerms, getTerm } from "emdash";
// Alle Kategorien abrufen
const categories = await getTaxonomyTerms("categories");
// Einen bestimmten Begriff abrufen
const news = await getTerm("categories", "news");
// Begriffe für einen Beitrag abrufen
const postCategories = await getEntryTerms("posts", postId, "categories");

WordPress-Hooks (add_action, add_filter) werden zu EmDash-Plugin-Hooks:

WordPress HookEmDash HookZweck
save_postcontent:beforeSaveInhalt vor dem Speichern ändern
the_contentPortableText componentsGerenderten Inhalt transformieren
pre_get_postsQuery optionsAbfragen filtern
wp_headLayout <head>Head-Inhalt hinzufügen
wp_footerLayout before </body>Footer-Inhalt hinzufügen

Typsicherheit

Durchgängig TypeScript. Sammlungen, Abfragen und Komponenten sind vollständig typisiert. Kein Raten mehr bei Feldnamen oder Rückgabetypen.

Leistung

Kein PHP-Overhead. Standardmäßig statische Generierung. Server-Rendering bei Bedarf. Bereit für Edge-Deployment.

Moderne DX

Hot Module Replacement. Komponentenbasierte Architektur. Moderne Tools (Vite, TypeScript, ESLint).

Git-basierte Deployments

Code und Templates in Git. Inhalt in der Datenbank. Kein FTP, keine Dateiberechtigungen, keine gehackten Websites.

EmDash generiert sichere Vorschau-URLs mit HMAC-signierten Tokens. Inhaltseditoren können Entwürfe ohne Anmeldung in der Produktion vorschauen – einen Link teilen, keine Zugangsdaten.

WordPress-Plugin-Konflikte verschwinden. EmDash-Plugins laufen in isolierten Kontexten mit expliziten APIs. Keine globale Zustandsverschmutzung.

Inhaltseditoren verwenden das EmDash-Admin-Oberfläche, ähnlich wie wp-admin:

  • Dashboard mit aktuellen Aktivitäten
  • Sammlungslisten mit Suche, Filter und Massenaktionen
  • Rich-Editor für Inhalte (Portable Text, nicht Gutenberg)
  • Medienbibliothek mit Drag-and-Drop-Upload
  • Menü-Builder mit Drag-and-Drop-Sortierung
  • Widget-Bereich-Editor für Sidebar-Inhalte

Die Bearbeitungserfahrung ist vertraut. Die darunterliegende Technologie ist modern.

EmDash importiert WordPress-Inhalte direkt:

  1. Von WordPress exportieren (Werkzeuge → Exportieren)
  2. Die .xml-Datei im EmDash-Admin hochladen
  3. Beitragstypen auf Sammlungen abbilden
  4. Inhalte und Medien importieren

Beiträge, Seiten, Taxonomien, Menüs und Medien werden übertragen. Gutenberg-Blöcke werden in Portable Text konvertiert. Benutzerdefinierte Felder werden analysiert und abgebildet.

Siehe die WordPress-Migrationsanleitung für vollständige Anweisungen.