El desarrollo de un sitio web en WordPress puede ser tanto un arte como una ciencia, y la posibilidad de personalizar y manejar los tipos de publicaciones (post types) es un elemento fundamental para proporcionar versatilidad y creatividad en la presentación del contenido. En este contexto, entender cómo crear y adaptar un post type personalizado se convierte en un conocimiento esencial para desarrolladores web.
¿Qué es un post type personalizado?
Los post types personalizados en WordPress permiten expandir la funcionalidad básica del sistema de gestión de contenido al crear tipos de contenido únicos, adaptados específicamente a las necesidades del proyecto. Mientras que los posts y las páginas son tipos de contenido predeterminados en WordPress, los desarrolladores pueden crear tipos de post adicionales, como "Productos", para organiza y mostrar de una manera distinta.
¿Cómo crear un post type personalizado?
Para dar vida a un post type personalizado, es esencial tener claro el esquema de funcionamiento de WordPress y entender algunos de sus componentes claves. El proceso básico es el siguiente:
Crear la función:
En el archivo functions.php, define una nueva función.
Usa la función register_post_type() que requiere dos argumentos principales: el nombre singular de tu post type (por ejemplo, 'product') y una serie de configuraciones asociadas.
Configurar el post type:
Configura diversas opciones como el nombre en singular, una descripción, y capacidades de soporte como editor, imagen destacada, revisiones, y estados de publicación.
Añade un ícono representativo en el menú usando menu_icon.
Configurar enlaces permanentes:
Después de registrar un nuevo post type, se requiere un ajuste en los enlaces permanentes para asegurar que el sistema actualice correctamente la estructura con el nuevo tipo de contenido.
Personalizar la vista previa en el tema:
Modifica los archivos de plantilla como single-[post_type].php para ajustar cómo se presentan los posts en el frontend.
// Dentro de single-producto.phpif(have_posts()):while(have_posts()):the_post();the_title('<h1>','</h1>');the_content();endwhile;endif;
¿Qué hacer si Gutenberg no se muestra correctamente?
En ocasiones, al implementar un nuevo post type, el editor Gutenberg no aparece automáticamente. Esto puede deberse a configuraciones omitidas en register_post_type:
Asegúrate de que show_in_rest está establecido en true para habilitar el editor de bloques.
¿Cómo mejorar y adaptar el diseño del producto?
Para personalizar la vista de tus productos, puedes trabajar con el archivo de plantilla single-producto.php, ajustando los tamaños de las columnas, añadiendo estilos CSS personalizados, o modificando el HTML según el diseño deseado. Esta libertad creativa te permite adaptar el sitio web exactamente a las expectativas del cliente o negocio.
En resumen, crear y manejar post types personalizados es una habilidad crítica para cualquier desarrollador de WordPress, abriendo un abanico de posibilidades para organizar, personalizar y mostrar contenido de maneras únicas y eficientes. Experimenta, personaliza y lleva tus proyectos al siguiente nivel.
Aquí se resuelve mi duda anterior 😁, en lo personal creo que Gutenberg es un poco confuso. Como dato curioso, para que Guntenberg cree los bloques, usa componentes de React, por lo tanto podemos crear nuestros propios bloques personalizados.
Exacto! Y en el Curso Profesional de WordPress vas poder ver como desarrollarlos! :D
Gracias por el aporte @luisrovez !!!
Buen día,
Reto cumplido:
Genial!👏😀
Vamos con el reto.
Hey! Esta muy bueno, me gustan esos botones. :D
Comparto el reto.
Hasta tiene un input para la cantidad! :D
Reto Cumplido. 😊😊😊
SI NO LES CARGA LA IMAGEN DESTACADA, revisen haber escrito "thumbnail" y no "thumbnails" en el array que está dentro del otro array... :)
gracias bro ese era mi error
Tu cabecera con color claro y texto blanco va en contra de las buenas practicas de IUX, hazle un favor a la humanidad y ponle letras oscuras o fondo oscuro para que sea legible
Comparto cómo quedó con un poco de estilos :)
Muy bueno! :D
Archivo functions.php
functionproductos_type(){ $labels =array('name'=>'Productos','singular_name'=>'Producto','manu_name'=>'Productos',); $args =array('label'=>'Productos','description'=>'Productos de Platzi','labels'=> $labels,'supports'=>array('title','editor','thumbnail','revisions'),'public'=>true,'show_in_menu'=>true,'menu_position'=>5,'menu_icon'=>'dashicons-cart','can_export'=>true,'publicly_queryable'=>true,'rewrite'=>true,'show_in_rest'=>true);register_post_type('producto', $args);}add_action('init','productos_type');
Ingresar producto nuevo> Actualizar los enlaces permanentes> Agregar imagen al producto
Se olvidaron de colocar el enlace que mencionan...Pues con la cantidad de parámetros que se usan para generar nuestro postype es indispensable seguir la documentación.
Es importante que también nosotros nos demos a la tarea de buscar documentación, un talento que ayuda en el futuro. Aquí el link de los tipos de arreglos:
a la hora de agregar la imagen destacada, no me sale la opcion en el panel y cuando agrego un "widget" de imagen me lo divide en una sola columna , alguien sabe a que se debe esto??
hola, ami me pasa lo mismo ¿Pudiste solucionarlo?
Agrega el siguiente action en functions.php
add_action('after_setup_theme','init_template');
Yo estoy haciendo una web de camaras retro
como puedo hacer para tener diversos single, por ejemplo uno standard para el blog, pero asi tambine unos custom con otro layout diferente
Creo recordar que se hace indicando un archivo como single-blog.php, en el codex de wordpress viene indicado como hay que nombrar los archivos para realizar contenido customizado para cada categoría.
La sintaxis necesaria es 'single-slug.php' donde 'slug' es tu custom post type. Asi mismo, sirve para todos los casos 'page-slug' para paginas, 'archive-slug' para los archivos, etc.
La imagen destacada no me carga, sí tengo el
add_action('after_setup_theme','init_template');
Alguien ha podido encontrar una solución?
Dentro de la funcion init template debes agregar el soporte:
add_theme_support('post-thumbnails');
En mi caso tenia dos errores: en el array $label menu_name y en $args support, cuando debió ser manu_name y supports respectivamente
Hola. me surgio un problema al ingresar la funcion "productos_type", podrian ayudarme porfavor. Dejo el problema y el codigo, gracias de antemano.
Lo que aparece al ingresar al navegador:
Fatal error:UncaughtTypeError:call_user_func_array():Argument #1($function) must be a valid callback,function"products_type" not found or invalid function name inD:\xampp\htdocs\platzigifts\wp-includes\class-wp-hook.php:292Stack trace: #0D:\xampp\htdocs\platzigifts\wp-includes\class-wp-hook.php(316):WP_Hook->apply_filters(NULL,Array) #1D:\xampp\htdocs\platzigifts\wp-includes\plugin.php(484):WP_Hook->do_action(Array) #2D:\xampp\htdocs\platzigifts\wp-settings.php(560):do_action('init') #3D:\xampp\htdocs\platzigifts\wp-config.php(90):require_once('D:\\xampp\\htdocs...') #4D:\xampp\htdocs\platzigifts\wp-load.php(37):require_once('D:\\xampp\\htdocs...') #5D:\xampp\htdocs\platzigifts\wp-admin\admin.php(34):require_once('D:\\xampp\\htdocs...') #6D:\xampp\htdocs\platzigifts\wp-admin\edit.php(10):require_once('D:\\xampp\\htdocs...') #7{main} thrown inD:\xampp\htdocs\platzigifts\wp-includes\class-wp-hook.php on line 292Ha habido un error crítico en esta web.Por favor, comprueba la bandeja de entrada del correo electrónico del administrador de tu sitio para obtener instrucciones.
Las lineas que agregue al archivo functions.php
functionproductos_type(){ $labels =array('name'=>'Productos','singular_name'=>'Producto','menu_names'=>'Productos',); $args =array('label'=>'Productos','description'=>'Productos de Platzi','labels'=> $labels,'supports'=>array('title','editor','thumbnail','revisions'),'public'=>true,'show_in_menu'=>true,'menu_position'=>5,'menu_icon'=>'dashicons-cart','can_export'=>true,'publicly_queryable'=>true,'rewrite'=>true,'show_in_rest'=>true,);register_post_type('producto', $args );}add_action('init','products_type');
Hola, estas llamando a la función products_type pero no la tienes definida, debes corregirla solo agregando la funcion deseade que es productos_type()