it-source

wordpress rest api v2 분류법 용어를 나열하는 방법?

criticalcode 2023. 2. 12. 17:59
반응형

wordpress rest api v2 분류법 용어를 나열하는 방법?

v2는 처음이고, v1은 오랫동안 사용하고 있으며, 현재 v2로 업그레이드하고 있으며, 특정 사용자 지정 분류법에 속하는 모든 용어를 가져오려고 합니다.

v1에서는 /taxonomies/location_category/terms를 얻기 위해 이 작업을 수행할 수 있습니다.

그러나 v2 i try / taxonomies / terms 에서는 json 오류 "code" ""rest_no_route" "message" "URL 및 요청 메서드에 일치하는 경로를 찾을 수 없습니다." "data":{"상태":404}

/companies/location_category/만 있으면 분류법에 속하는 용어가 표시되지 않습니다.

구글에서 몇 시간 동안 질문을 검색해도 아무 결과도 나오지 않았습니다. 아무나 도와주십시오. 감사합니다.

결국 여기에 커스텀 코드를 작성하게 된다

블로우 코드를 함수에 추가합니다.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;
});

url을 입력합니다.http://youdomain.com/wp-json/wp/v2/all-terms?term=you_taxonomy

따라서 용어 = you_category는 job_category에 속하는 용어를 가져옵니다.

분류법 용어는 간단히 다음과 같이 불립니다.

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

예를 들어, 질문에 답하려면:

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

터미널에서:

curl -X GET -i http://www.example.com/wp-json/wp/v2/location_category

커스텀 분류법에서는에서 'show_in_rest' 인수를 true로 설정합니다(기본값은 false).

register_taxonomy()call은 'rest_base' 인수를 설정할 수도 있습니다(기본값은 분류법 이름입니다)./location_category/를 참조해 주세요).

TLDR

분류법을 등록할 때 플래그를 사용합니다.그게 다예요.

세부 사항

사용 가능한 분류법 모두 나열

모든 기본 분류법은 REST API를 통해 사용할 수 있습니다.다음 엔드포인트를 사용하여 사용 가능한 모든 분류법 목록을 가져옵니다.

https://exmaple.org/wp-json/wp/v2/taxonomies

그러면 의 각 분류법에 대한 올바른 엔드포인트가 표시됩니다.wp:items태그를 지정합니다(예:

..., "wp:items":[{"href":"https://example.com/wp-json/wp/v2/categories"}], ...
..., "wp:items":[{"href":"https://example.com/wp-json/wp/v2/tags"}], ...

REST 끝점에 새 분류법 추가

분류법이 이 분류법 개요에 없는 경우 호출할 때 REST 엔드포인트를 활성화해야 합니다.인수를 추가하여 이 작업을 수행할 수 있습니다.'show_in_rest' => true:

<php
register_taxonomy( 'location_category', 'post', [
    // ...
    'show_in_rest' => true, // ← make sure you have this line in the taxonomy args!
] );

주의: 를 사용하지 않는 경우show_in_rest그러면 분류법을 블록 편집기("Gutenberg")에서 사용할 수 없습니다.


내장된 로직을 복제하기 위해 커스텀 REST 엔드포인트를 생성하지 않는 것이 좋습니다.
즉, 이러지도 저러지도 말고

받아들여진 답변이 내게는 대부분 효과가 있었다.이게 내가 가진 거야

<?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);
?>

문서와 보다 밀접하게 일치합니다.https://developer.wordpress.org/reference/functions/get_terms/

앞으로 이것을 읽고 있는 사람이 있다면, 나는 기본 WP 카테고리가 각 용어 오브젝트에 대해 0, 1, 2 등의 부모 키를 출력하고 있다는 문제에 부딪혔는데, 그 자체도 문제지만 커스텀 분류법에 오브젝트에 이 부모 값이 없을 경우 더 큰 문제가 된다.

이 문제를 해결하려면 다음과 같이 체크 표시 예를 수정합니다.

    foreach ($taxonomies as $key => $taxonomy_name) {
        if($taxonomy_name = $_GET['term']){
            $return = get_terms( array( 
                'taxonomy' => $taxonomy_name,
                'hide_empty' => false,
            ));
        }
    }

어떤 병사들은 혼란스러운 것 같아 나조차도 마찬가지야

올바른 URL은 https://example.com/wp-json/wp/v2/ {your_buff}입니다.

https://example.com/wp-json/wp/v2/taxonomies/이 아닙니다.{ your _ parames }

"/filecies"는 필수가 아닙니다.

언급URL : https://stackoverflow.com/questions/42462187/wordpress-rest-api-v2-how-to-list-taxonomy-terms

반응형