Listar y paginar Custom Post Types en WordPress

Los tipos de datos customizados (Custom Post Types) en WordPress fueron uno de los agregados más importantes de la versión 3. Agregan a la plataforma un soporte nativo para cualquier tipo de dato, conviertiendose cada día más en un CMS completo (nos guste o no.)

En la entrada Custom Post Types en WordPress se puede ver como crear un custom post type de tipo libro. Tienen infinitas utilidades, pero en muchas ocasiones vamos a necesitar por lo menos una página con un listado y una página individual para mostrar un ítem de ese tipo. Para el primer caso, seguramente queramos un paginado.

Hoy en día la manera más sencilla de hacer esto es utilizar la clase SD_Register_Post_Type de Soma Design. Aunque quizá en un futuro este comportamiento esté integrado en la plataforma, hoy es difícil hacerlo sin plugins, sobre todo para el que no conoce mucho el código de WordPress.

La funcionalidad más interesante que provee es:

  1. URLs customizadas para el listado general de un post type, con paginación y feed.
    Ej.: http://sitio.com/libros/, http://sitio.com/libros/page/2/http://sitio.com/libros/feed/ )
  2. Plantillas customizadas para lista de ítems y páginas individuales. Si registramos “libro” como post type, podremos usar libro/single.php (individual) y libro/index.php (lista) para una mejor organización.

Modo de uso

Primero debemos incluír la clase SD_Register_Post_Type en nuestro código. Se puede incluír desde un archivo externo:
require_once('sd_register_post_type.class.php')
o copiar la clase entera a nuestro código (dentro de functions.php por ejemplo.)

Lo único que resta es registrar el nuevo tipo de dato utilizando la función auxiliar sd_register_post_type:

sd_register_post_type('libro', $args, 'libros')

Esta función es simplemente un wrapper de register_post_type, recibe los mismos parámetros(nombre, array de parámetros) más un tercer parámetro para el nombre plural del tipo. Si no se especifica el segundo y tercer parámetro se toman valores por defecto, en el caso del plural se agrega una s al nombre del tipo.

Gracias a eso, se puede reutilizar el código utilizado con register_post_type con esta nueva función:

sd_register_post_type( 'libro',
    array(
	'public' => true,
	'labels' => array(
		'name' => __( 'Libros' ),
		'singular_name' => __( 'Libro' ),
		'add_new' => __( 'Añadir Libro' ),
		'add_new_item' => __( 'Añadir Nuevo Libro' ),
		'edit' => __( 'Editar' ),
		'edit_item' => __( 'Editar Libro' ),
		'new_item' => __( 'Nueva Libro' ),
		'view' => __( 'Ver Libro' ),
		'view_item' => __( 'Ver Libro' ),
		'search_items' => __( 'Buscar Libro' ),
		'not_found' => __( 'Libro No Encontrado' ),
		'not_found_in_trash' => __( 'Libro no encontrado en Papelera' )
	),
	'description' => __( 'Libros y revistas' ),
	'menu_position' => 20,
	'menu_icon' => get_stylesheet_directory_uri() . '/images/libros.png',
	'query_var' => true,
	'supports' => array(
		'title',
		'editor',
		'comments',
		'trackbacks',
		'page-attributes',
		'thumbnail' ),
	'rewrite' => array( 'slug' => 'libros'), //->Ver Error 404
	'capability_type' => 'post'
    )
)

Error 404

Como en el caso de la entrada anterior, los cambios de las URLs no van a tener efecto hasta visitar Ajustes>Enlaces Permanentes (Permalinks) para refrescar las reglas de permalinks.

Luego de seguir esos pasos deberías poder administrar libros desde el panel de administración de WordPress y visualizar libros individuales (por default cargados en la plantilla single.php.)

Paginado

Para tener una plantilla con un listado de libros con paginado, creamos un archivo libro/index.php dentro de la carpeta del theme activo y agregamos el código siguiente para traer los posts de la base de datos:

