10. Custom Post Types (artículos personalizados)

Desde el primer momento, WordPress viene con una variedad de diferentes tipos de ‘posts’ que se guardan en la tabla posts de la base de datos. Los más notorios son los tipos postpage.

Utilizando las funciones adecuadas, un desarrollador puede crear nuevos tipos de post personales. Estos tipos también se guardan en la tabla posts y funcionan como cualquier otro tipo en la mayor parte de los casos. Los atributos y comportamientos de estos posts personalizados también son editables con las funciones adecuadas.

Este capítulo mostrará cómo crear tipos de posts personalizados, como recuperar su contenido de la base de datos, y como mostrar en el front-end de tu sitio.

 

Registrar tipos de posts personalizados

WordPress viene con cinco tipos de posts por defecto (post, page, attachment, revision y menu). Mientras desarrolles tu plugin, puedes modificar esto de diferentes maneras. Pero a veces puede ser que necesites crear tu propio tipo de contenido específico: por ejemplo, productos para un sitio eCommerce, asignaciones para un sitio eLearning, u otros.

Recomendamos que crees tus tipos de post personalizados mejor en un plugin que en un tema. Esto asegura que el contenido de los usuarios es portable, aunque deseen cambiar el diseño de su sitio.

 

Añadir un tipo de post personalizado

Para crear un nuevo tipo de post, puedes utilizar la función register_post_type().

Observa que debes llamar a la función register_post_type() después de los ganchos admin_menuafter_setup_theme. Un buen gancho es init.

Esto crea un nuevo tipo de post, Product, que se identifica en la base de datos como acme_product.

Se le pasan dos argumentos mayores:

  • labels define el nombre del tipo de post en sus formas plural y singular.
  • public determina si el post se muestra en las pantallas de administración y en el contenido del sitio.
  • has_archive determina si el tipo de post personalizado puede tener un archivo de plantilla.

Una vez que el tipo de post se ha creado, generará una pantalla administrativa de primer nivel que se podrá utilizar para gestionar y crear posts de dicho tipo.

La documentación de la función register_post_type contiene una larga lista de argumentos que se le pueden pasar.

 

Buenas prácticas

Es importante que prefijas los identificadores de tu tipo de posts con un nombre corto que identifique tu plugin, tema o el sitio que los usa.

Si tu identificador es demasiado genérico, p.ej. Producto, puede entrar en conflicto con otros plugins o temas. Si ello ocurre, se producirán errores en el sitio.

Asegurate que el identificador de tus tipos de post personalizados no excedan los 20 caracteres, ya que la columna post_type de la base de datos actualmente es un campo tipo VARCHAR de dicha longitud.

Para asegurar la compatibilidad futura, no utilices el prefijo wp_ ya que puede ser utilizado en el núcleo de WordPress en el futuro.

 

URLs

Un tipo de post personalizado tiene su propio slug dentro de la estructura URL del sitio. En el próximo ejemplo, un post de este tipo de post de producto personalizado puede mostrarse en http://example.com/acme_product/%product_name%, donde acme_product es el slug de tu tipo de post personalizado y %product_name% es el slug del producto en concreto, luego un permalink podría ser: http://example.com/product/foobrozinator. Puedes ver este permalink en la pantalla de edición del post.

 

URLs de identificadores de tipos de posts personalizados

Cuando nombras un identificador de un tipo de post personalizado y quieres utilizar una estructura sencilla de URL, necesitas indicarlo mediante un argumento de la función register_post_type().

Esto generará URLs de la forma:

http://example.com/products/%product_name%

NOTA: Utilizar un slug genérico como ‘products’ puede generar potencialmente conflictos con otros plugins o temas que utilicen el mismo slug, pero mucha gente desestima URLs largas y oscuras. Sin embargo, resolver los conflictos de URL entre dos plugins es fácil, porque la estructura de la URL no se guarda permanentemente en cada registro de la base de datos, de la misma forma que se guardan los identificadores de los tipos de post personalizados.

 

Trabajar con datos de tipos de post personalizados

Plantillas de tipos de posts personalizados

Puedes crear plantillas personalizadas para tus tipos de posts personalizados. De la misma forma que los posts y sus archivos pueden visualizarse mediante los archivos de plantilla single.phparchive.php, puedes crear las plantillas:

  • single-{post_type}.php para los posts personalizados individuales.
  • archive-{post_type}.php para sus archivos.

donde {post_type} es el argumento $post_type de la función register_post_type().

Así, para el ejemplo anterior, los archivos serían single-acme_product.phparchive-acme_product.php.

Alternativamente, puedes utilizar la función is_post_type_archive() en cualquier fichero de plantilla, para averiguar si la consulta muestra una página de archivo de un tipo de post dado, y la función post_type_archive_title() para mostrar el título del tipo de post.

 

Buscar por tipo de post

En cualquier fichero de plantilla del sistema del tema de WordPress, puedes crear nuevas consultas para mostrar posts de un tipo de post específico. Esto se hace mediante el argumento post_type del objeto WP_Query:

Es bucle recorre los últimos diez posts tipo product y muestra el título y contenido de ellos uno a uno.

 

Tipos de posts personalizados en la consulta principal de WP

Registrar un tipo de posts personalizados no significa que sean añadidos automáticamente a la consulta principal.

Si quieres que los posts de tu tipo personalizado se muestren en archivos estándar o en tu home page mezclados con otros tipos de posts, utiliza el gancho pre_get_posts.

 

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *