Создайте новую публикацию с помощью rest api и сохраните показанное изображение с помощью внешнего URL-адреса изображения
Я пытаюсь создать сообщение с помощью API rest. Что я могу сделать с помощью запроса на выборку, как показано ниже. OurPostData
содержит заголовок, содержимое и URL-адрес отображаемого изображения , которое является внешним URL-адресом
fetch('https://mywebste.online/wp-json/wp/v2/post', {
method: 'POST',
credentials: 'same-origin',
headers: new Headers({
'Content-Type': 'application/json;charset=UTF-8',
'X-WP-Nonce': qrAjax.nonce
}),
body: JSON.stringify(OurPostData),
}).then(response => {
console.log(response);
return response.json();
}).then(data => console.log(data));
});
Это работает, за исключением показанного изображения. Если я смогу передать его функции обратного вызова, выполненной с использованием приведенного ниже кода, может быть, я смогу этого добиться?
add_action('wp_ajax_code_post_create', 'code_post_create_callback');
Но я не знаю, как это передать. data
в моем коде имеет идентификатор записи. (Как я могу получите доступ к нему в code_post_create_callback
?)
Я могу сохранить файл, используя ниже
$file = 'https://externalwebsite.com/image.jpg';
$file_array = [ 'name' => wp_basename( $file ), 'tmp_name' => download_url( $file ) ];
// If error storing temporarily, return the error.
if ( is_wp_error( $file_array['tmp_name'] ) ) {
return $file_array['tmp_name'];
}
// Do the validation and storage stuff.
require_once ('wp-load.php');
require_once ('wp-admin/includes/admin.php');
$id = media_handle_sideload( $file_array, 0, $desc );
//var_dump($id);
// If error storing permanently, unlink.
if ( is_wp_error( $id ) ) {
@unlink( $file_array['tmp_name'] );
return $id;
}
Как мне позвонить code_post_create_callback
? Как мне получить доступ к data
в этом обратном вызове?
1 answers
Вместо использования wp_ajax_
(т.Е. admin-ajax.php
), как насчет добавления пользовательского поля REST API а затем, используя его update_callback
, загрузите удаленное изображение и установите его в качестве опубликованного изображения?
Рабочий пример
add_action( 'rest_api_init', 'wpse_381217' );
function wpse_381217() {
register_rest_field( 'post', 'featured_image_url', array(
// If you don't want to expose the field in the REST API response, you
// may ignore the get_callback, i.e. don't set it.
'get_callback' => function ( $post_arr ) {
return get_the_post_thumbnail_url( $post_arr['id'], 'full' );
},
'update_callback' => function ( $url, $post_obj ) {
$file_array = array(
'name' => wp_basename( $url ),
'tmp_name' => download_url( $url ),
);
if ( is_wp_error( $file_array['tmp_name'] ) ) {
return false;
}
$id = media_handle_sideload( $file_array, 0 );
if ( is_wp_error( $id ) ) {
@unlink( $file_array['tmp_name'] );
return false;
}
return set_post_thumbnail( $post_obj->ID, $id );
},
'schema' => array(
'description' => 'Featured image URL.',
'type' => 'string',
),
) );
}
Затем в вашей переменной OurPostData
добавьте URL-адрес рекомендуемого изображения с именем featured_image_url
. Например,
const OurPostData = {
title: 'testing featured_image_url',
featured_image_url: 'https://example.com/image.png',
// ...
};