WordPress viene con cinco tipos de post por defecto: post
page
attachment
revision
, y menu
.
Mientras desarrollas tu plugin, puede que necesites crear tu propio tipo de contenido específico: por ejemplo, productos para un sitio web de comercio electrónico, tareas para un sitio web de aprendizaje electrónico o películas para un sitio web de reseñas.
Usando Custom Post Types, puedes registrar tu propio tipo de post. Una vez que se registra un tipo de post personalizado, se obtiene una nueva pantalla administrativa de nivel superior que se puede utilizar para gestionar y crear posts de ese tipo.
Para registrar un nuevo tipo de post, se utiliza la función register_post_type().
Recomendamos poner los tipos de post personalizados en un plugin en lugar de un tema. Esto asegura que el contenido del usuario sigue siendo portátil incluso si se cambia el tema.
El siguiente ejemplo mínimo registra un nuevo post type, Productos, que se identifica en la base de datos como wporg_product
.
function wporg_custom_post_type() {register_post_type('wporg_product',array('labels' => array('name' => __('Products', 'textdomain'),'singular_name' => __('Product', 'textdomain'),),'public' => true,'has_archive' => true,));}add_action('init', 'wporg_custom_post_type');
Ampliar código fuente completoContraer código fuente completo
Por favor, visita la página de referencia de register_post_type() para ver la descripción de los argumentos.
Atención:
Debes llamar a register_post_type()
antes del hook admin_init
y después del hook after_setup_theme
. Un buen gancho a utilizar es el init
action hook.
Mejores prácticas de nombramiento #Mejores prácticas de nombramiento
Es importante que antepongas a tus funciones e identificadores de tipo de entrada un prefijo corto que corresponda a tu plugin, tema o sitio web.
Atención:
Asegúrate de que tu identificador de tipo de post personalizado no supera los 20 caracteres, ya que la columna post_type
en la base de datos es actualmente un campo VARCHAR de esa longitud.
Atención:
Para asegurar la compatibilidad con el futuro, no use wp_ como su identificador – está siendo usado por el núcleo de WordPress.
Atención:
Si tu identificador es demasiado genérico (por ejemplo: «product
«), puede entrar en conflicto con otros plugins o temas que hayan elegido utilizar ese mismo identificador.
Resolver los identificadores de tipo de post duplicados no es posible sin desactivar uno de los tipos de post en conflicto.
Top
URLs #URLs
Un tipo de post personalizado obtiene su propio slug dentro de la estructura de URL del sitio.
Un post de tipo wporg_product
utilizará la siguiente estructura de URL por defecto: http://example.com/wporg_product/%product_name%
.
wporg_product
es el slug de su tipo de post personalizado y %product_name%
es el slug de su producto particular.
El permalink final sería: http://example.com/wporg_product/wporg-is-awesome
.
Puedes ver el permalink en la pantalla de edición de tu custom post type, al igual que con los post types por defecto.
Un slug personalizado para un tipo de post personalizado #Un slug personalizado para un tipo de post personalizado
Para establecer un slug personalizado para el slug de tu tipo de post personalizado todo que tienes que hacer es añadir una clave => par de valores al rewrite
clave en el register_post_type()
array de argumentos.
Ejemplo:
function wporg_custom_post_type() {register_post_type('wporg_product',array('labels' => array('name' => __( 'Products', 'textdomain' ),'singular_name' => __( 'Product', 'textdomain' ),),'public' => true,'has_archive' => true,'rewrite' => array( 'slug' => 'products' ), // my custom slug));}add_action('init', 'wporg_custom_post_type');
Ampliar código fuente completoColapsar código fuente completo
Lo anterior dará como resultado la siguiente estructura de URL: http://example.com/products/%product_name%
Atención:
Usar un slug genérico como products
puede potencialmente entrar en conflicto con otros plugins o temas, así que intenta usar uno que sea más específico para tu contenido.
A diferencia de los identificadores de tipo de post personalizados, el problema del slug duplicado puede resolverse fácilmente cambiando el slug de uno de los tipos de post en conflicto.
Si el autor del plugin incluyó una llamada apply_filters()
en los argumentos, esto se puede hacer programáticamente anulando los argumentos enviados a través de la función register_post_type()
.