【问题标题】:Wordpress Rest API: How to query Category Name by id in AngularjsWordpress Rest API:如何在 Angularjs 中按 id 查询类别名称
【发布时间】:2016-10-24 15:20:17
【问题描述】:

我正在开发我的第一个应用程序,基于连接到 Wordpress REST Api 的 Ionic 和 Angularjs。

我需要显示类别名称,但 WP-API V2 帖子列表 (example.com/wp-json/wp/v2/posts) 只有类别 ID。

为了获得类别,我需要向 example.com/wp-json/wp/v2/categories 发出第二个 http 请求

这是我在控制器中加载所有帖子的功能,它工作正常。

 var postsApi = $rootScope.url + 'posts';      
$scope.loadPosts = function() {

// Get all of our posts
DataLoader.get( postsApi ).then(function(response) {

  $scope.posts = response.data;

  $log.log(postsApi, response.data);


}, function(response) {
  $log.log(postsApi, response.data);
});

但是我如何实现解析类别 id,我从 example.com/wp-json/wp/v2/posts 和 example.com/wp-json/wp/v2/categories 获得类别名称无需在每个循环中都发出 http 请求?

【问题讨论】:

    标签: angularjs json wordpress rest ionic-framework


    【解决方案1】:

    您可能需要使用register_new_field() 来修改来自 api 的响应。

    Modify response from wp-api v2

    在您的自定义函数中,您将能够在一次 api 调用中检索帖子类别并将其嵌入到 json 响应中。

    编辑:

    这是一个工作示例,将帖子类别和标签链接添加到 api 响应,仅适用于 get 请求:

    add_action( 'rest_api_init', 'wp_rest_insert_tag_links' );
    
    function wp_rest_insert_tag_links(){
    
        register_rest_field( 'post',
            'post_categories',
            array(
                'get_callback'    => 'wp_rest_get_categories_links',
                'update_callback' => null,
                'schema'          => null,
            )
        );
        register_rest_field( 'post',
            'post_tags',
            array(
                'get_callback'    => 'wp_rest_get_tags_links',
                'update_callback' => null,
                'schema'          => null,
            )
        );
    }
    
    function wp_rest_get_categories_links($post){
        $post_categories = array();
        $categories = wp_get_post_terms( $post['id'], 'category', array('fields'=>'all') );
    
    foreach ($categories as $term) {
        $term_link = get_term_link($term);
        if ( is_wp_error( $term_link ) ) {
            continue;
        }
        $post_categories[] = array('term_id'=>$term->term_id, 'name'=>$term->name, 'link'=>$term_link);
    }
        return $post_categories;
    
    }
    function wp_rest_get_tags_links($post){
        $post_tags = array();
        $tags = wp_get_post_terms( $post['id'], 'post_tag', array('fields'=>'all') );
        foreach ($tags as $term) {
            $term_link = get_term_link($term);
            if ( is_wp_error( $term_link ) ) {
                continue;
            }
            $post_tags[] = array('term_id'=>$term->term_id, 'name'=>$term->name, 'link'=>$term_link);
        }
        return $post_tags;
    }
    

    【讨论】:

    • 如果您能告诉我我是如何通过类别实现这一目标的,我将不胜感激
    【解决方案2】:

    我相信您唯一的方法是更改​​您的 API,使其在第一次调用时返回您需要的所有内容,而不仅仅是 id,或者在 API 中创建新服务。

    如果您发送一个 id 并接收帖子的数据,则不能在一次调用中对各种帖子执行此操作。

    【讨论】:

    • 我想创建一个数组并存储“example.com/wp-json/wp/v2/categories”中的所有类别并按类别ID获取名称?如果可能的话
    • 是的,你可以这样做,但是我虽然你问的是对 API 进行多次调用的问题仍然存在。您可以以某种方式将数据存储在数组中,例如 categories[0].id= //id,然后将结果写入 categories[0].name = //name
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-12
    • 1970-01-01
    • 2017-05-31
    • 2017-03-29
    • 1970-01-01
    • 2017-08-02
    相关资源
    最近更新 更多