$wp_query = new WP_Query(array('post_type' => 'libro',
                                 'paged' => $paged,
                                 'posts_per_page' => 30,
				 'orderby' => 'title',
				 'order' => 'ASC')
);

Eso seleccionaría 30 libros por página, ordenados por título en forma ascendiente. Por último faltaría agregar los links de paginación. La manera más sencilla es agregando next_posts_link('Página siguiente') y previous_posts_link('Página anterior').

Se puede ver un código similar funcionando en el blog Ted el Mecánico, en la sección de Salas. Se puede ver la página 2 del listado o la página individual de La Trastienda, por ejemplo.

Links

  • http://codex.wordpress.org/Custom_Post_Types
  • http://codex.wordpress.org/Custom_Fields
  • http://somadesign.ca/projects/smarter-custom-post-types/
$wp_query = new WP_Query(array(‘post_type’ => ‘ted_venue’,
‘paged’ => $paged,
‘posts_per_page’ => 30,
‘orderby’ => ‘title’,
‘order’ => ‘ASC’)
);

Detectar soporte HTML5 con Modernizr

Modernizr es una biblioteca de funciones que permite detectar el soporte nativo de nuevas y futuras tecnologías en los navegadores web. Dichas tecnologías son implementaciones de las especificaciones de HTML5 y CSS3.

El principal objetivo de Modernizr es proveer una forma confiable de detectar estas implementaciones, para poder sacar provecho de los navegadores o bien proveer una alternativa en caso de que el navegador no implemente la tecnología en cuestión.

Para usarlo simplemente basta con descargar el archivo Javascript y cargarlo desde una página. Automáticamente Modernizr realiza las pruebas correspondientes para detectar las capacidades del navegador y las almacena en forma de booleano en un objeto llamado “Modernizr”, al que podemos acceder dentro de nuestro Javascript.

Por ejemplo, para saber si el navegador soporta la etiqueta <video>, debemos chequear:

if(Modernizr.video){
//código HTML5
}
else{
//código alternativo
}

Al momento de la detección, Modernizr también agrega a la etiqueta <html> clases según las capacidades de nuestro navegador. Por ejemplo, si soporta video, audio y canvas, la etiqueta pasa a ser <html class="audio canvas video">.

Por lo tanto, otro método válido para chequear si el navegador soporta cierta implementación es ver si dicha etiqueta posee la clase correspondiente, acorde a la documentación de Modernizr.

En el ejemplo utilizo este último método para hacer la comprobación.

Demo: HTML5 Tester

Links

WordPress plugin: Undo Publish

Undo Publish es un un pequeño experimento de plugin, inspirado en la funcionalidad Undo Send de Gmail Labs, que ofrece la misma funcionalidad pero en el panel de WordPress. En pocas palabras permite cancelar la publicación de un post nuevo dentro de los 3 segundos posteriores a su publicación.

Configuración

El plugin no tiene opciones de configuración dentro del panel de administración de WordPress. Sin embargo, editando el archivo del plugin se puede configurar el tiempo de espera que permite antes de publicar el post. La variable a editar es define(TIME_LIMIT, 3000), en milisegundos.

Notas

  • El plugin se activa solamente para posts que sean nuevos. Es decir, no va a molestar cuando la acción sea Actualizar un post.
  • Se activa también para Custom Post Types (No se si es un bug o un feature, depende del Custom Post Type, creo yo.)

Instalación

  • Descomprimir en wp-plugins/
  • Activar.

Descarga

Pueden descargarlo del repositorio oficial de WordPress, incluyo el link aquí abajo.

Undo Publish – WordPress Plugin Directory

http://wordpress.org/extend/plugins/undo-publish/

http://wordpress.org/extend/plugins/undo-publish/

Custom Post Types en WordPress

Primero que nada, ¿Qué son Custom Post Types?

Los tipos  de datos que maneja WordPress nativamente son post, page, attachment, revision y nav menu. Los Custom Post Types son básicamente tipos de datos personalizados, algo así como los Content Types de Drupal. Son infelizmente llamados Post Types porque viven en la misma tabla que posts y pages (wp_posts), y son diferenciados por una columna post_type.

