Creación de tipos de publicaciones personalizadas
Publicado: 2016-08-23WordPress no ha sido " sólo una plataforma de blogs " desde hace bastante tiempo. Una de las características clave que lo ayudó a transformarse en un sistema de administración de contenido (CMS) adecuado son los tipos de publicaciones personalizadas .
Este es el primer artículo de una serie de 3 partes sobre el tema de los tipos de publicaciones personalizadas (CPT). Estos son los temas que trataremos en los próximos dos:
- Taxonomías personalizadas
- Mostrar tipos de publicaciones personalizadas (plantillas y consultas)
Pero por ahora, echemos un vistazo más de cerca a los tipos de publicaciones personalizadas y cómo configurarlas.
¿Qué es un tipo de publicación personalizada?
De forma predeterminada, WordPress utiliza estos tipos de publicaciones:
- Correo
- Página
- Adjunto archivo
- Revisión
- Opción del menú
Entonces, ¿qué es un tipo de publicación personalizada? Un tipo de publicación personalizada es básicamente una publicación de WordPress con parámetros personalizados definidos (campos personalizados, categoría personalizada/estructura de etiquetas, …). Los ejemplos clásicos de tipos de publicaciones personalizadas son: libros, reseñas, testimonios, miembros del equipo, portafolios, etc. Pero puedes usarlo para cualquier cosa que indique el tipo de contenido que creas.
¿Por qué usarías uno?
Simplemente puede usar publicaciones regulares de WP y usar categorías y etiquetas para separar los diferentes "tipos de publicaciones". Pero esto no es lo ideal y puede generar complicaciones en el futuro. Aquí hay algunas razones por las que es posible que desee utilizar un tipo de publicación personalizada:
- Si desea separar algún contenido de otros tipos de publicaciones disponibles en WordPress
- Necesita algunos campos personalizados que sean exclusivos del contenido que desea publicar
- Debe mostrar el contenido de manera diferente a otros tipos de publicaciones (como publicaciones o páginas)
Digamos que estás escribiendo un blog de comida. Sueles publicar críticas de restaurantes, pero también te gustaría publicar tus propias recetas. Las recetas serían un tipo de publicación personalizada perfecta , porque probablemente necesites tener un diseño diferente al de una publicación normal. Quizás también algunos campos personalizados, como ingredientes, por ejemplo. Con la introducción de un CPT de recetas, la sección del blog solo contendría su publicación normal y sus recetas tendrían su propia sección (página propia de archivo de recetas). Esto facilitaría las cosas para los visitantes que solo quieren ver tus recetas.
En esta serie de artículos, crearemos el CPT de testimonios para nuestro tema Shaka. Digamos que un usuario quiere tener una página donde pueda mostrar todos los testimonios de clientes. Quiere agregar algunos campos personalizados a este tipo de publicación personalizada y también quiere un diseño diferente para mostrar estos testimonios. Primero echemos un vistazo a cómo registrar un tipo de publicación personalizada.
¿Cómo se puede crear un tipo de publicación personalizada?
Hay dos formas de crear un nuevo tipo de publicación personalizada.
La primera opción es usar un complemento que registrará el tipo de publicación personalizada por usted. Este método es bueno para usuarios que no están familiarizados con el código PHP. Solo ingresa los detalles necesarios y el complemento hace el resto.
El segundo método es registrar manualmente el tipo de mensaje personalizado. Eso significa que tienes que escribir algo de código, pero no entres en pánico, es bastante simple y también te mostraré un buen truco.
Cree un tipo de publicación personalizada con un complemento: la manera fácil
Si desea agregar rápida y fácilmente un tipo de publicación personalizada a su sitio, debe usar un complemento que ofrezca dicha funcionalidad. Probablemente el complemento más popular para hacer eso es Custom Post Type UI, es gratis y fácil de usar. Vamos a configurarlo:
- Instale y active el complemento de interfaz de usuario de tipo de publicación personalizada desde su panel de wp-admin,
- Una vez que active el complemento, el elemento del menú de administración de la interfaz de usuario de CPT estará disponible. Vaya a la interfaz de usuario de CPT -> Agregar/Editar tipos de publicación,
- Aquí encontrará muchas configuraciones que puede aplicar para personalizar su CPT. No los analizaremos todos en detalle en este artículo. Pero hay un icono de información sobre herramientas junto a cada etiqueta de configuración para explicar lo que hace cada configuración. Configuremos las cosas que necesitamos para nuestro caso de uso (CPT testimonial),
- Ingrese el slug: testimonios, etiqueta plural: Testimonios y la etiqueta singular: Testimonial,
- Puede hacer clic en el botón Editar etiquetas adicionales para establecer etiquetas más precisas. Pero podemos omitir esto y regresar si vemos un problema más adelante,
- Todas las configuraciones predeterminadas están bien para nuestro caso de uso, solo agregaremos el Soporte para campos personalizados (seleccione la casilla de verificación Campos personalizados en la sección Soportes),
- Haga clic en Agregar tipo de publicación para crear el tipo de publicación personalizado.
Tan pronto como creamos el tipo de publicación personalizada, aparece un nuevo elemento de menú del panel Testimonials wp-admin. Ahora podemos crear nuevos testimonios con todos los campos que se seleccionaron cuando creamos el tipo de publicación personalizada (Título, Editor, Imagen destacada y Campos personalizados).
También podríamos establecer una taxonomía para este tipo de publicación personalizada, pero lo cubriremos en el próximo artículo.
Cree un tipo de publicación personalizado manualmente: codificación involucrada
Podría preguntarse: si puede crear un tipo de publicación personalizada con un complemento, ¿por qué alguien querría crearlo manualmente, con código?
La capacidad de crear uno con un complemento es ciertamente muy conveniente , pero hay casos en los que desearía hacerlo a través de un código. Por ejemplo, si está desarrollando un sitio para su cliente y no desea que el cliente pueda cambiar esta configuración, o si no desea instalar un complemento más en su sitio. Además, si desea crear un tema (o un tema secundario) para usar en varios sitios, es más fácil tener el tipo de publicación personalizado registrado en el código que repetir los pasos del complemento para cada sitio. Hay algunos pros y contras para cada método, por lo que debe decidir qué es lo mejor en su caso.
El código para crear un tipo de publicación personalizada se puede colocar directamente en un tema (en functions.php ). O bien, puede crear un nuevo complemento y colocar el código CPT allí. Esta es también una pregunta divisiva en la comunidad de WordPress. Un lado dice que debe estar ubicado en el complemento , de modo que si cambia el tema, los datos del CPT se mantienen (pero la salida no tiene estilo y no se ve bien en el nuevo tema). Y el otro lado piensa que es mejor poner el código CPT directamente en el tema , porque es específico del tema y también tiene un estilo específico para este tema.

