Ir al contenido

EmDash para Desarrolladores de WordPress

EmDash traslada conceptos familiares de WordPress, como entradas, páginas, taxonomías, menús, widgets y biblioteca multimedia, a una pila moderna basada en Astro. La lógica editorial sigue siendo reconocible.

Si estás comparando plataformas antes de migrar, lee EmDash vs WordPress y WordPress a Astro con EmDash.

Los conceptos que conoces de WordPress son características de primera clase en EmDash:

  • Colecciones funcionan como tipos de contenido personalizados: defines la estructura y luego la consultas desde tus plantillas
  • Taxonomías funcionan de la misma manera—jerárquicas (como categorías) y planas (como etiquetas)
  • Menús con ordenamiento por arrastrar y soltar y elementos anidados
  • Áreas de Widgets para barras laterales y regiones de contenido dinámico
  • Biblioteca de medios con carga, organización y gestión de imágenes
  • Interfaz de administración que los editores pueden usar sin tocar código

La implementación cambia, pero el modelo mental sigue siendo el mismo:

TypeScript en lugar de PHP

Las plantillas son componentes de Astro. La sintaxis es más limpia, pero el concepto es el mismo: código del servidor que genera HTML.

APIs de contenido en lugar de WP_Query

Las funciones de consulta como getEmDashCollection() reemplazan a WP_Query. Sin SQL, solo llamadas a funciones.

Enrutamiento basado en archivos

Los archivos en src/pages/ se convierten en URLs. Sin reglas de reescritura o jerarquía de plantillas que memorizar.

Componentes en lugar de partes de plantilla

Importa y usa componentes. La misma idea que get_template_part(), mejor organización.

WordPressEmDashNotas
Custom Post TypesColeccionesDefine mediante la UI de administración o la API
WP_QuerygetEmDashCollection()Filtros, límites, consultas de taxonomía
get_post()getEmDashEntry()Devuelve una entrada o null
Categorías/EtiquetasTaxonomíasSoporte jerárquico preservado
register_nav_menus()getMenu()Soporte de menús de primera clase
register_sidebar()getWidgetArea()Áreas de widgets de primera clase
bloginfo('name')getSiteSetting("title")API de configuración del sitio
the_content()<PortableText />Renderizado de contenido estructurado
ShortcodesBloques de Portable TextComponentes personalizados
add_action/filter()Ganchos de plugincontent:beforeSave, etc.
wp_optionsctx.kvAlmacenamiento clave-valor
Directorio del temaDirectorio src/Componentes, diseños, páginas
functions.phpastro.config.mjs + configuración de EmDashConfiguración de compilación y tiempo de ejecución

Las consultas de WordPress usan WP_Query o funciones auxiliares. EmDash usa funciones de consulta tipadas.

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 usa una jerarquía de plantillas para seleccionar qué archivo renderiza una página. Astro usa un enrutamiento explícito basado en archivos.

Plantilla de WordPressEquivalente en EmDash
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

Las partes de plantilla de WordPress se convierten en componentes de Astro:

functions.php / template
// En la plantilla:
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 tiene soporte de primera clase para menús con resolución automática de URL:

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

Los menús se crean a través de la interfaz de administración, archivos de semilla o importación de WordPress.

Las áreas de widgets funcionan como las barras laterales en WordPress:

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

Las opciones del sitio y la configuración del personalizador se asignan a getSiteSetting():

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"); // Retorna { mediaId, alt, url }

Las taxonomías funcionan conceptualmente igual—jerárquicas (como categorías) o planas (como etiquetas):

import { getTaxonomyTerms, getEntryTerms, getTerm } from "emdash";
// Obtener todas las categorías
const categories = await getTaxonomyTerms("categories");
// Obtener un término específico
const news = await getTerm("categories", "news");
// Obtener términos para una publicación
const postCategories = await getEntryTerms("posts", postId, "categories");

Los hooks de WordPress (add_action, add_filter) se convierten en hooks de plugins de EmDash:

WordPress HookEmDash HookPropósito
save_postcontent:beforeSaveModificar contenido antes de guardar
the_contentPortableText componentsTransformar contenido renderizado
pre_get_postsQuery optionsFiltrar consultas
wp_headLayout <head>Agregar contenido al head
wp_footerLayout before </body>Agregar contenido al pie de página

Seguridad de Tipos

TypeScript en todo. Colecciones, consultas y componentes están completamente tipados. No más adivinar nombres de campos o tipos de retorno.

Rendimiento

Sin sobrecarga de PHP. Generación estática por defecto. Renderizado en servidor cuando se necesita. Listo para despliegue en Edge.

DX Moderno

Reemplazo de módulos en caliente. Arquitectura basada en componentes. Herramientas modernas (Vite, TypeScript, ESLint).

Despliegues Basados en Git

Código y plantillas en git. Contenido en la base de datos. Sin FTP, sin permisos de archivos, sin sitios hackeados.

EmDash genera URLs de vista previa seguras con tokens firmados HMAC. Los editores de contenido pueden previsualizar borradores sin iniciar sesión en producción—comparten un enlace, no credenciales.

Los conflictos de plugins de WordPress desaparecen. Los plugins de EmDash se ejecutan en contextos aislados con APIs explícitas. Sin contaminación de estado global.

Los editores de contenido utilizan el panel de administración de EmDash, similar a wp-admin:

  • Panel de control con actividad reciente
  • Listados de colecciones con búsqueda, filtro y acciones masivas
  • Editor enriquecido para contenido (Portable Text, no Gutenberg)
  • Biblioteca de medios con carga por arrastrar y soltar
  • Constructor de menús con ordenamiento por arrastrar y soltar
  • Editor de áreas de widgets para contenido de barras laterales

La experiencia de edición es familiar. La tecnología subyacente es moderna.

EmDash importa contenido de WordPress directamente:

  1. Exportar desde WordPress (Herramientas → Exportar)
  2. Subir el archivo .xml en el administrador de EmDash
  3. Mapear tipos de publicación a colecciones
  4. Importar contenido y medios

Publicaciones, páginas, taxonomías, menús y medios se transfieren. Los bloques de Gutenberg se convierten a Portable Text. Los campos personalizados se analizan y mapean.

Consulta la Guía de Migración de WordPress para instrucciones completas.