Tipuri de postări personalizate filtrate după taxonomie folosind REST API v2

2 aug. 2017, 14:54:05
Vizualizări: 29.8K
Voturi: 16

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!

0
Toate răspunsurile la întrebare 4
4
19

Bine, soluția a fost:

example.com/wp-json/wp/v2/works?work_type=10

Aceasta afișează work_types ca id-uri. Puteți vedea id-urile la:

example.com/wp-json/wp/v2/works
2 aug. 2017 15:16:25
Comentarii

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

user254153 user254153
1 sept. 2018 09:13:12

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

Tim Tim
1 oct. 2018 16:49:55

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

That Brazilian Guy That Brazilian Guy
20 mai 2019 18:26:46

@ThatBrazilianGuy poți indica te rog niște documentație despre asta? Tehnica nu pare să funcționeze cu WP 5.3.2

jgangso jgangso
2 ian. 2020 10:09:58
3

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
5 mar. 2019 15:13:35
Comentarii

te rog marchează ca soluție. ;)

DARKVIDE DARKVIDE
5 feb. 2020 14:38:53

Cred că folosirea unui plugin nu este "soluția"

ZecKa ZecKa
29 apr. 2020 11:55:40

Sunt de acord, simpla instalare a unui plugin nu este de obicei soluția atunci când OP postează cod.

Simao Gomes Viana Simao Gomes Viana
2 mai 2024 16:00:57
1

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
29 apr. 2020 11:54:53
Comentarii

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.

Mark Howells-Mead Mark Howells-Mead
16 sept. 2021 15:16:58
0
-1

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

5 mar. 2019 16:09:35