使用REST API创建新帖子并使用外部图像URL保存特色图像

时间:2021-01-09 作者:Alt C

我正在尝试使用RESTAPI创建一个post。我可以通过下面的获取请求来执行此操作。OurPostData 包含标题、内容和URL of a featured image 这是一个外部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 在我的代码中有post id.(如何在中访问它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 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

而不是使用wp_ajax_ (即。admin-ajax.php), 怎么样adding a custom REST API field 然后使用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 变量,添加具有名称的特色图像URLfeatured_image_url. 例如。

const OurPostData = {
    title: \'testing featured_image_url\',
    featured_image_url: \'https://example.com/image.png\',
    // ...
};

相关推荐

数据库中未插入AJAX联系人表单小部件插件数据

我已经为此工作了几个星期,但没有成功。我已经解决了代码中的一个又一个问题,但似乎没有一个更正可以解决我的核心问题。表单没有向数据库中插入任何内容,我也不知道为什么。我的所有数据都在ajax调用中传递,但它不会插入数据库中的数据。我是ajax和WordPress插件的新手,所以我可能遗漏了一些明显的东西。请帮我知道我哪里做错了。提前谢谢。我的小部件表单插件代码public function widget( $args, $instance ) { if ( ! isset