wordpress rest api v2 how to list taxonomy terms?

后端 未结 7 1839
情歌与酒
情歌与酒 2021-02-15 11:23

i am new to v2, i use v1 for long time, currently upgrade to v2, i try to get all the terms belong to specific custom taxonomy.

In v1 i can do this to get terms /taxonom

相关标签:
7条回答
  • 2021-02-15 11:52

    Taxonomy terms are simply called this way:

    https://yoursite.com/wp-json/wp/v2/the-taxonomy-slug
    

    For instance, to answer your question:

    https://yoursite.com/wp-json/wp/v2/location_category
    

    From terminal:

    curl -X GET -i http://www.example.com/wp-json/wp/v2/location_category
    
    0 讨论(0)
  • 2021-02-15 11:54

    Seems some confusion for some devs even for me.

    Correct URL is https://example.com/wp-json/wp/v2/{your_taxonomy}

    Not https://example.com/wp-json/wp/v2/taxonomies/{your_taxonomy}

    "/taxonomies" not required

    0 讨论(0)
  • 2021-02-15 11:55

    For custom taxonomies, be sure that you're setting the 'show_in_rest' argument to be true (default is false) in your register_taxonomy() call.

    The register_taxonomy() call is also where you can set the 'rest_base' argument (default will be the taxonomy name, /location_category/ in your example).

    0 讨论(0)
  • 2021-02-15 11:56

    The accepted answer mostly worked for me. This is what I got

    <?php
    // your_theme/functions.php
    /**
     * how to list all taxonomy terms
     */
    class all_terms
    {   
        public function __construct()
        {   
            $version = '2';
            $namespace = 'wp/v' . $version;
            $base = 'all-terms';
            register_rest_route($namespace, '/' . $base, array(
                'methods' => 'GET',
                'callback' => array($this, 'get_all_terms'),
            )); 
        }   
        public function get_all_terms($object)
        {   
            $args = array(
                'public' => true,
                '_builtin' => false
            );  
            $output = 'names'; // or objects
            $operator = 'and'; // 'and' or 'or' 
            $taxonomies = get_taxonomies($args, $output, $operator);
            foreach ($taxonomies as $key => $taxonomy_name) {
                if ($taxonomy_name = $_GET['term']) {
                    $return[] = get_terms(array(
                        'taxonomy' => $taxonomy_name,
                        'hide_empty' => false,
                    )); 
                }   
            }   
            return new WP_REST_Response($return, 200);
        }   
    }
    add_action( 'rest_api_init', get_all_terms);
    ?>
    

    matches the docs more closely https://developer.wordpress.org/reference/functions/get_terms/

    0 讨论(0)
  • 2021-02-15 11:57

    If anyone is reading this in the future, I ran into an issue where the default WP category was outputting a parent key of 0, 1, 2 etc for each term object, which is a problem in itself, but a bigger problem when custom taxonomies do not have this parent value on objects

    To solve this amend the ticked example with this:

        foreach ($taxonomies as $key => $taxonomy_name) {
            if($taxonomy_name = $_GET['term']){
                $return = get_terms( array( 
                    'taxonomy' => $taxonomy_name,
                    'hide_empty' => false,
                ));
            }
        }
    
    0 讨论(0)
  • 2021-02-15 11:58

    end out to write the custom code here

    add blow code to functions.php

      class all_terms
    {
        public function __construct()
        {
            $version = '2';
            $namespace = 'wp/v' . $version;
            $base = 'all-terms';
            register_rest_route($namespace, '/' . $base, array(
                'methods' => 'GET',
                'callback' => array($this, 'get_all_terms'),
            ));
        }
    
        public function get_all_terms($object)
        {
            $return = array();
            // $return['categories'] = get_terms('category');
     //        $return['tags'] = get_terms('post_tag');
            // Get taxonomies
            $args = array(
                'public' => true,
                '_builtin' => false
            );
            $output = 'names'; // or objects
            $operator = 'and'; // 'and' or 'or'
            $taxonomies = get_taxonomies($args, $output, $operator);
            foreach ($taxonomies as $key => $taxonomy_name) {
                if($taxonomy_name = $_GET['term']){
                $return = get_terms($taxonomy_name);
            }
            }
            return new WP_REST_Response($return, 200);
        }
    }
    
    add_action('rest_api_init', function () {
        $all_terms = new all_terms;
    });
    

    and enter url http://youdomain.com/wp-json/wp/v2/all-terms?term=you_taxonomy

    so term = you_taxonomy, will get terms belong to job_category.

    0 讨论(0)
提交回复
热议问题