Tu primer Custom Post Type con código
Entra en el archivo functions.php de tu theme activo e inserta el siguiente código. [php] function crear_post_type() { register_post_type( 'productos', array( 'labels' => array( 'name' => __( 'Productos' ), 'singular_name' => __( 'Producto' ) ), 'public' => true, 'has_archive' => true, ) ); } add_action( 'init', 'crear_post_type' ); [/php] Ahora ve al dashboard de WordPress y fíjate en la columna lateral de opciones de la izquierda. Fíjate bien porque ahí debe estar tu nuevo Custom Post Type «Productos» (ver figura siguiente).
Ya tienes un nuevo tipo de post (poco personalizado, eso sí) pero perfectamente operativo. ¿Quieres emplearlo para guardar tus productos? ¡Fenomenal! ¿Te apetece que te sirva para guardar tus proyectos realizados, a modo de Portfolio? ¡Genial! Solo entra otra vez en functions.php y cambia donde dice «productos» por «proyectos», «Productos» por «Proyectos» y «Producto» por «Proyecto». ¿A que es fácil?
Ahora vamos a crear una taxonomía asociada al Post Type «Producto»
¿Qué tal si te animas a crear una taxonomía para poder clasificar tus productos? ¡Maravilloso! Utilizaremos otro código, lo añadiremos a functions.php y listo. El código es el siguiente. No es muy largo, no te asustes ;) . [php] add_action( 'init', 'crear_tax_producto' ); function crear_tax_producto() { register_taxonomy( 'tipo', 'productos', array( 'label' => __( 'Tipo' ), 'rewrite' => array( 'slug' => 'tipo' ), 'hierarchical' => true, ) ); } [/php] Si quieres cambiar el nombre de la "categoría" escribe otra cosa en lugar de «tipo» (acuérdate también de cambiar el slug). Si quieres que la taxonomía se comporte como una etiqueta pon «false» en lugar de «true». Naturalmente, hay que indicar a qué Custom Post Type queremos aplicar la taxonomía. Cambia «productos» si quieres asociarlo a otro Custom Post Type. Y fíjate que en la columna lateral, ahora aparece «Tipo» dentro del apartado de «Productos» (ver figura siguiente). ¡Ya puedes clasificar tus Custom Post Types!
Los entresijos del código
¡Muy bien, Antonio! Pero ¿podrías aclararnos un poco el significado del código? ¡Por supuesto! :) Es muy fácil. En primer lugar veamos qué significa «add_action». add_action es una función del core de WordPress. ¿Y qué hace esta función? En pocas palabras: nos permite alterar el código fuente de WordPress, incluso de un Plugin sin tocarlo, en base a ejecutar la función que se especifica (una escrita por nosotros, generalmente) en un momento determinado de la ejecución de WordPress (el denominado «hook»). Con un hook se puede modificar el funcionamiento de WordPress o de un plugin sin entrar en su código fuente. En concreto, la función add_action sirve para enganchar una función nuestra a un proceso del core de WordPress. Es decir; «add_action» se usa en lugar de codificar una función en WordPress. Es como decir: en vez de ejecutar lo que tienes codificado, ejecuta esto otro escrito por mí. Ahora centrémonos en los parámetros de la función «add_action» en la creación del Custom Post Type Productos. Traducido, quiere decir: durante el hook init, haz una llamada a la función crear_post_type. El hook «init» se inicia al principio del ciclo de WordPress y es el lugar apropiado, por lo general, para registrar una función personalizada. En el caso de la creación de la taxonomía «Tipo», vista anteriormente, tú ya me puedes decir el significado de la función add_action. ¡Efectivamente! Ejecuta la función «crear_tax_producto» al principio del ciclo de WordPress. Ahora, tanto la función crear_post_type como crear_tax_producto utilizan dos funciones de WordPress denominadas respectivamente register_post_type y register_taxonomy. Ambas funciones, como toda función que se precie, poseen parámetros. En el caso de register_post_type, la función admite dos: el nombre del Post Type y un array con la lista de parámetros. La lista de parámetros es extensa. Aquí se explican todos los detalles de esta función: Function Reference/register post type. Respecto a register_taxonomy, la función admite tres parámetros: el nombre de la taxonomía, el Post Type al que va asociado y el array con la lista de parámetros. Todos los parámetros de esta función, los encontrarás aquí: Function Reference/register taxonomy.
¿Para qué sirve el parámetro «rewrite» en la función register_post_type? Simplemente para crear la URL de la página con la lista de todas las instancias del Custom Post Type a crear. Por ejemplo, en el caso de la taxonomía de los productos, la url para ver el listado de todos los productos etiquetados con «Ferreteria» sería algo del estilo: «misitio.com/tipo/ferreteria». Téngase en cuenta que la estructura de las URL para las taxonomías depende de la configuración de la función register_taxonomy. Con «rewrite» se sobreescribe el slug que se tenga establecido en «Ajustes > Enlaces permanentes». Sin ese rewrite, la URL sería: «misitio.com/tag/ferreteria» (ver figura siguiente).
¡Cuánto sabemos ya de codificar Custom Post Types! ¿No es fantástico?
Añadiendo campos personalizados (Custom Post Fields)
Y ahora vamos con una vuelta de tuerca más ;) . Vamos a añadir la siguiente línea a la función «register_post_type», justo antes de «'public' => true,»: [php] 'supports' => array( 'title', 'editor', 'thumbnail', 'custom-fields' ), [/php] Con este parámetro, en el editor de Productos, dentro del dashboard de WordPress, se incluye la posibilidad de añadir, además del título y la caja de texto para una descripción, una imagen destacada y la caja para incluir campos personalizados (Custom Fields) (Ver figura siguiente).
De esta forma, se pueden agregar «metadatos» al Custom Post Type.
Si quieres mostrar esos metadatos, es preciso modificar el archivo del theme activo que presenta la información individual de una instancia del Custom Post Type. La instrucción de WordPress que lo hace es: <?php the_meta(); ?> Más información: Custom Fields.