Por fin he dado el salto y he migrado el blog a WordPress 1.5 "Strayhorn".

Mi conexión ha sudado tinta para subir por FTP todos los archivos (maldito FileZilla, que a veces pierde la conexión al servidor a medio subir), pero la cosa por fin está corriendo en producción.

El principal motivo para actualizar no ha sido solo la novedad de poder crear páginas estáticas (algo que le hacía muchísima falta a WP para no depender de HTMLs sueltos en el FTP), sino el nuevo sistema de temas.

Adiós código espagueti, hola arquitectura modular

Si habéis tocado versiones anteriores, sabréis que cambiar el diseño visual era un dolor de muelas: tenías que modificar el index.php principal del raíz, meter ahí todo el diseño a machete y cruzar los dedos para que al actualizar de versión no se rompiera nada.

Ahora, los de WordPress han modularizado todo. Han metido los temas en una carpeta separada (wp-content/themes/) y han dividido la estructura en varios archivos. De repente, esto tiene sentido arquitectónico. Te encuentras con un header.php, un footer.php, un sidebar.php y el index.php limpio, solo para el bucle de los posts.

Poniendo a prueba "El Loop"

Para que os hagáis una idea de lo que supone picar código ahora, he estado cacharreando para adaptar mi plantilla y la cosa pinta tal que así en el index.php:

<?php get_header(); ?>

<div id="content">
    <?php if (have_posts()) : while (have_posts()) : the_post(); ?>
        <div class="post" id="post-<?php the_ID(); ?>">
            <h2><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title(); ?></a></h2>
            <div class="meta">
                Publicado el <?php the_time('j \d\e F \d\e Y') ?> por <?php the_author() ?>
            </div>

            <div class="entry">
                <?php the_content('Leer el resto de la entrada &raquo;'); ?>
            </div>
        </div>
    <?php endwhile; else: ?>
        <p>Vaya, parece que aquí no hay nada.</p>
    <?php endif; ?>
</div>

<?php get_sidebar(); ?>
<?php get_footer(); ?>

Fijaos en la elegancia de usar funciones nativas como get_header() o get_sidebar(). Ya no hay que hacer un include() de PHP manual con rutas relativas que se rompen a la mínima de cambio. El core se encarga de ir a buscar el archivo correspondiente dentro de la carpeta de tu tema actual. Si falta header.php, hace un fallback automático al por defecto.

Retos con CSS: Estándares Web vs Internet Explorer 6

Otra cosa que me ha vuelto loco al principio es el style.css. Me he propuesto hacer el tema sin tablas, todo a base de <div> y CSS, siguiendo la fiebre de los estándares web y el XHTML. Eso sí, cuadrar los floats en Internet Explorer 6 sigue siendo un suplicio. Si le pones un float: left; a la barra lateral, IE6 te dobla el margen por toda la cara (el famoso double margin bug). He tenido que tirar del clásico hack de display: inline; para que no se me desmonte el chiringuito visualmente.

Pero la curiosidad técnica aquí es cómo WordPress lee este CSS. Ahora parsea la cabecera comentada de la hoja de estilos para mostrar el nombre del tema directamente en el panel de administración. Tienes que poner obligatoriamente algo así al principio del archivo:

/*
Theme Name: Clean 2005
Theme URI: http://url.com/
Description: Tema minimalista en XHTML y CSS adaptado para WP 1.5
Author: fulano
Version: 1.0
*/

Si te saltas este comentario literal, el panel de control no te reconoce la plantilla, no te sale en la pestaña de "Presentación" y te quedas con cara de tonto pensando que has subido mal los archivos por FTP. Me ha costado casi media hora darme cuenta de esta tontería.

El futuro de WordPress como Gestor de Contenidos

Sinceramente, creo que este cambio arquitectónico va a marcar un antes y un después. Separar la lógica pesada del núcleo de la capa de presentación es algo que llevábamos pidiendo a gritos. Ya estoy viendo que van a empezar a salir temas a patadas en la red, listos para descargar, subir y activar con un clic.

Con esta flexibilidad, WordPress va a dejar de ser solo un "script para weblogs" y mucha gente empezará a usarlo como un gestor de contenidos completo. A ver qué nos depara el futuro, pero si PHP sigue por este camino (y no la lían) y los servidores compartidos aguantan el tirón, tenemos juguete para rato.

A jugar.