Tipos de posts personalizados filtrados por taxonomía usando REST API v2
Tengo la siguiente situación:
Creé un tipo de Post personalizado llamado Works. Y también le adjunté una taxonomía personalizada llamada Work Types
Aquí está el código
function rk_work_post_type(){
$labels = array(
'name' => 'Trabajo',
'singular_name' => 'Trabajo',
'add_new' => 'Añadir Trabajo',
'all_items' => 'Todos los Trabajos',
'add_new_item' => 'Añadir Trabajo',
'edit_item' => 'Editar Trabajo',
'new_item' => 'Nuevo Trabajo',
'view_item' => 'Ver Trabajo',
'search_item' => 'Buscar Trabajo',
'not_found' => 'No se encontraron elementos',
'not_found_in_trash' => 'No se encontraron elementos en la papelera',
'parent_item_colon' => 'Elemento Padre'
);
$args = array(
'labels' => $labels,
'public' => true,
'has_archive' => true,
'publicly_queryable' => true,
'query_var' => true,
'rewrite' => true,
'capability_type' => 'post',
'hierarchical' => false,
'supports' => array(
'title',
'editor',
'excerpt',
'thumbnail',
'revisions',
'comments',
),
// 'taxonomies' => array('category', 'post_tag'),
'menu_icon' => 'dashicons-hammer',
'menu_position' => 5,
'exclude_from_search' => false,
'show_in_rest' => true,
'rest_base' => 'works',
'rest_controller_class' => 'WP_REST_Posts_Controller',
);
register_post_type('work',$args);
}
add_action('init','rk_work_post_type');
function rk_work_taxonomies() {
//añadir nueva taxonomía jerárquica
$labels = array(
'name' => 'Tipos de Trabajo',
'singular_name' => 'Tipo de trabajo',
'search_items' => 'Buscar Tipos',
'all_items' => 'Todos los Tipos de Trabajo',
'parent_item' => 'Tipo Padre',
'parent_item_colon' => 'Tipo Padre:',
'edit_item' => 'Editar Tipo de Trabajo',
'update_item' => 'Actualizar Tipo de Trabajo',
'add_new_item' => 'Añadir Nuevo Tipo de Trabajo',
'new_item_name' => 'Nombre del Nuevo Tipo de Trabajo',
'menu_name' => 'Tipos de Trabajo'
);
$args = array(
'hierarchical' => true,
'labels' => $labels,
'show_ui' => true,
'show_admin_column' => true,
'query_var' => true,
'rewrite' => array( 'slug' => 'work_type' ),
'show_in_rest' => true,
'rest_base' => 'work_type',
'rest_controller_class' => 'WP_REST_Terms_Controller',
);
register_taxonomy('work_type', array('work'), $args);
}
add_action( 'init' , 'rk_work_taxonomies' );
El problema que tengo es que no puedo encontrar una manera de obtener los Works filtrados por Work Type usando REST API v2
Leí que después de alguna actualización de WordPress, la consulta de filtro fue eliminada de la REST API. Entonces, ¿cuál es la forma correcta de hacer esto ahora? ¿Pueden proporcionar algún ejemplo por favor?
¡Gracias de antemano!

para recuperar por slug solo agrega _slug al final del slug de la categoría. work_type_slug={slug}

Agregar _slug al final del parámetro no funciona para mí. Estoy usando WordPress 4.9.8, REST API v2. Sin embargo, usar el id funciona perfectamente.
Si deseas obtener el término único desde la REST API basado en el slug, entonces usa slug={term_slug} por ejemplo:
example.com/wp-json/wp/v2/works?slug=work-type-slug

Para que funcione, necesitas 'show_in_rest' => true,
en register_taxonomy
.

Instalé el plugin WP REST Filter y luego puedo filtrar publicaciones por el slug de categoría como:
http://www.example.com/wp-json/wp/v2/my_custom_posts?filter[my_custom_taxomony]=my_custom_taxonomy_slug
en tu caso:
http://www.example.com/wp-json/wp/v2/works?filter[work_type]=building

Si realmente necesitas usar el slug como parámetro en la URL, puedes añadir un filtro personalizado. Echa un vistazo al hook rest_{$this->post_type}_query.
Puedes hacer algo como esto (post_type: work, taxonomy: work_type):
/**
* Filtra el tipo de post 'work' por el slug de 'work_type'
*
* @param array $args
* @param WP_Rest_Rquest $request
* @return array $args
*/
function filter_rest_work_query( $args, $request ) {
$params = $request->get_params();
if(isset($params['work_type_slug'])){
$args['tax_query'] = array(
array(
'taxonomy' => 'work_type',
'field' => 'slug',
'terms' => explode(',', $params['work_type_slug'])
)
);
}
return $args;
}
// Añade el filtro
add_filter( "rest_work_query", 'filter_rest_work_query', 10, 2 );
y luego
https://example.com/wp-json/wp/v2/work?work_type_slug=slug01,slug02

Usar este código solo funcionará si no hay otras taxonomías siendo pasadas. (Establecer $args['tax_query'] explícitamente de esta manera sobrescribirá cualquier otro valor de tax_query que pueda estar definido). Necesitarás verificar si el array está definido y extenderlo si es así, en lugar de sobrescribirlo.

https://developer.wordpress.org/reference/functions/get_posts/
Este enlace es útil
Incluye el método get_posts() Que se utiliza para obtener publicaciones
Pasa el tipo de publicación como argumento
