Можно ли обслуживать изображения с помощью конечной точки Wordpress Rest API на основе идентификатора вложения?
Я имею в виду, что если в браузере была вставлена следующая ссылка, я должен получить реальное изображение вместо ответа JSON.
http://demo.dev/wp-json/custom/v1/image/80
Мне это нужно для REST-полной темы Wordpress, основанной на плагине Vue.js и Metabox.io с надстройкой mb REST API. Мои метабоксы содержат много повторяющихся вложенных групп и выводят в массив только идентификаторы изображений.
Я добавил конечную точку в functions.php:
add_action( 'rest_api_init', function () {
register_rest_route( 'custom/v1', '/image/(?P<id>\S+)', [
'methods' => WP_REST_Server::READABLE,
'callback' => 'custom_get_image',
'args' => [
'id'
],
] );
} );
if ( !function_exists('custom_get_image') ){
function custom_get_image($data){
$id="";
$src= get_template_directory_uri().'/img/placeholder.png';
if ( isset($data['id']) ){
$image = wp_get_attachment_image_src($data["id"], 'medium');
if($image){
$src=$image[0];
}
}
return $src;
}
}
В настоящее время я решил проблему, создав дополнительный компонент vue, который вызывает API и вставляет URL-адрес файла. Тем не менее, я хотел иметь конечную точку API, которую можно добавлять непосредственно в img "src" или div "background-image" без дополнительного вызова ajax.
<template>
<img :src="src">
</template>
<script>
import axios from 'axios';
export default {
props: ['id'],
data: function() {
return {
src: 'http://demo.dev/wp-content/themes/vue-theme/static/img/placeholder.jpg',
};
},
methods: {
getSrc(id) {
//var id = 83;
var endpoint = 'http://demo.dev/wp-json/custom/v1/image/';
var url = endpoint + id;
axios
.get(url)
.then(response => {
this.src = response.data;
})
.catch(error => {});
},
},
mounted: function() {
this.$nextTick(function() {
this.getSrc();
});
},
};
</script>