我是v2的新手,我长时间使用v1,目前升级到v2,我尝试将所有条款都归属于特定的自定义分类。
在v1中,我可以这样做以获得条款 /分类/ location_category /术语
但在v2中我试试 /分类/条款 它返回json错误“code”:“rest_no_route”,“message”:“找不到匹配URL和请求方法的路由”,“data”:{“status” :404}}
如果只是/ taxonomies / location_category /它没有显示任何属于分类法的术语。
我在谷歌搜索问题几个小时没有显示任何结果,任何人都可以帮助,谢谢
答案 0 :(得分:7)
最终在这里编写自定义代码
向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;
});
并输入网址http://youdomain.com/wp-json/wp/v2/all-terms?term=you_taxonomy
所以term = you_taxonomy,将获得属于job_category的条款。
答案 1 :(得分:4)
对于自定义分类,post。
register_taxonomy()
调用也是您可以设置'rest_base'参数的地方(默认情况下将是您的示例中的分类名称/location_category/
)。
答案 2 :(得分:2)
分类学术语简称为:
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
答案 3 :(得分:2)
在注册分类法时使用标志 show_in_rest
。仅此而已。
列出所有可用的分类法
所有默认分类法均可通过 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 端点添加新的分类法
如果您的分类法未在此分类法概述中列出,您需要在调用 register_taxonomy
时启用 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”)中不可用。
答案 4 :(得分:0)
被接受的答案大部分对我有用。这就是我得到的
<?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/
答案 5 :(得分:0)
如果将来有人在阅读,我会遇到一个问题,默认的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,
));
}
}
答案 6 :(得分:0)
对于某些开发者甚至对我来说似乎都有些困惑。
正确的网址是 https://example.com/wp-json/wp/v2/{your_taxonomy}
不是 https://example.com/wp-json/wp/v2/taxonomies/{your_taxonomy}
"/taxonomies" 不需要