WP API响应上的媒体集图像URL而不是ID

时间:2017-01-19 作者:Al Rosado

我在json响应中得到了这一点

"main_image": 
[
"11125,11122,11123,11127,11128"
],
这些是我帖子的ID,我需要以“缩略图”大小获取每个ID的URL。我没有找到任何解决方案,只有这段代码,但更多的是针对插件的自定义元。

function xxx_past_poss_custom_metadata( $post_response, $post, $context ) {
    $meta = get_post_custom( $post[\'ID\'] );
    $custom_fields = array();
    $xxx_image_gallery = array();

    foreach ( $meta[\'xxx_cmb_image_gallery\'] as $key => $value ) {
        $value = wp_get_attachment_url($value);
        $xxx_image_gallery[ $key ] = $value;
    };

    foreach ( $meta as $key => $value ) {
        // Replace \'xxx_\' with any custom metakey prefix (ie. \'_\' for private metadata\'s)
        if ( \'xxx_\' !== substr( $key, 0, 1 ) ) {
            $custom_fields[ $key ] = $value;
        };
    }

    $post_response[\'xxx_image_gallery\'] = $xxx_image_gallery;
    $post_response[\'custom_fields\'] = $custom_fields;
    return $post_response;
}
add_filter( \'json_prepare_post\', \'xxx_past_poss_custom_metadata\', 10, 3 );
我的meta名为“media\\u gallery”。

任何帮助都将不胜感激。

[更新]

似乎我甚至没有修改json响应,因为我激活了一个插件,关闭它让我在函数中声明了我的meta。php文件,不,我有这个。

add_action(\'rest_api_init\', \'register_custom_fields\', 1, 1);

function register_custom_fields(){

  register_rest_field(
    \'job_listing\',
    \'thumbnail\',
    array(
      \'get_callback\' => \'show_image\'
    )
  );

}

function show_main_image($object, $field_name, $request){
  $custom_fields = get_post_custom($object[\'id\']);
  $main_image = $custom_fields[\'main_image\'];

  return $main_image;
}
我现在可以修改响应,但我仍然无法将所有ID:“111251122111231112711128”转换为URL源。

我的自定义输入保存的图像id如下:“11125111221112311112711128”,所以佩德罗说是真的吗

是一个内部只有一个字符串的数组

我接下来尝试的是:

function show_main_image($object, $field_name, $request){
  $custom_fields = get_post_custom($object[\'id\']);
  $main_image = $custom_fields[\'main_image\'];

  foreach ( $main_image as $key => $value ) {
      $imagesID = explode(\',\',$value);
      foreach ($imagesID as $id => $value) {
        $result = wp_get_attachment_url($value);
        $custom_fields[ $id ] = $result;
      }
  };
  $image_urls = array();

  return $result;
}
但仍然没有运气,现在“main\\u image”端点似乎为空。

2 个回复
SO网友:Al Rosado

这是实现这一目标的正确方法:

function show_main_image($object, $field_name, $request){
    $custom_fields = get_post_custom($object[\'id\']);
    $main_image = $custom_fields[\'main_image\'];
    $arregloimg = explode(\',\',$main_image[0]);

    $image_urls = array();
    foreach ( $arregloimg as $key => $value ) {
        $image_urls[] = wp_get_attachment_url($value,\'thumbnail\');
    };

    return $image_urls;
}

SO网友:Pedro Coitinho

根据你的评论,我认为你需要的是wp_get_attachment_image_src.

Wordpress将附件(如图像)保存为一种帖子类型。可能看起来很傻,但这意味着它保存了关于它的各种元信息,例如不同的大小、标题等。因此,每个图像都会得到一个帖子ID。

因此,假设您有这个从JSON解析的数组:

$main_image = array( 11125, 11122, 11123, 11127, 11128 );
(请注意,JSON似乎返回的是一个内部只有一个字符串的数组,而不是多个整数)

您只需请求缩略图大小的图像URL:

$image_urls = array();

foreach ( $main_image as $image_id ) {
    $image_urls[] = wp_get_attachent_image_src( $image_id, \'thumbnail\' );
}
现在$image_urls 已填充。。。图像URL:)

这就是你要找的吗?

相关推荐

Use wget to find used images

我正在寻找方法来清理一个站点的图像目录,该站点已经被未使用的图像和缩略图超载。是否可以使用wget只下载站点上html页面引用的图像?我注意到可以浏览下载文件夹并查看列出的文件,所以我假设直接的wget-r将下载这些文件。如何使用wget,但不包括对上传目录进行爬网?