Desde la versión 2.9, WordPress ha introducido la capacidad de usar tipos de publicación personalizados. Ahora, con la versión 3.0, las cosas van un poco más allá con la opción de crear paneles para tus tipos de publicación personalizados. En este tutorial, te mostraremos cómo implementar tipos de publicación personalizados en tu sitio en tu sitio de WordPress.
Creación de tipos de publicación personalizados – Uso de plugins
A partir de la versión 3.0, WordPress no tiene una interfaz de usuario (UI) integrada para crear tipos de publicación personalizados. Solo hay dos opciones que podemos usar para crear tipos de publicación personalizados: plugins o codificarlos directamente en el archivo functions.php de tu tema. Primero, veamos cómo podemos usar plugins para crear tipos de publicación personalizados.
Interfaz de tipo de publicación personalizado

Custom Post Type UI es un plugin desarrollado por Brad Williams de WebDevStudios que te permite crear fácilmente tipos de publicación y taxonomías personalizadas. Una de las características más geniales de este plugin es que genera un código para crear tipos de publicación personalizados, para que luego puedas pegarlo en el archivo functions.php de tu tema. Una de las peculiaridades de este plugin es la incapacidad de compartir taxonomías entre todos tus tipos de publicación.

Desde el panel de Custom Post Type UI, haz clic en "Agregar nuevo".

A continuación, se te presentan algunas opciones para completar. El “Nombre del tipo de publicación” es lo que WordPress utilizará para consultar todas las publicaciones de dicho post_type. La “Etiqueta” es lo que se mostrará en la barra lateral de tu Panel, al igual que el menú regular de “Publicaciones”. Si expandes las “Ver opciones avanzadas”, verás algunas opciones más que puedes configurar. La mayoría se explican por sí mismas, como “Público” y “Mostrar interfaz de usuario”. La primera, cuando se establece en verdadero, permite que el menú del tipo de publicación personalizado se muestre en la barra lateral, y la otra (mostrar interfaz de usuario), cuando se establece en verdadero, genera el panel del menú.
“Reescribir” es lo que permite que el tipo de publicación personalizado utilice URLs de WordPress amigables para SEO (Enlaces permanentes). El “Slug de reescritura personalizado” se puede establecer en lo que desees. WordPress usará este slug para generar los enlaces permanentes. Entonces, si tenemos ejemplo.com con un slug de reescritura personalizado de “películas”, tu enlace permanente del tipo de publicación personalizado se vería como ejemplo.com/peliculas
La función “Variable de consulta” de WordPress te permite consultar las publicaciones de tu tipo de publicación personalizado. Entonces, si usamos el ejemplo dado anteriormente, para acceder a una publicación con el título, Mi Primera Publicación de Película, que está escrita bajo el post_type Películas, podemos ingresar ejemplo.com/?peliculas=mi-primera-publicacion-de-pelicula. Así que la variable de consulta se ve así: ?nombretipodepublicacion
Finalmente, puedes elegir las diferentes características compatibles con tu tipo de publicación personalizado, como miniaturas/imagen destacada y extractos.

Creación de tipos de publicación personalizados – Uso del archivo Functions.php

