【问题标题】:WP Rest API + AngularJS : How to grab Featured Image for display on page?WP Rest API + AngularJS:如何获取特色图片以显示在页面上?
【发布时间】:2017-08-11 18:19:32
【问题描述】:

我正在通过 HTTP REST API 插件(此 wordpress 插件:http://v2.wp-api.org/)访问 Wordpress 数据。我知道如何获取我的帖子标题,但是如何使用此插件显示与该帖子相关的特色图片?我的测试显示了帖子标题和特色图片 ID,但我不确定如何显示实际图片。 Test Example.

这是我的代码:

    <div ng-app="myApp">
    <div ng-controller="Ctrl">
        <div ng-repeat="post in posts | limitTo: 1">
            <h2 ng-bind-html="post.title.rendered"></h2>

            <p>{{ post.featured_image }}</p>

        </div>
    </div>
</div>


<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.3.15/angular-sanitize.min.js"></script>

<script>

var app = angular.module('myApp', ['ngSanitize']);
    app.controller('Ctrl', function($http, $scope) {
        $http.get("http://ogmda.com/wp/wp-json/wp/v2/posts").success(function(data) {
        $scope.posts = data;
    });
});

</script>

【问题讨论】:

    标签: angularjs wordpress rest wp-api


    【解决方案1】:

    要获得特色图片响应,请在查询字符串中添加 _embed。示例:

    http://demo.wp-api.org/wp-json/wp/v2/posts/?_embed

    然后,使用 _embedded['wp:featuredmedia'][0].media_details.sizes.thumbnail.source_url

    在返回的 JSON 响应中访问特色图片>
    var app = angular.module('myApp', ['ngSanitize']);
        app.controller('Ctrl', function($http, $scope) {
            $http.get("http://ogmda.com/wp/wp-json/wp/v2/posts?_embed").success(function(data) {
            $scope.posts = data;
    
            var firstFeaturedImageUrl = $scope.posts[0]._embedded['wp:featuredmedia'][0].media_details.sizes.thumbnail.source_url;
        });
    });
    

    【讨论】:

      【解决方案2】:

      更好的方法是将特色图片的 URL 集成到 json 响应中,这样您就可以在一个请求中获取所有内容。您可以添加以下代码(在 your-theme/functions.php 中)来实现:

      //Get image URL
      function get_thumbnail_url($post){
          if(has_post_thumbnail($post['id'])){
              $imgArray = wp_get_attachment_image_src( get_post_thumbnail_id( $post['id'] ), 'full' ); // replace 'full' with 'thumbnail' to get a thumbnail
              $imgURL = $imgArray[0];
              return $imgURL;
          } else {
              return false;
          }
      }
      //integrate with WP-REST-API
      function insert_thumbnail_url() {
           register_rest_field( 'post',
                                'featured_image',  //key-name in json response
                                 array(
                                   'get_callback'    => 'get_thumbnail_url',
                                   'update_callback' => null,
                                   'schema'          => null,
                                   )
                               );
           }
      //register action
      add_action( 'rest_api_init', 'insert_thumbnail_url' );
      

      那么在你看来,你可以使用 {{ post.featured_image }}

      注意:要获得不同尺寸的相同图像,请使用上述wp_get_attachment_image_src 函数,该函数接受任何有效的图像尺寸,或以像素为单位的宽度和高度值数组作为其第二个参数。

      【讨论】:

        【解决方案3】:

        我找到了一个非常简单的方法。

        只需下载名为 Better Rest API Featured Image 的新 Wordpress 插件。此插件会在包含可用图像大小和 url 的帖子对象中添加一个 better_featured_image 字段,让您无需再次请求即可获取此信息。

        【讨论】:

        • @sakarya 是的,它确实支持自定义帖子类型,请务必在自定义帖子类型的初始化中设置 'show_in_rest'=> true。这里有更详细的方法v2.wp-api.org/extending/custom-content-types
        • 我正在使用自定义值编写自定义端点。当我的应用完成后,我将分享我的代码。
        【解决方案4】:

        你可以用这个&lt;img ng-src="{{post.better_featured_image.source_url}}" /&gt;替换&lt;p&gt;{{ post.featured_image }}&lt;/p&gt;

        【讨论】:

          猜你喜欢
          • 2011-07-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-10-29
          • 2019-06-26
          • 1970-01-01
          相关资源
          最近更新 更多