REST API中的自定义分类无效

时间:2021-03-09 作者:stoi2m1

我有一个自定义API端点来查询WPMU中另一个博客的数据,自定义端点会加载,我可以返回一些数据,但我需要的特定查询会返回0篇文章。

我有131篇这种自定义帖子类型的帖子,其中11篇与自定义分类法相关。

我可以用这个查询所有131篇帖子。

switch_to_blog(1);

$args = array(
    \'post_type\' => \'podcast\',
    \'posts_per_page\' => -1,
);
$query = new WP_Query( $args );
$posts = $query->posts;

restore_current_blog();

return $posts // returns 131 posts of custom post type
但是,当我应用自定义分类查询时,得到0个结果

switch_to_blog(1);

$args = array(
    \'post_type\' => \'podcast\',
    \'posts_per_page\' => -1,
    \'tax_query\' => array(
        array(
            \'taxonomy\' => \'theme\',
            \'field\'    => \'slug\',
            \'terms\'    => \'my-slug\',
        ),
    ),
);
$query = new WP_Query( $args );
$posts = $query->posts; 

restore_current_blog();

return $posts; // returns 0 posts
然后,我尝试获取自定义帖子类型的条款进行验证invalid taxonomy. 我的自定义分类法似乎没有在REST API中注册。

switch_to_blog(1)

$terms = get_terms( array(
    \'taxonomy\' => \'themes\',
) );
restor_to_current_blog();

return $terms;
其输出为

code    "invalid_taxonomy"
message "Invalid taxonomy."
data    null
我还尝试在没有switch_to_blog 函数并再次获取invalid taxonomy.

我还从函数中删除了自定义帖子类型的注册。php到mu插件,认为这可能是我的每个子博客使用不同主题的问题。但结果仍然是invalid taxonomy.

这是我注册自定义分类法的方式

function my_custom_post_type_and_taxonomy() {

    // Register Custom Taxonomy - theme for posts
    $labels = array(
        \'name\'                       => _x( \'Themes\', \'Taxonomy General Name\', \'text_domain\' ),
        \'singular_name\'              => _x( \'Theme\', \'Taxonomy Singular Name\', \'text_domain\' ),
        \'menu_name\'                  => __( \'Theme\', \'text_domain\' ),
        \'all_items\'                  => __( \'All Themes\', \'text_domain\' ),
        \'parent_item\'                => __( \'Parent Theme\', \'text_domain\' ),
        \'parent_item_colon\'          => __( \'Parent Theme:\', \'text_domain\' ),
        \'new_item_name\'              => __( \'New Theme Name\', \'text_domain\' ),
        \'add_new_item\'               => __( \'Add New Theme\', \'text_domain\' ),
        \'edit_item\'                  => __( \'Edit Theme\', \'text_domain\' ),
        \'update_item\'                => __( \'Update Theme\', \'text_domain\' ),
        \'view_item\'                  => __( \'View Item\', \'text_domain\' ),
        \'separate_items_with_commas\' => __( \'Separate themes with commas\', \'text_domain\' ),
        \'add_or_remove_items\'        => __( \'Add or remove themes\', \'text_domain\' ),
        \'choose_from_most_used\'      => __( \'Choose from the most used themes\', \'text_domain\' ),
        \'popular_items\'              => __( \'Popular Items\', \'text_domain\' ),
        \'search_items\'               => __( \'Search themes\', \'text_domain\' ),
        \'not_found\'                  => __( \'Not Found\', \'text_domain\' ),
        \'no_terms\'                   => __( \'No items\', \'text_domain\' ),
        \'items_list\'                 => __( \'Items list\', \'text_domain\' ),
        \'items_list_navigation\'      => __( \'Items list navigation\', \'text_domain\' ),
    );
    $args = array(
        \'labels\'                     => $labels,
        \'hierarchical\'               => true,
        \'public\'                     => true,
        \'show_ui\'                    => true,
        \'show_admin_column\'          => true,
        \'show_in_nav_menus\'          => true,
        \'show_tagcloud\'              => true,
    );
    register_taxonomy( \'theme\', array( \'post\', \'podcast\' ), $args );    
}
add_action( \'init\', \'my_custom_post_type_and_taxonomy\', 0 );

1 个回复
最合适的回答,由SO网友:stoi2m1 整理而成

使用此REST API端点https://example.com/wp-json/wp/v2/taxonomies 我发现我有3种分类法可用post_tag, categoryseries.

看过之后series, 一个自定义的帖子类型,我知道我的代码中缺少了一些东西。

我终于找到了一篇文章Working with Custom Post Types in WP-API v2 这描述了我的问题。显然,在API V2中,为REST API添加了一些新参数。我需要的具体论点是\'show_in_rest\' => true, 通过将其添加到参数数组中,解决了我的问题。

$args = array(
    \'labels\'       => $labels,
    ...
    \'show_in_rest\' => true,
    ...
);
register_taxonomy( \'theme\', array( \'post\', \'resource\', \'podcast\' ), $args );
有关这方面的更多信息,请参见法典https://developer.wordpress.org/reference/functions/register_taxonomy/