Si prefieres usar tipos de publicación personalizados sin un plugin, simplemente agrega el siguiente código al archivo functions.php de tu tema:
// Creates Movies post type
register_post_type('movies', array(
'label' => 'Movies',
'public' => true,
'show_ui' => true,
'capability_type' => 'post',
'hierarchical' => false,
'rewrite' => array('slug' => 'movies'),
'query_var' => true,
'supports' => array(
'title',
'editor',
'excerpt',
'trackbacks',
'custom-fields',
'comments',
'revisions',
'thumbnail',
'author',
'page-attributes',)
) );
Analicemos el código.
register_post_type( $post_type, $args ): Esta función acepta dos parámetros, $post_type o el nombre del tipo de publicación, y $args, una matriz de argumentos.
etiqueta: Nombre plural dado al tipo de publicación que se muestra en la barra lateral del panel de administración.
público: verdadero/falso. Permite que la interfaz de usuario administrativa se pueble con publicaciones de este tipo.
mostrar_ui: verdadero/falso. Muestra u oculta una interfaz de usuario predeterminada para administrar este tipo de publicación.
tipo_capacidad: Predeterminado: post Tipo de publicación a utilizar para verificar las capacidades de lectura, edición y eliminación.
jerárquico: Si el tipo de publicación es jerárquico.
reescribir: verdadero/falso. Predeterminado: verdadero Si se ingresa el argumento slug, el nombre del slug se antepone a las publicaciones.
variable_consulta: verdadero/falso Establece el nombre del tipo de publicación como una variable de consulta.
soporta: Predeterminado: título y autor Establece diferentes características de soporte que permite el tipo de publicación.
Visita el WordPress Codex para más información sobre register_post_type().
Mostrar publicaciones de tipo de publicación personalizado
Para mostrar las publicaciones de tu tipo de publicación personalizado, agrega los siguientes códigos en el loop. Reemplaza "name" con el nombre de tu tipo de publicación. Nota: No tienes que agregar los tipos de publicación personalizados en tu archivo index.php. Puedes crear una página personalizada de WordPress y ejecutar la siguiente consulta dentro de el Loop.
$query = new WP_Query( 'post_type=name' );
Para mostrar publicaciones de más de un tipo de publicación, cambia el código anterior por el siguiente. Cambia "movies" por el nombre de tu tipo de publicación personalizado.
$query = new WP_Query( array( 'post_type' => array( 'post', 'movies' ) ) );
El código anterior mostrará todas las publicaciones del tipo de publicación regular (post) y del tipo de publicación personalizado, "movies".
Eso es todo. Esperamos que este tutorial te haya sido útil y no olvides publicar tus preguntas en los comentarios.
Gaby Izarra
Ok, tengo un pequeño problema y tal vez puedas ayudarme... aquí está mi página del foro de Wordpress. Estoy tratando de adaptar una lista de eventos de un tema diferente al que estoy usando.
http://wordpress.org/support/topic/php-query-for-custom-post-type-not-displaying-creating-theme-event-list?replies=1#post-5587886
dave
He creado dos tipos de publicación personalizados, pero solo el primero se muestra en mi página. He agregado esto
$query = new WP_Query( array( ‘post_type’ => array( ‘post’, ‘featured’, ‘latest’ )
) );
dentro de mi archivo de loop, pero nada. ¿cómo puedo resolver esto?
Jeroen
¿Sabes cómo puedo agregar tipos de publicación personalizados a la página de archivo del blog y al feed RSS?
Soporte de WPBeginner
Sí, tenemos guías sobre ambos temas. Por favor, consulta cómo crear una página de archivo de tipos de publicación personalizados en WordPress, y cómo agregar tipos de publicación personalizados a tu feed RSS principal de WordPress.
Administrador
wizdom networks
¡Primero, excelente artículo! Estoy trabajando en la implementación de tipos de publicación personalizados a través de código. Cabe destacar que la documentación actual de WordPress (http://codex.wordpress.org/Function_Reference/query_posts) especifica que la función query_posts generalmente no debe usarse y que el hook pre_get_posts se usa para modificar las consultas.
“Se recomienda encarecidamente que utilice el filtro pre_get_posts en su lugar, y modifique la consulta principal comprobando is_main_query”
De nuevo, excelente artículo, gracias por compartir.
Salud.
Soporte de WPBeginner
Gracias Wisdom, hemos actualizado el artículo con WP_Query
Administrador
Thom Abbott
¡GUAU… para un novato que usa WP para administrar su sitio web, esto no es material para principiantes de ninguna manera! Probablemente tendré que contactar a algún desarrollador de WP para configurar mi página personalizada que quiero.
Personal editorial
Los Tipos de Publicación Personalizados fueron creados para que los desarrolladores extiendan la funcionalidad de WordPress. Nunca fue pensado para principiantes.
Administrador
mark shirley
query_posts( ‘post_type=movies’);
?>
No puedo hacer que esto funcione en la plantilla de página de mi tema secundario twentyeleven, ¿dónde debería ponerlo para obtener una página de películas? En realidad, lo que realmente quiero son los extractos. Gracias Mark
muntzdesigns
Al usar este plugin y agregar el código anterior a loop.php, perderás el control sobre las categorías... mi tipo de publicación personalizado se agrega a todas las categorías... ¿alguna ayuda?
wpbeginner
@muntzdesigns Es por eso que tienes múltiples bucles... tu bucle principal de blog, archive.php, category.php, etc. En un sitio diseñado a medida, tendrás que utilizar eso para que esto funcione correctamente.
muntzdesigns
@wpbeginner@muntzdesigns Entonces, ¿simplemente agrego el código anterior a todos los archivos? (loop.php, archive.php y category.php). Gracias.
wpbeginner
@muntzdesigns No. Solo agregas el código en las páginas principales. El problema que tenías era que los tipos de publicación personalizados se agregaban a todas las categorías... Necesitas agregar el código anterior solo al bucle principal. Luego crea un nuevo bucle para el archivo de categoría, el archivo de taxonomía, el archivo de autor...
PriyaVerma
Buen artículo, muchas gracias
dazuaga
No, me equivoqué.
dazuaga
Olvídalo: %category%/%type%/%postname% Creo que eso funcionará
dazuaga
¿Qué hace exactamente el Identificador de Tipo de Contenido en el plugin CMS Press? Estoy buscando una manera de anteponer la barra diagonal de la categoría al tipo de publicación personalizado (ejemplo.com/categoria/tipo_publicacion/nombre_publicacion), pero al usar %category%/%identifier%/%postname% en Identificador de Tipo de Contenido se transforma automáticamente de esta manera: %categoryidentifierpostname
murphymakes
Información excelente como de costumbre. Gracias
whimba
I like Custom Post Type UI. It’s light and easy to use but is limited in functionality. So I created my own – http://wordpress.org/extend/plugins/mp-former/. You can try it
simplywendz
Este es un gran tutorial para crear una publicación personalizada en WordPress. Los pasos se dan con detalles que uno podría seguir fácilmente. ¡Esto es de gran, gran ayuda!
hoss9009
¡Yo también me he estado preguntando eso!
Copero
Vaya, tenía todo lo de CMS Press funcionando, pero no podía averiguar cómo hacerlo aparecer en las publicaciones. Supongo que ha existido por tanto tiempo que todos asumen que ya debería saberse. Respuesta perfecta para que mi Tipo de Publicación Personalizado aparezca en el Bucle.
Jerry Craig
Copero
Noel Boaz
Gracias, esto me ayudó mucho a poner mi tipo de publicación personalizado en la página principal. Definitivamente guardado en marcadores, gracias.
Ed
He probado el plugin, muy impresionante. Sin embargo, estoy tratando de que aparezca un atributo de página de los atributos de 'Páginas' de mis temas, es decir, la capacidad de usar una opción de página de ancho completo. ¿Debo asumir que su plugin solo extrae atributos de los diseños de tipo de publicación en lugar de los diseños de tipo de página? Todo lo que quiero es tener la opción de configurar una publicación con una plantilla completa y predeterminada.
Gran trabajo, sin embargo, lo usaré mucho.
Salud
Ed
Simon
He probado la forma del plugin pero no pude hacer que la publicación apareciera. Tal vez sea porque no pude encontrar el archivo loop.php.
De todos modos, muchas gracias, estoy bastante seguro de que funcionará pronto.
Quiero decir que una cosa súper increíble que sería genial hacer con WordPress es tener la posibilidad de crear vistas personalizadas de contenido al igual que en Drupal con el módulo de vistas.
Sé que hay un plugin llamado Pods y Pods CMS que se supone que hace eso posible. Quizás podrías pedirle al desarrollador que ayude en una publicación en wpbeginner si no lo entiendes en absoluto como yo. Estoy seguro de que a mucha gente le encantaría esto. Presentar vistas es lo que realmente hace que un CMS sea un CMS verdaderamente dinámico después de todo.
Personal editorial
Es posible que el archivo loop.php no exista en tu tema. El bucle también se puede encontrar en tu index.php, archive.php, category.php, etc. También puedes crear un bucle personalizado si lo deseas.
Administrador
Peter
Buen tutorial, gracias por compartir.
Tengo una pregunta sobre esto.
Creé un tipo de publicación personalizado a través de functions.php (un calendario) que tiene una meta box personalizada en la interfaz de administración. Esta meta box utiliza jQuery en un campo.(http://jqueryui.com/demos/datepicker/).
Para que este datepicker funcione, necesito incrustar los scripts necesarios.
add_action(‘admin_enqueue_scripts’,’enqueue_my_scripts’);
funciona pero mis scripts se cargan en toda la interfaz de administración. (lo que interfiere con el jquery predeterminado de la administración de WP)
Así que lo que necesito es el hook para mi tipo de publicación personalizado.
esto:
add_action(‘register_post_type’,’enqueue_my_scripts’);
no funciona porque register_post_type no es un hook.
Entonces, ¿cuál es el hook para un post_type personalizado?
Amanda
Podrías intentar agregar lo siguiente a la definición de tu función antes de registrar el script:
if(is_admin()) return;Así que algo como:
function some-function(){
// no necesitamos esto en las páginas de administración, así que...
if(is_admin()) return;
// registramos el script personalizado
wp_enqueue_script( 'some-script' );
}
Evan
¿Cómo hago para que cada tipo de contenido aparezca en el loop? Quiero decir, es casi como Tumblr. Si publico una imagen... necesito personalizar el código en el loop, lo mismo si publico un enlace.
Personal editorial
Como puedes ver en la publicación, hay una opción para mostrar tanto tipos de publicación personalizados como publicaciones dentro de un solo bucle...
Administrador
Michael
No logro que el bucle funcione para consultar publicaciones de mi tipo personalizado. Tu ejemplo parece bastante sencillo, así que probé lo siguiente: $var = query_posts( ‘post_type=sponsor’);
Entonces comencé un bucle
while ($var ->have_posts()) : $var ->the_post();
Haz cosas
endwhile;
esto devuelve un error de php:
Fatal error: Call to a member function have_posts() on a non-object in single-sponsor.php on line 22
la línea 22 es la línea con el bucle while.
¿Ideas? ¿Qué estoy haciendo mal?
Romero
He intentado crear una etiqueta para un campo personalizado, y cuando uso get_the_tags dentro del bucle de tipo personalizado, no imprime nada.
¿Alguna sugerencia?
Jan
Estoy muy emocionado con esta nueva función ^-^ Hiciste un buen video. Aunque en tu ejemplo, ¿por qué usar tipos de publicación personalizados y no simplemente inventar una categoría de libros y películas para las publicaciones? De esa manera te ahorras toda la molestia de un tipo de publicación personalizado.
Personal editorial
Primero, te permite organizar las cosas de manera diferente. Segundo, puedes tener un panel de escritura completamente diferente con opciones diferentes. Permite muchas más personalizaciones...
Administrador
Sandra
¡Gracias por este gran artículo! Soy un principiante real en wp, y tal vez puedas ayudarme con esta pregunta:
¿Es posible mostrar los archivos de un tipo de publicación personalizado en la barra lateral como se puede hacer usando el plugin "display archives by cat" de kwebble?
Personal editorial
Sí, es posible mostrar tipos de publicación personalizados como archivos. Simplemente crea un bucle personalizado en la barra lateral para mostrar publicaciones o categorías de un tipo de publicación específico.
Administrador
lukeMV
¿Hay guías fáciles de entender sobre cómo agregar opciones a las publicaciones personalizadas? Por ejemplo, si una película es drama, comedia, terror... tener esas opciones como casillas de verificación DENTRO del panel de edición de publicaciones personalizadas. No parece encontrar una guía o un plugin para eso.
Paul
Hola, ese fue un gran artículo. Esperaba que supieras la respuesta a mi pregunta.
En las últimas dos líneas tienes:
esto devuelve todas las publicaciones y tipos de publicación llamados movies.
¿Sabes cómo devolver ambos tipos de publicación llamados 'movies' y publicaciones en la categoría 'movies', pero excluir todas las demás publicaciones que no tengan esta categoría??
Personal editorial
Usarías los parámetros de categoría para query_posts – http://codex.wordpress.org/Function_Reference/query_posts
Administrador
Walter
¿Puedes dar un paso atrás: ¿Por qué necesito tipos de publicación personalizados en primer lugar? ¿Cuál es el caso de uso?
Personal editorial
Los tipos de publicación personalizados son buenos para los usuarios que usan WordPress para algo más que un blog, por ejemplo, un CMS. Digamos que quieres tener un sitio que tenga tu portafolio y tu blog. Obviamente, no quieres que tus blogs se vean igual que tu portafolio. Ahí es donde los tipos de publicación personalizados resultan útiles. Esta es una característica muy versátil para llevar WordPress al siguiente nivel. Para el usuario promedio de blogs, probablemente no necesiten tipos de publicación personalizados.
Administrador
Tracy B.
De acuerdo, pero todavía estoy tratando de entender la diferencia entre esto y simplemente categorizar cosas. He hecho muchos sitios para personas donde páginas separadas hacen cosas como listar solo la categoría de "eventos actuales" y otra la categoría de "proyectos" o lo que sea. ¿Cómo es esto mejor?
Personal editorial
Esto es mejor en términos de organización. Puedes tener taxonomías personalizadas, paneles de escritura, etc. para un tipo de publicación específico.
Chris
No puedo evitar pensar que esto habría sido más útil si hubieras mostrado algo fuera de lo común con los tipos de publicación, en lugar de usar el viejo "películas y libros".
¿Qué tal un sideblog usando tipos de publicación, o algo un poco más práctico? Todo esto hace es reiterar lo que el Codex de WP eventualmente tendrá, si es que ya no está ahí.
Personal editorial
Lamentamos que pienses así, Chris. El Codex de WP no tendrá un video que te muestre cómo hacer esto. No importa qué nombres usemos para los tipos de publicación personalizados, la idea es cómo agregarlos. No crearemos un sitio extraordinario solo para escribir una publicación sobre tipos de publicación personalizados. Si buscas ese conocimiento, probablemente sea mejor que lo hagas tú mismo. Este blog todavía tiene que satisfacer las necesidades de los usuarios de nivel principiante, por eso compartimos el método del plugin.
Administrador
Kevin Elliott
¿Funcionará esto en WordPress 2.9 o es solo para 3.0?
Intenté usar la versión 3.0, pero ocurrió una rareza donde ninguno de mis plugins se activaba, incluso los que decían que se activaban. ¡Fue muy extraño!
-Kevin
Personal editorial
Esto funcionaría con la versión 3.0, así que úsalo solo en la 3.0. Intenta reinstalar WordPress 3.0, tenemos varios sitios funcionando con él.
Administrador
Marc
Acabo de ver el video…
¿Es cierto que necesitamos editar archivos php (= codificar directamente) para que todo funcione?
Personal editorial
No, tienes que hacer una cosa o la otra. En nuestro video, mostramos ambas maneras. Puedes hacer la manera de codificación directa o la manera del plugin.
Administrador
Marc
Allright, I see, thnx!
Entonces supongo que empezaste por la manera de codificación directa. En ese momento, al ver solo todo el asunto del código, simplemente me rendí. Por lo tanto, supongo que no vi la manera del plugin…
Rilwis
Muy buen artículo. El plugin Custom Post Type UI tiene opciones muy similares al código PHP puro para registrar tipos de publicación, lo cual es genial para los desarrolladores.
Gracias por introducir muchos plugins útiles para trabajar con tipos de publicación personalizados.
Kaye Media
Gran artículo, esperando con ansias Wp3 =)
Bryan
Me alegra que Wordpress haya integrado tipos de publicación personalizados directamente en el framework de wp. Sin embargo, no veo cómo es mejor que usar plugins ya disponibles como Magic Fields o Flutter. Con esos plugins obtienes el mismo efecto además de campos personalizados fáciles de configurar con muchos tipos diferentes y flexibilidad en cómo ingresar y mostrar tus datos. ¿wp 3.0 soporta algo así de inmediato?
Personal editorial
Puedes crear una interfaz de usuario para campos personalizados y casi cualquier cosa en el backend con Tipos de Publicación Personalizados. Tienes razón en que esos plugins lo hacen muy fácil para los usuarios, pero si alguno de esos plugins falla en el desarrollo, entonces no te queda otra opción.
Administrador
Bryan
Justo. He jugado un poco con la beta, pero no tanto como debería, supongo. Sería emocionante si fuera más en esa dirección. Como me he vuelto experimentado usando esos plugins, casi no hago un sitio ahora sin uno
Así que sería genial si todas esas herramientas estuvieran disponibles y se manejaran dentro de la aplicación original. Puedo ver que conduce a una mejor gestión del backend y anima a más personas a contribuir en lugar de a un grupo más pequeño que apoya un plugin en particular.
Ian
Creo que han dejado intencionalmente parte del código de tipos de publicación personalizados como código. Para permitir que el usuario promedio tenga que lidiar con él.
Abdul Wahid
Este es un artículo increíble
ravalde
No puedo hacer que ninguna taxonomía se muestre en twentyeleven, ni puedo encontrar un tutorial que me muestre cómo de principio a fin, todos parecen centrarse en twentyten y el loop