Создайте новую публикацию с помощью 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 в этом обратном вызове?

Author: Latheesh V M Villa, 2021-01-09

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',
    // ...
};
 1
Author: Sally CJ, 2021-01-10 16:59:32