Custom post type filtrati per tassonomia utilizzando REST API v2
Mi trovo nella seguente situazione:
Ho creato un Custom Post Type chiamato Works. E ho anche collegato ad esso una tassonomia personalizzata chiamata Work Types
Ecco il codice
function rk_work_post_type(){
$labels = array(
'name' => 'Lavoro',
'singular_name' => 'Lavoro',
'add_new' => 'Aggiungi Lavoro',
'all_items' => 'Tutti i Lavori',
'add_new_item' => 'Aggiungi Lavoro',
'edit_item' => 'Modifica Lavoro',
'new_item' => 'Nuovo Lavoro',
'view_item' => 'Visualizza Lavoro',
'search_item' => 'Cerca Lavoro',
'not_found' => 'Nessun elemento trovato',
'not_found_in_trash' => 'Nessun elemento trovato nel cestino',
'parent_item_colon' => 'Elemento Genitore'
);
$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() {
//aggiungi nuova tassonomia gerarchica
$labels = array(
'name' => 'Tipi di Lavoro',
'singular_name' => 'Tipo di Lavoro',
'search_items' => 'Cerca Tipi',
'all_items' => 'Tutti i Tipi di Lavoro',
'parent_item' => 'Tipo Genitore',
'parent_item_colon' => 'Tipo Genitore:',
'edit_item' => 'Modifica Tipo di Lavoro',
'update_item' => 'Aggiorna Tipo di Lavoro',
'add_new_item' => 'Aggiungi Nuovo Tipo di Lavoro',
'new_item_name' => 'Nome Nuovo Tipo di Lavoro',
'menu_name' => 'Tipi di Lavoro'
);
$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' );
Il problema che ho è che non riesco a trovare un modo per ottenere i Works filtrati per Work Type utilizzando REST API v2
Ho letto che dopo alcuni aggiornamenti di WordPress la query di filtro è stata rimossa dalla REST API. Quindi qual è il modo corretto per farlo ora? Potete fornire qualche esempio per favore?
Grazie in anticipo!

per recuperare tramite slug basta aggiungere _slug alla fine dello slug della categoria. work_type_slug={slug}

Aggiungere _slug alla fine del parametro non funziona per me. Sto usando WordPress 4.9.8, REST API v2. Usare l'id funziona benissimo però.
Se vuoi ottenere il singolo termine dalla REST API basandoti sullo slug, allora devi usare slug={term_slug} ad esempio:
example.com/wp-json/wp/v2/works?slug=work-type-slug

Per farlo funzionare, devi avere 'show_in_rest' => true,
in register_taxonomy
.

Ho installato il plugin WP REST Filter e ora posso filtrare i post per slug della categoria in questo modo:
http://www.example.com/wp-json/wp/v2/my_custom_posts?filter[my_custom_taxomony]=my_custom_taxonomy_slug
nel tuo caso:
http://www.example.com/wp-json/wp/v2/works?filter[work_type]=building

Se hai davvero bisogno di utilizzare lo slug come parametro URL, puoi aggiungere un filtro personalizzato. Dai un'occhiata all'hook rest_{$this->post_type}_query
Puoi fare qualcosa del genere (post_type: work, taxonomy: work_type):
/**
* Filtra il post_type work per work_type slug
*
* @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;
}
// Aggiungi il filtro
add_filter( "rest_work_query", 'filter_rest_work_query', 10, 2 );
e poi
https://example.com/wp-json/wp/v2/work?work_type_slug=slug01,slug02

L'utilizzo di questo codice funzionerà solo se non ci sono altre tassonomie passate. (Impostando $args['tax_query'] esplicitamente in questo modo si sovrascriveranno eventuali altri valori di tax_query che potrebbero essere impostati.) Sarà necessario verificare se l'array è definito ed estenderlo in tal caso, anziché sovrascriverlo.

https://developer.wordpress.org/reference/functions/get_posts/
Questo link è utile
Include il metodo get_posts() Che viene utilizzato per ottenere i post
Passa il tipo di post come argomento