Definir nuevo custom post type

Para definir un tipo nuevo utilizamos la función create_post_type(). El siguiente código puede ser utilizado desde el archivo functions.php o aún mejor, desde un plugin.

add_action( 'init', 'create_post_type' );
function create_post_type() {
  register_post_type( 'libro',
	array(
		'public' => true,
		'labels' => array(
			'name' => __( 'Libros' ),
			'singular_name' => __( 'Libro' ),
			'add_new' => __( 'Añadir Libro' ),
			'add_new_item' => __( 'Añadir Nuevo Libro' ),
			'edit' => __( 'Editar' ),
			'edit_item' => __( 'Editar Libro' ),
			'new_item' => __( 'Nueva Libro' ),
			'view' => __( 'Ver Libro' ),
			'view_item' => __( 'Ver Libro' ),
			'search_items' => __( 'Buscar Libro' ),
			'not_found' => __( 'Libro No Encontrado' ),
			'not_found_in_trash' => __( 'Libro no encontrado en Papelera' )
		),
		'description' => __( 'Libros y revistas' ),
		'menu_position' => 20,
		'menu_icon' => get_stylesheet_directory_uri() . '/images/libros.png',
		'query_var' => true,
		'supports' => array(
			'title',
			'editor',
			'comments',
			'trackbacks',
			'page-attributes',
			'thumbnail' ),
		'rewrite' => array( 'slug' => 'biblioteca'), //->Ver Error 404
		'capability_type' => 'post'
	)
  );
}

La función create_post_type() recibe como primer parámetro el nombre del tipo de dato y en segundo lugar una lista de parámetros para configurarlo. Aquí se puede ver el detalle de esta función: Function reference: register_post_type.

Luego de añadir ese código deberíamos ver un menú lateral “Libros” que nos permite gestionar nuevos elementos de tipo libro, tal como manejamos posts o páginas. Con el parámetro rewrite especificamos que las urls serán del tipo http://sitio.com/biblioteca/nombre-libro.

Error 404

Al editar el nuevo tipo de dato es posible encontrarse con errores de página no encontrada, al hacer preview o al visitar un nuevo ítem publicado si utilizamos el parámetro rewrite para hacer uso de permalinks. Para corregir esto basta con visitar Settings/Permalinks o agregando flush_rewrite_rules() luego de llamar a register_post_type().

Definir campos para el nuevo tipo de datos

A través del array supports podemos definir los campos nativos que contiene nuestro tipo de datos, por ejemplo title, editor (contenido), comments, etc. Pero también podemos añadir nuevos campos. Supongamos que quiero agregar un nuevo campo Editorial al tipo Libro.

Para esto hay que agregar un meta_box (las cajitas con opciones dentro de post.php) en la administración para poder editar ese campo. Esto se hace mediante la función add_meta_box().

add_action("admin_init", "admin_init");

function admin_init(){
    add_meta_box("libro-meta", "Información Extra", "info", "libro", "side", "low");
}

function info(){
    global $post;
    $custom = get_post_custom($post->ID);
    $capacity = $custom["editorial"][0];
    ?>
        <label for="capacity">Editorial</label>
        <input name="capacity" id="capacity" value="<?php echo $capacity; ?>" />
    <?php
}

Por último, registramos una función para guardar los campos personalizados.

add_action('save_post', 'save_extra');
function save_extra(){
    global $post;
    update_post_meta($post->ID, 'editorial', $_POST['editorial']);
}

Listo. Ahora además de posts y pages podemos crear Libros. Cómo mostrarlos, eso es tema para otro post :)

Desgargar código fuente

[download id=”3″]

Probado en WordPress 3.0.

Fuentes

  • http://codex.wordpress.org/Custom_Post_Types
  • http://codex.wordpress.org/Function_Reference/register_post_type
  • http://thinkvitamin.com/dev/create-your-first-wordpress-custom-post-type/

