Comenzando con los Custom Post Types en WordPress

Categoría: WordPress , 09/02/2012, 5 comentarios

Un aspecto importante en WordPress son los Custom Post Types, una característica que se incluyó a partir de la versión 3 de este CMS. Como la mayoría sabe, en WordPress hay varios tipos de posts nativos, los posts normales, como este artículo, una página estática, los archivos adjuntos (imágenes y demás) y las barras de navegación. Cada una de estas cosas tiene un tipo de post concreto en la tabla wp_posts.

Desde la versión 3 se pueden definir Custom posts propios, lo que quiere decir que tenemos un montón de posibilidades de crear casi cualquier cosa que se nos ocurra. Para crear este tipo de posts se hace uso de la función register_post_type, que paso a describir a continuación, creando un Custom Post Type llamado Trabajo:

add_action('init', 'franmoreno_trabajos_register');

function franmoreno_trabajos_register() {

	$labels = array(
		'name' => __( 'Trabajos' ),
		'singular_name' => __( 'Trabajo' ),
		'add_new' => __( 'Añadir Nuevo' ),
		'add_new_item' => __( 'Añadir nuevo Trabajo' ),
		'edit_item' => __( 'Editar Trabajo' ),
		'new_item' => __( 'Nuevo Trabajo'),
		'view_item' => __( 'Ver Trabajo'),
		'search_items' => __( 'Buscar Trabajo'),
		'not_found' =>  __('No se encontró nada'),
		'not_found_in_trash' => __('No se encontró nada en la papelera'),
		'parent_item_colon' => ''
	);

	$args = array(
		'labels' => $labels,
		'public' => true,
		'rewrite' => true,
		'capability_type' => 'post',
		'hierarchical' => false,
		'menu_position' => null,
		'supports' => array('title','thumbnail','editor')
	  ); 

	register_post_type( 'trabajos' , $args );
}

Esta función recibe primero el nombre del custom post, y segundo un array con los distintos argumentos para crearlo. Este array contiene los siguientes campos:

  • labels: Otro array con los distintos textos que se mostrarán en el panel de administración para gestionar nuestro custom post type.
  • public: Define si este custom post es de acceso público o va a ser de uso interno.
  • rewrite: Define si se va a hacer uso de los rewrites para generar permalinks con este tipo de datos.
  • capability_type: Define la forma en la que se accederá a el internamente, en este caso, decimos que igual que un post.
  • hierarchical: Permitimos que se asocien unos a otros como padres e hijos, false es que no, comportándose como un post. Si decimos true, se comportarán como páginas, pudiendo asignarles un padre.
  • menu_position: Definimos la posición que tendrá este custom post en el menú de administración de WordPress.
  • supports: Un array con los distintos campos que queremos que este custom post tenga en el panel de creación y edición, en este caso decimos que queremos que tenga título, imagen predeterminada y el campo de edición del post.

Añadimos el código anterior a nuestro fichero functions.php y al guardar y refrescar tendremos disponible nuestro custom post. Recomiendo, que para no tener dependencia entre el custom post y el theme, separemos ambas cosas, creando el custom post como un plugin, en este caso, podemos crear un fichero en el directorio plugins al que llamaremos como queramos y cuyo contenido será algo así:

<?php

/*
Plugin Name: Custom Post Trabajos
Description: Custom posts de trabajos.
Version: ...
Author: ...
Author Uri: ...
License: ...
*/

/* Aquí añadimos el código anterior que define el custom post */

...

Nos quedará el panel de control como sigue:

Y al añadir un nuevo trabajo veremos el panel que sigue:

En siguientes posts hablaré de otros aspectos importantes como:

  • Añadir Metaboxes a nuestro Custom Post.
  • Custom Taxonomies.
  • Mostrar el custom post en nuestra web.
  • Argent48

    gracias hijo de puta

    • http://www.franmoreno.com Fran Moreno

      De nada! :)

  • http://twitter.com/sjvl Seveloz

    Hola, somo se haria si quiero agregar categorías en un
    Custom Post Types?

    • http://twitter.com/sjvl Seveloz

      ok olvidalo :P

  • Roger

    Necesito añadir una serie de custom post types a un custom menu..

    Si tengo un post type llamado “Libros”, el cual contiene los posts “libro1″, “libro2″… etc.

    quiero que en el menu aparezca, por ej: HOME | Libros | , y que al clickear en “Libros” se listen los libros correspondientes.

    espero que se entienda

    saludos