¿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:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
// 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.
Otros añadidos que debes conocer para los Custom Post Types
categorías y etiquetas
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<em>// Lo enganchamos en la acción init y llamamos a la función create_book_taxonomies() cuando arranque</em> add_action( 'init', 'create_book_taxonomies', 0 ); <em>// Creamos dos taxonomías, género y autor para el custom post type "libro"</em> <strong>function</strong> create_book_taxonomies() { <em>// Añadimos nueva taxonomía y la hacemos jerárquica (como las categorías por defecto)</em> $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' => <strong>true</strong>, 'labels' => $labels, <em>/* ADVERTENCIA: Aquí es donde se utiliza la variable $labels */</em> 'show_ui' => <strong>true</strong>, 'query_var' => <strong>true</strong>, 'rewrite' => array( 'slug' => 'genero' ), )); |
Con esto ya tenemos la primera taxonomía, a continuación vamos con la segunda:
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
<em>// Añado otra taxonomía, esta vez no es jerárquica, como las etiquetas.</em> $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' => <strong>null</strong>, 'parent_item_colon' => <strong>null</strong>, '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' => <strong>false</strong>, 'labels' => $labels, <em>/* ADVERTENCIA: Aquí es donde se utiliza la variable $labels */</em> 'show_ui' => <strong>true</strong>, 'query_var' => <strong>true</strong>, 'rewrite' => array( 'slug' => 'escritor' ), )); } <em>// Fin de la función create_book_taxonomies().</em> |
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í.