URLs amigables en XAMPP

Un requerimiento común para las aplicaciones de hoy en día es utilizar urls amigables. Para lograr esto en XAMPP hay que seguir unos pocos pasos.

Para poder utilizar urls amigables bajo XAMPP hay que habilitar el módulo mod_rewrite de Apache. Para esto debemos:

Editar el archivo httpd.conf que se encuentra en el directorio [instalación_xampp]/apache/conf. Por defecto instalación_xampp es C:\xampp.

Des-comentar la línea:
#LoadModule rewrite_module modules/mod_rewrite.so

Quedaría así:
LoadModule rewrite_module modules/mod_rewrite.so

Por úlltimo, buscar las apariciones del texto AllowOverride None y sustituir por AllowOverride All.

Luego solo falta reiniciar el servidor y por supuesto, tener nuestra aplicación configurada para aprovechar esta funcionalidad.

Fuente: Murfitt.net http://murfitt.net/blog/dan/2007/10/04/xampp-and-modrewrite-getting-clean-urls-work

Generador de SHA1 y MD5

Esta es una aplicacioncita vieja que hice hace un tiempo cuando estaba aprendiendo a usar jQuery. Es simplemente una herramienta a mano para generar hashes.

No tiene ciencia, es algo simple, rápido y fácil de recordar (yo no me voy a olvidar, pero ign.com.uy/hash no es tan dificil). Lo podés consultar en esa dirección o siguiendo el link: Hash Generator

Hash Generator

Notas

  • Los strings calculados no se almacenan en ningún lado. De todas maneras, no es muy sabio andar jugando con tus contraseñas en cualquier sitio.
  • Los scripts utilizados para el cálculo de los hashes se puede encontrar en esta página.
  • Les recuerdo que para el almacenamiento de contraseñas no se recomienda utilizar SHA1 ni MD5.

Shoutt: Mensaje personal rotativo en MSN

Disclaimer: Shoutt no funciona en Windows 7 y actualmente la descarga está fuera de servicio por la mudanza del blog. “Estamos trabajando para usted.”

Desde la versión 7.0  MSN viene con una función para “Mostrar lo que estoy escuchando“. Como ya todos deben saber, lo que hace esta función es poner al lado de tu nick el nombre y artista de la canción que estás escuchando, en un formato tipo link más llamativo que el clásico mensaje personal.

Pero más alla de mostrar lo que estoy escuchando, se le puede dar un uso un poco más útil. Mucha gente pone anuncios personales, de su empresa, etc. en sus mensajes personales. Si se pudiera utilizar la misma función, los mensajes resultarían más llamativos.

Luego de investigar un poco encontré un código para actualizar el campo musical del usuario, que si mal no recuerdo, lo saqué de aquí. Teniendo eso se puede construír una variedad de utilidades que utilicen este campo:  cuentas regresivas, marquesinas, avisos rotativos, publicidad, etc.

Después de ver como lo usaban algunos para promocionar sus productos, pensé que sería útil hacer una aplicación que permita mostrar varios avisos y que los vaya rotando.

Cómo usarlo

En MSN, seleccionamos la opción para mostrar lo que estamos escuchando y abrimos Shoutt. En la ventana principal (y única) tenemos un área de texto donde se pueden especificar varios mensajes, separados por un salto de línea.

Luego, elegimos el intervalo de tiempo que van a rotar. Es recomendable setearlo en 10 ó mas por el delay que puede existir entre nosotros y nuestros contactos. De todas maneras, el mínimo es 5 segundos entre cada mensaje. También se puede especificar un prefijo para no tener que copiar y pegar el mismo texto en cada línea.

Detalles

Shoutt está bajo una licencia GPL. Está construído en VS 2008, framework .NET 2.0,  C#. En las próximas líneas les dejo el link para descargar el ejecutable y el código fuente.

Descarga

[download id=”1,2″]

Esta es la primer versión de este programita. Se aceptan sugerencias y comentarios.

¡Disfrútenlo!

Shoutt