Entradas y taxonomias (IV) trabajando con tipos de entradas personalizados

Una vez que ya tenemos nuestro tipo de entrada definido, debemos de hacer que se vea donde deseemos, ya que en principio estas entradas se quedan tan solo en el panel de control.

Para ello debemos de volver a utilizar el bucle WP_Query de la siguiente forma:

//preparamos la consulta
$args = array(
	'post_per_page' => '-1',
	'post_type' => 'productos',
	);
$mis_productos = new WP_Query($args);
//creamos el bucle
while ($mis_productos->have_posts()):$mis_productos->the_post();
	?><a href="<?php the_permalink();?>"><?php the_title();?></a><br/>
<?php endwhile;
//restableciendo la consulta
wp_reset_postdata();

De esta forma podemos mostrar nuestras entradas personalizadas de forma rápida y sencilla.

Archivos de plantilla personalizado

Ya hemos visto por encima que podemos configurar el archivo has_archive durante el registro de un tipo de entrada personalizado, creando de este modo un archivo de plantilla que muestra todas las entradas del tipo de entrada personalizado de forma predeterminada.

La plantilla de archivo de un tipo de entrada personalizado debe de tener un nombre con el siguiente formato:

archive-[tipo-entrada].php

De este modo el archivo de plantilla para lo productos que estamos haciendo sería; archive-productos.php, donde se visualizarían todas la entradas del tipo productos.

Del mismo modo que la plantilla de archivos, existe una plantilla para mostrar las entradas de cierto tipo, para ver cada entrada con su contenido de forma independiente, este archivo debe de llamarse:

single-[tipo-entrada].php

De forma análoga a los archivos en nuestro ejemplo se llamaría single-productos.php y sería la plantilla que wordpress abre cuando se va a ver este tipo de entrada.

Aunque volveremos al diseño de las plantilla cuando veamos como hacer un tema más adelante, de momento nos vale con saber los nombres que deben de tener estos archivos.

Funciones especiales de tipos de entrada

WordPress dispone de una serie de funciones especiales para trabajar con los tipos de entradas personalizados, aunque hay algunas más aquí veremos las más comunes.

get_post_types()

Sirve para obtener una lista de entradas registradas, se utiliza de la siguiente forma:

get_post_types( $args, $output, $operator);

Los parametros (opcionales) significan:

  • $args: Una matriz de argumentos que compara el tipo de entrada
  • $output: El tipo de resultado a devolver
  • $operator: El operador que se usará con varios argumentos de $args, el valor determienado por defecto es AND.

De esta forma podemos probar el siguiente código:

$args = array(
	'public' => true,
	'_builtin' => false,
	);

$post_types = get_post_types( $args, 'names', 'and');

foreach ($post_types as $post_type) {
	echo "<p> $post_type </p>";
}

Al principio hemos creado nuestro array de argumentos, donde hemos seleccionado public y _builtin.

  • public solo devuelve los tipos de entrada que se pueden ver de forma pública
  • _builtin se coloca como false para que no nos devuelva los tipos de entradas predeterminados como entradas y páginas.

Hemos establecido el argumento $output para devolver el nombre del tipo de entrada y $operator como and como operador entre los parámetros de $args.

get_post_type()

Determina que tipo de entrada es un fragmento de contenido:

get_post_type($post);

Acepta un único parámetro $post que puede ser un objeto o un ID de una entrada

echo "El tipo de post es: " . get_post_type ($post->ID);

post_type_exist()

Hay ocasiones en las que debemos comprobar si un tipo de entrada existe, esto puede ser debido al uso de algun plugin, tema… por lo que lo primero que debemos de hacer es verificar que el tipo de entrada personalizado existe mediante la función post_type_exist().

Esta función necesita un parámetro obligatorio $post_type, que hace referencia al tipo de entrada que se desea comprobar.

Siguiendo con nuestro ejemplo de los productos podemos verificar si este tipo de entrada existe utilizandoe l siguiente código:

if ( post_type_exists( 'productos' ) ) {
	echo 'Sí existe el tipo de entrada productos';
}

add_post_type_support()

Permite registrar la compatibilidad con determinadas características en un tipo de entrada.

add_post_type_support( $post_type, $supports );

Es muy útil si el tipo de entrada existente no admite una característica que necesitemos. Sus dos paramentos son:

  • $post_type: El nombre del tipo de entrada a la que queremos añadir la compatibilidad
  • $supports: una cadena o array de las características que queremos añadir.

En el siguiente código vamos a hacer que nuestro tipo de entrada productos, suponiendo que no tuviera imágenes ni comentarios, pueda comenzar a tenerlos:

add_post_type_support( 'productos, array('thumbnail', 'comments') );

Esta función es muy útil cuando estamos trabajando con plugins o temas de terceros y en lugar de investigar y cambiar el código que nos ofrecen, lo cual puede ser lento y causar errores, podemos utilizarla en nuestro propio código y añadir las características que necesitemos.

set_post_type()

Esta función sirve para cambiar el tipo de entrada:

set_post_type($post_id, $post_type);

Donde:

  • $post_id: es el id de la entrada que se desea actualizar, naturalmente es un campo obligatorio.
  • $post_type: Es el nombre de entrada al que cambiar la entrada que enviamos en el otro argumento, es opcional y su valor predeterminado es el de post.