通过图像的URL在Wordpress前端表单中上传图像

时间:2019-07-25 03:45:44

标签: php jquery wordpress

我正在使用桌游Geek API来提取各种数据。我想要的一个数据就是图像。

例如,以下是特定棋盘游戏的API调用: https://boardgamegeek.com/xmlapi2/thing?id=169786&stats=1

当我通过ajax调用获得响应时,我可以通过以下方式在xml中获取图像网址:

var image_url = $(data).find("image")[0].textContent;

但是:那时我很沮丧。我想上传位于该URL的图像,但是我不知道如何通过表单上传图像。

在wordpress中:我知道如何上传图像的唯一方法是计算机上是否已存在图像 。在那种情况下,我有以下输入:

<label for='board_game_image></label>
<input type="file" name="board_game_image" id="board_game_image" multiple="false"></input>

此输入将创建“选择文件”按钮,以从计算机上载图像。提交表单后,我将使用media_handle_upload将图像保存在uploads目录中并创建相关的数据库记录。不幸的是:当图像 在您的计算机上已经不存在,而是存在于Internet上的某个位置(即图像通过url存在)时,此过程似乎无法正常工作。

问题:当计算机上不存在图像时,如何通过wordpress前端表单上传图像?相反,我所拥有的只是图像在互联网上的位置的url

2 个答案:

答案 0 :(得分:4)

您应在表单上添加图片链接,

例如

var image_url = $(data).find("image")[0].textContent;
//assign the value to hidden input
$('#imgURL').val( image_url );

然后在您的表单上添加类似的内容

<input type="hidden" id="imgURL" name="imageURL">

我不确定您如何处理表单提交,但是您可以在提交后执行以下类似操作来处理图像。

首先,将图像保存在上载文件夹中

$imgurl = $_REQUEST['imageURL']; // get the img url from the submitted data
$imginfo = pathinfo($imgurl); //get the url information 
$filename = $imginfo['filename'].'.'.$imginfo['extension']; // extract the image filename

$updir = wp_upload_dir(); // get upload directory
$uploadedfile = $updir['path'] . '/' . $filename; // create upload image location & file name

$image= file_get_contents( $imgurl ); // get the image actual content
$saved = fopen($uploadedfile, 'w'); // open the image file
fwrite($saved, $image); // write image conent
fclose($saved); // close image

您的图像现在已上传并存储在wp-content uploads文件夹中,确切位置在$uploadedfile

但是,由于该映像没有任何数据库条目连接到该映像,因此该映像仍未添加到媒体库中,

现在只需使用wp_insert_attachment函数将该图像链接到数据库中,它将显示在媒体库中,

只需检查文档,您将看到一个将$uploadedfile文件链接到媒体库的示例,您可以执行类似的操作,

$filetype = wp_check_filetype( $filename, null );

$attachment = array(
  'post_mime_type' => $filetype['type'],
  'post_title' => sanitize_file_name( $filename ),
  'post_content' => '',
  'post_status' => 'inherit'
);

$img_id = wp_insert_attachment( $attachment, $uploadedfile );
require_once( ABSPATH . 'wp-admin/includes/image.php' );
$attach_data = wp_generate_attachment_metadata( $img_id, $uploadedfile );
wp_update_attachment_metadata( $img_id, $attach_data );

答案 1 :(得分:0)

请检查下面的代码

include_once( ABSPATH . 'wp-admin/includes/image.php' );
$imageurl = '<IMAGE URL>';
$imagetype = end(explode('/', getimagesize($imageurl)['mime']));
$uniq_name = date('dmY').''.(int) microtime(true); 
$filename = $uniq_name.'.'.$imagetype;

$uploaddir = wp_upload_dir();
$uploadfile = $uploaddir['path'] . '/' . $filename;
$contents= file_get_contents($imageurl);
$savefile = fopen($uploadfile, 'w');
fwrite($savefile, $contents);
fclose($savefile);

$wp_filetype = wp_check_filetype(basename($filename), null );
$attachment = array(
    'post_mime_type' => $wp_filetype['type'],
    'post_title' => $filename,
    'post_content' => '',
    'post_status' => 'inherit'
);

$attach_id = wp_insert_attachment( $attachment, $uploadfile );
$imagenew = get_post( $attach_id );
$fullsizepath = get_attached_file( $imagenew->ID );
$attach_data = wp_generate_attachment_metadata( $attach_id, $fullsizepath );
wp_update_attachment_metadata( $attach_id, $attach_data ); 

echo $attach_id;