Custom Post Types y Taxonomías en WordPress


¿Qué son los custom post types?

Los Custom Post Types son tipos de entrada personalizadas que puedes agregar a tu panel de WordPress. Por ejemplo, WordPress por defecto trae como tipo de entrada:

  • Entradas
  • Páginas
  • Adjuntos
  • Revisión
  • Menú de navegación

Toda la información al respecto la tienes en https://codex.wordpress.org/Post_Types.

Configurando las etiquetas para mostrar el Custom Post Type

todo este código irá en el functions.php de nuestro tema:

// La función no será utilizada antes del 'init'.
add_action( 'init', 'my_custom_init' );

/* He aquí cómo crear sus etiquetas personalizadas */
function my_custom_init() {
	$labels = array(
	'name' => _x( 'Proyectos', 'post type general name' ),
        'singular_name' => _x( 'Proyecto', 'post type singular name' ),
        'add_new' => _x( 'Añadir nuevo', 'book' ),
        'add_new_item' => __( 'Añadir nuevo Proyectos' ),
        'edit_item' => __( 'Editar Proyectos' ),
        'new_item' => __( 'Nuevo Proyectos' ),
        'view_item' => __( 'Ver Proyectos' ),
        'search_items' => __( 'Buscar Proyectos' ),
        'not_found' =>  __( 'No se han encontrado Proyectos' ),
        'not_found_in_trash' => __( 'No se han encontrado Proyectos en la papelera' ),
        'parent_item_colon' => ''
    );
 
    // Creamos un array para $args
    $args = array( 'labels' => $labels,
        'public' => true,
        'publicly_queryable' => true,
        'show_ui' => true,
        'query_var' => true,
        'rewrite' => true,
        'capability_type' => 'post',
        'hierarchical' => false,
        'menu_position' => null,
        'supports' => array( 'title', 'editor', 'author', 'thumbnail', 'excerpt', 'comments' )
    );
 
    register_post_type( 'proyectos', $args ); /* Registramos y a funcionar */
}

Algunas funciones para controlar los Custom Post Types

Lo siguiente es un listado de las funciones que nos facilita WordPress con las que podremos controlar nuestros Custom Post Types:

  • post_type_exists() – Revisa si existe un custom post type.
  • is_post_type_hierarchical( $post_type ) – Cuándo el tipo de post es jerárquico. Si retorna falso es que no lo es.
  • get_post_type( $post ) – Recupera el tipo de entrada del artículo en cuestión o un post específico.
  • get_post_type_object( $post_type )
    Recupera un objeto del tipo de entrada por nombre.
  • get_post_types( $post ) – Obtiene una lista de todos los tipos de entrada.
  • register_post_type() – Registra un nuevo tipo de entrada. No utilizar antes del init.
  • get_post_type_capabilities() – Crea un objeto con todos los permisos de los tipos de entrada personalizados.

Post Types Generator

Otros añadidos que debes conocer para los Custom Post Types

categorías y etiquetas

// Lo enganchamos en la acción init y llamamos a la función create_book_taxonomies() cuando arranque
add_action( 'init', 'create_book_taxonomies', 0 );	 
 
// Creamos dos taxonomías, género y autor para el custom post type "libro"
function create_book_taxonomies() {
	// Añadimos nueva taxonomía y la hacemos jerárquica (como las categorías por defecto)
	$labels = array(
	'name' => _x( 'Géneros', 'taxonomy general name' ),
	'singular_name' => _x( 'Género', 'taxonomy singular name' ),
	'search_items' =>  __( 'Buscar por Género' ),
	'all_items' => __( 'Todos los Géneros' ),
	'parent_item' => __( 'Género padre' ),
	'parent_item_colon' => __( 'Género padre:' ),
	'edit_item' => __( 'Editar Género' ),
	'update_item' => __( 'Actualizar Género' ),
	'add_new_item' => __( 'Añadir nuevo Género' ),
	'new_item_name' => __( 'Nombre del nuevo Género' ),
); 
register_taxonomy( 'genero', array( 'libro' ), array(
	'hierarchical' => true,
	'labels' => $labels, /* ADVERTENCIA: Aquí es donde se utiliza la variable $labels */
	'show_ui' => true,
	'query_var' => true,
	'rewrite' => array( 'slug' => 'genero' ),
));

Con esto ya tenemos la primera taxonomía, a continuación vamos con la segunda:

// Añado otra taxonomía, esta vez no es jerárquica, como las etiquetas.
$labels = array(
	'name' => _x( 'Escritores', 'taxonomy general name' ),
	'singular_name' => _x( 'Escritor', 'taxonomy singular name' ),
	'search_items' =>  __( 'Buscar Escritores' ),
	'popular_items' => __( 'Escritores populares' ),
	'all_items' => __( 'Todos los escritores' ),
	'parent_item' => null,
	'parent_item_colon' => null,
	'edit_item' => __( 'Editar Escritor' ),
	'update_item' => __( 'Actualizar Escritor' ),
	'add_new_item' => __( 'Añadir nuevo Escritor' ),
	'new_item_name' => __( 'Nombre del nuevo Escritor' ),
	'separate_items_with_commas' => __( 'Separar Escritores por comas' ),
	'add_or_remove_items' => __( 'Añadir o eliminar Escritores' ),
	'choose_from_most_used' => __( 'Escoger entre los Escritores más utilizados' )
);
 
register_taxonomy( 'escritor', 'libro', array(
	'hierarchical' => false,
	'labels' => $labels, /* ADVERTENCIA: Aquí es donde se utiliza la variable $labels */
	'show_ui' => true,
	'query_var' => true,
	'rewrite' => array( 'slug' => 'escritor' ),
));
} // Fin de la función create_book_taxonomies().

Algunas funciones útiles para administrar las taxonomías

Al igual que con los custom post types, existen funciones que nos permiten manejar nuestras taxonomías (sean personalizadas o no):

  • get_taxonomies() – Obtienes una lista de las taxonomías registradas.
  • get_object_taxonomies($object_type) – Retorna todas las taxonomías que pertenecen al $object_type especificado.
  • get_taxonomy() – Recupera la taxonomía especificada.
  • taxonomy_exists() – Comprueba que la taxonomía existe. Falso si no existe.
  • is_taxonomy_hierarchical() – Nos dice si una taxonomía es jerárquica. Falso en caso negativo.
  • register_taxonomy – Crea o modifica un objeto de taxonomía. No usar antes del init.

Podéis verlas todas en el Codex, concretamente aquí.


Abrir chat
1
Hola 👋
¿En qué puedo ayudarte? Si necesitas algo estoy por aquí para charlar por WhatsApp, no te quedes con la duda. 🤔
Powered by