Tipuri de postări personalizate filtrate după taxonomie folosind REST API v2
Am următoarea situație:
Am creat un tip de postare personalizat numit Works. Și i-am atașat o taxonomie personalizată numită Work Types
Iată codul
function rk_work_post_type(){
$labels = array(
'name' => 'Lucrări',
'singular_name' => 'Lucrare',
'add_new' => 'Adaugă Lucrare',
'all_items' => 'Toate Lucrările',
'add_new_item' => 'Adaugă Lucrare',
'edit_item' => 'Editează Lucrare',
'new_item' => 'Lucrare Nouă',
'view_item' => 'Vezi Lucrare',
'search_item' => 'Caută Lucrare',
'not_found' => 'Nu s-au găsit elemente',
'not_found_in_trash' => 'Nu s-au găsit elemente în coș',
'parent_item_colon' => 'Element Părinte'
);
$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() {
//adaugă o nouă taxonomie ierarhică
$labels = array(
'name' => 'Tipuri de Lucrări',
'singular_name' => 'Tip de Lucrare',
'search_items' => 'Caută Tipuri',
'all_items' => 'Toate Tipurile de Lucrări',
'parent_item' => 'Tip Părinte',
'parent_item_colon' => 'Tip Părinte:',
'edit_item' => 'Editează Tip de Lucrare',
'update_item' => 'Actualizează Tip de Lucrare',
'add_new_item' => 'Adaugă Nou Tip de Lucrare',
'new_item_name' => 'Nume Nou Tip de Lucrare',
'menu_name' => 'Tipuri de Lucrări'
);
$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' );
Problema pe care o am este că nu pot găsi o modalitate de a obține Works filtrate după Work Type folosind REST API v2
Am citit că după o anumită actualizare WordPress, interogarea de filtrare a fost eliminată din REST API. Deci care este modalitatea corectă de a face acest lucru acum? Puteți oferi un exemplu vă rog?
Mulțumesc anticipat!

pentru a obține după slug, adaugă _slug la sfârșitul slug-ului categoriei. work_type_slug={slug}

Adăugarea _slug la sfârșitul parametrului nu funcționează pentru mine. Folosesc WordPress 4.9.8, REST API v2. Cu toate acestea, utilizarea ID-ului funcționează perfect.
Dacă dorești să obții un singur termen din REST API bazat pe slug, atunci folosești slug={term_slug} de exemplu:
example.com/wp-json/wp/v2/works?slug=work-type-slug

Pentru a funcționa, ai nevoie de 'show_in_rest' => true,
în register_taxonomy
.

Am instalat plugin-ul WP REST Filter și apoi pot filtra postările după slugul categoriei astfel:
http://www.example.com/wp-json/wp/v2/my_custom_posts?filter[my_custom_taxomony]=my_custom_taxonomy_slug
în cazul tău:
http://www.example.com/wp-json/wp/v2/works?filter[work_type]=building

Dacă chiar trebuie să folosești slug-ul ca parametru URL, poți adăuga un filtru personalizat, aruncă o privire la hook-ul rest_{$this->post_type}_query.
Poți face ceva de genul acesta (post_type: work, taxonomy: work_type):
/**
* Filtrează post type-ul work după slug-ul 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;
}
// adaugă filtrul
add_filter( "rest_work_query", 'filter_rest_work_query', 10, 2 );
și apoi
https://example.com/wp-json/wp/v2/work?work_type_slug=slug01,slug02

Folosirea acestui cod va funcționa doar dacă nu sunt transmise alte taxonomii. (Setarea explicită a $args['tax_query'] în acest fel va suprascrie orice alte valori ale tax_query care pot fi setate.) Va trebui să verificați dacă matricea este definită și să o extindeți dacă este cazul, în loc să o suprascrieți.

https://developer.wordpress.org/reference/functions/get_posts/
Acest link este util
Include metoda get_posts() Care este folosită pentru a obține postări
Transmiteți tipul de postare ca argument