Personalmente, creo que siempre es mejor separar el estilo (tema) de la funcionalidad (complementos), por lo que crear un nuevo complemento para el registro de CPT es una mejor opción. Es más fácil agregar estilo al nuevo tema para que la salida de CPT se vea bien que perder los datos de CPT debido al cambio a un nuevo tema.
Registre un tipo de publicación personalizada con código
Prometí un buen truco, ¿no? Bueno, en realidad no necesitas escribir código para poder registrar un tipo de publicación personalizada a través del código. Esto puede sonar extraño, pero es cierto. Puede usar esta herramienta en generatewp.com para generar el código necesario para el registro de CPT. Todo lo que debe hacer es ingresar algunos datos y generar el código. Hice esto para nuestro caso de uso de testimonios y esto es lo que salió:
// Register Custom Post Type function custom_post_type_testimonials() { $labels = array( 'name' => _x( 'Testimonials', 'Post Type General Name', 'text_domain' ), 'singular_name' => _x( 'Testimonial', 'Post Type Singular Name', 'text_domain' ), 'menu_name' => __( 'Testimonials', 'text_domain' ), 'name_admin_bar' => __( 'Testimonials', 'text_domain' ), 'archives' => __( 'Item Archives', 'text_domain' ), 'parent_item_colon' => __( 'Parent Item:', 'text_domain' ), 'all_items' => __( 'All Items', 'text_domain' ), 'add_new_item' => __( 'Add New Item', 'text_domain' ), 'add_new' => __( 'Add New', 'text_domain' ), 'new_item' => __( 'New Item', 'text_domain' ), 'edit_item' => __( 'Edit Item', 'text_domain' ), 'update_item' => __( 'Update Item', 'text_domain' ), 'view_item' => __( 'View Item', 'text_domain' ), 'search_items' => __( 'Search Item', 'text_domain' ), 'not_found' => __( 'Not found', 'text_domain' ), 'not_found_in_trash' => __( 'Not found in Trash', 'text_domain' ), 'featured_image' => __( 'Featured Image', 'text_domain' ), 'set_featured_image' => __( 'Set featured image', 'text_domain' ), 'remove_featured_image' => __( 'Remove featured image', 'text_domain' ), 'use_featured_image' => __( 'Use as featured image', 'text_domain' ), 'insert_into_item' => __( 'Insert into item', 'text_domain' ), 'uploaded_to_this_item' => __( 'Uploaded to this item', 'text_domain' ), 'items_list' => __( 'Items list', 'text_domain' ), 'items_list_navigation' => __( 'Items list navigation', 'text_domain' ), 'filter_items_list' => __( 'Filter items list', 'text_domain' ), ); $args = array( 'label' => __( 'Testimonials', 'text_domain' ), 'labels' => $labels, 'supports' => array( 'title', 'editor', 'thumbnail', 'custom-fields' ), 'hierarchical' => false, 'public' => true, 'show_ui' => true, 'show_in_menu' => true, 'menu_position' => 5, 'show_in_admin_bar' => true, 'show_in_nav_menus' => true, 'can_export' => true, 'has_archive' => true, 'exclude_from_search' => false, 'publicly_queryable' => true, 'capability_type' => 'page', ); register_post_type( 'testimonials', $args ); } add_action( 'init', 'custom_post_type_testimonials' );
… Un código PHP perfectamente válido que puedes usar en tus proyectos. Como se discutió anteriormente, puede colocar este código en un complemento recién creado, o puede colocarlo en el archivo functions.php del tema. En aras de la simplicidad, opté por este último. Puse este código en el archivo functions.php del tema, y apareció el menú Testimonials wp-admin y ahora puedo crear nuevos testimonios (al igual que en el método de complemento anterior).
También puede configurar un ícono diferente para su tipo de publicación personalizada, que se mostrará en el menú de wp-admin. Solo necesita agregar esta línea en la matriz $args: 'menu_icon' => 'dashicons-businessman'
. Puede encontrar una lista de todos los íconos posibles aquí: WordPress Dashicons. (Gracias a Alexander por este consejo).
Echemos un vistazo más de cerca al código:
- Todo el proceso de registro de CPT está encapsulado en la función
custom_post_type_testimonial()
, que está enlazada con el ganchoinit
WP al final del fragmento con esta línea de código:add_action( 'init', 'custom_post_type_testimonials' );
. Esta llamadaadd_action
es la llamada final que pone todo en movimiento y hace que WordPress haga su magia. - El primer bloque de código dentro de la función es una matriz de datos llamada
$labels
, que contiene las cadenas de traducción para este tipo de publicación personalizada. - El segundo bloque es una matriz de argumentos utilizados para el registro de CPT, aquí puede definir todas las configuraciones para el CPT. Qué campos debería admitir el CPT, si debería estar visible públicamente, la posición del menú wp-admin, si debería tener una página de archivo, etc. Para ver el conjunto completo de opciones, visite esta página del códice de WP.
- La última línea de la función es
register_post_type( 'testimonials', $args );
. Esto registrará el tipo de publicación personalizada 'testimonios' con la configuración que especificamos en los$args
anteriores.
¡Eso es! Hemos registrado un tipo de publicación personalizada con un poco de código PHP.
La única mejora que cambiaría en el código generado sería usar funciones de internacionalización de escape. Entonces, en lugar de _x()
y __()
, usaría esc_html_x()
y esc_html__()
. Siempre es bueno escapar de los valores de salida, incluso las cadenas de traducción, pero ese es un tema para otra publicación de blog.
Próximo artículo de la serie: Cómo crear una taxonomía personalizada.