Hace unos días mi jefe y yo preparabamos un sitio en WordPress con algunas funcionalidades muy especificas para un cliente, y en el proceso, aprendí algo nuevo, y es que WordPress es super fácil de configurar, de utilizar, y da las facilidades a los desarrolladores de que sus plugins o templates sean desarrollados de una manera más que simple, lo que aprendí fue a crear custom post, una funcionalidad peculiar en wordpress que permite generar un catalogo de «algo» que especifiquemos, algo fantastico si me lo preguntan.
Por ejemplo, supongamos que yo quiero hacer una pequeña sección, para agregar los reconocimientos o certificaciones que he tenido, es decir, necesito lo básico de un post, título, contenido, thumbnail, y a lo mejor una sección de categorias para poder mantener separadas las empresas en donde he tomado los cursos. Para esto, necesitaría crear un custom post, y esta ocasión, quiero compartir con ustedes paso a paso como pueden crear su propio custom post.
Pues bién, cabe mencionar que podemos crear un custom post de dos maneras, la primera, es crearlo como un plugin que se encargue de crear los customs post cuando se active, y la segunda, es incluirlo de manera predeterminada en nuestro tema de wordpress, pues bien, dado que esto no va a ser un tutorial de como crear un plugin para wordpress, vamos a hacerlo de la segunda manera, así, sin más alarde, comencemos.
Lo primero que vamos a necesitar es tener a la mano nuestro archivo functions.php, este se encuentra en cada tema de wordpress, si aún no lo ubicas, normalmente la ruta es:
wp-content/themes/myTheme/functions.php
Y bien, para aquellos que no lo saben, este archivo, se utiliza mucho para añadirle agregados a wordpress, ya sea funciones extras, modificaciones, shortcodes, etc. Bien, si el archivo no existe (que es muy improbable), lo creamos, y dentro, colocaremos lo siguiente:
function agregar_custom_posts()
{
register_post_type('reconocimientos', array(
'label' => _('Reconocimientos'),
'menu_position' => 15,
'public' => true,
'supports' => array('title', 'editor','thumbnail')
));
}
add_action('init', 'agregar_custom_posts');
Bien, expliquemos, para que el custom post sea agregado, es necesario especificarle a wordpress en que momento se va a ejecutar la accion que los agrega, que en este caso, la función, agregar_custom_posts es la que contiene la función principal, llamada register_post_type, bien, vamos por pasos, register_post_type es la función que hace la magia, esta le especifica a wordpress que tiene que dar de alta una nueva sección para administrar un tipo categorizado de post llamado «reconocimientos», asignado como primer parametro, con los requerimientos básicos (titulo, contenido y la imagen destacada) especificados en el array que lleva como segundo parametro, así mismo, le damos el título que mostrará en el menú principal, que será, «Reconocimientos», y por ultimo, la llave public, que se especifica en true, sin este atributo, nuestro custom post nunca apareceria en el menú.
Por último tenemos la función add_action, esta función nos permite ejecutar un hook en algún momento de la carga del sistema, particularmente lleva dos parametros, el primero, es el momento en que ejecutaremos la función, es por eso, que e puesto «init», ya que init, representa que el usuario ya ha iniciado sesión, y por ultimo, la función que deseamos ejecutar, que en este caso, es la función que nos permitirá agregar el custom post.
Lo anterior, nos debe de dar un resultado similar al siguiente:
Listo, con eso lo tendriamos listo, ¿Pero que pasa?, si se dan cuenta, dice palabras como «Añadir nueva entrada», «Añadir Nueva», y así mismo, no le puedo asignar ni etiquetas ni categorias, y pues bien, los primeros dos detalles, son cuestiones de gusto, por que al final de cuentas, si nosotros administramos el sitio pues entenderemos las cosas, sin embargo, los clientes son muy especiales, y cosas como esas son las que les causan «ruido», en fin, vamos a solucionar poco a poco esos detalles, para poder dejar nuestro custom post al 100%, primero vamonos a lo fácil, agregar categorias y etiquetas, «Ahh, ¿pensaron que eso sería lo más dificil?», pues no, para agregarle las categorias y las etiquetas, solo tenemos que agregar al código anterior, la llave «taxonomies» especificandole que deseamos permitir, veamos:
function agregar_custom_posts()
{
register_post_type('reconocimientos', array(
'label' => _('Reconocimientos'),
'menu_position' => 15,
'public' => true,
'supports' => array('title', 'editor','thumbnail'),
'taxonomies' => array('category', 'post_tag'),
));
}
add_action('init', 'agregar_custom_posts');
Si actualizamos, nuestro resultado sería algo como:
Como pueden ver, ya tiene su propio catalogo de categorias, etiquetas, y ya es posible seleccionar y agregar desde el panel de agregado de entradas. Ahora bien, lo siguiente, es cambiar los textos que se nos muestran, bien, para esto, agregaremos un atributo más a nuestra función.
function agregar_custom_posts()
{
register_post_type('reconocimientos', array(
'label' => _('Reconocimientos'),
'labels' => array(
'name' => _('Reconocimientos'),
'singular_name' => _('Reconocimiento'),
'name_admin_bar' => _('Nuevo Reconocimiento'),
'add_new' => _('Agregar Reconocimiento'),
'new_item' => _('Nuevo Reconocimiento'),
'add_new_item' => _('Agregar Reconocimiento'),
'edit' => _('Editar'),
'edit_item' => _('Editar Reconocimiento'),
'view' => _('Ver'),
'view_item' => _('Ver Reconocimiento'),
'search_items' => _('Buscar'),
'not_found' => _('No se encontraron reconocimientos'),
'not_found_in_trash' => _('No existen reconocimientos borrados')
),
'menu_position' => 15,
'public' => true,
'supports' => array('title', 'editor','thumbnail'),
'taxonomies' => array('category', 'post_tag'),
));
}
add_action('init', 'agregar_custom_posts');
Como pueden ver, este atributo, de nombre «labels», es más que nada un arreglo, con todos los textos necesarios para que wordpress sustituya lo que necesite, esto, como les comente anteriormente, es cuestion de gustos, claro que cuando las cosas son para que el cliente las administre, se vuelven un poco más tediosas y detalles como estos son sumamente importantes.
Ahora bien, hay un tema que no hemos tocado, y es el tema de usabilidad, por ejemplo, recordemos que como quiera que sea, nuestros reconocimientos no dejan de ser post con algún tipo en especial, y recordemos que widgets como el Archivo, y las acciones de busqueda, filtran TODOS los post sin importar su tipo, ¿que pasa si queremos que nuestros reconocimientos no sean considerados por ninguno de estos dos widgets?, fácil, más parametros.
function agregar_custom_posts()
{
register_post_type('reconocimientos', array(
'label' => _('Reconocimientos'),
'labels' => array(
'name' => _('Reconocimientos'),
'singular_name' => _('Reconocimiento'),
'name_admin_bar' => _('Nuevo Reconocimiento'),
'add_new' => _('Agregar Reconocimiento'),
'new_item' => _('Nuevo Reconocimiento'),
'add_new_item' => _('Agregar Reconocimiento'),
'edit' => _('Editar'),
'edit_item' => _('Editar Reconocimiento'),
'view' => _('Ver'),
'view_item' => _('Ver Reconocimiento'),
'search_items' => _('Buscar'),
'not_found' => _('No se encontraron reconocimientos'),
'not_found_in_trash' => _('No existen reconocimientos borrados')
),
'menu_position' => 15,
'public' => true,
'supports' => array('title', 'editor','thumbnail'),
'has_archive' => false,
'exclude_from_search' => true,
'description' => 'Esta es la descripción del tipo de post',
'taxonomies' => array('category', 'post_tag'),
));
}
add_action('init', 'agregar_custom_posts');
Como pueden observar, al final, agregue tres parametros más ‘has_archive’ que indica si los post son incluidos en el archivo, y exclude_from_search, que indica si este tipo de post son incluidos en las busquedas del blog, así mismo, agregue una descripción, que simplemente se me había pasado anteriormente, jejeje.
Ahora bien, por último ¿Que nos hace falta?, pues yo creo que mostrarlos en algún lugar de nuestro sitio ¿no?, pues en realidad, esto también es excesivamente fácil, como muchos ya sabrán, y los que no enterense, existen un loop principal en wordpress, que es el que normalmente recorre cada uno de los posts para imprimirlos donde debería de ser, ahora bien, para que nosotros podamos imprimir nuestros Reconocimientos, vayamos al archivo donde vayamos a hacer la impresión, y creemos un nuevo loop de wordpress, de la siguiente manera:
$args = array( 'post_type' => 'reconocimientos', 'posts_per_page' => 10 ); $loop = new WP_Query( $args ); while ( $loop->have_posts() ) : $loop->the_post(); the_title(); echo '