首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Wordpress:在wordpress上传目录中插入包含当前完整图像路径的附件

Wordpress:在wordpress上传目录中插入包含当前完整图像路径的附件
EN

Stack Overflow用户
提问于 2019-07-16 20:05:31
回答 3查看 2K关注 0票数 0

我正在尝试编写一个插件,在激活时,它以编程的方式完成将图像上传到uploads目录所需的一切工作。换句话说:如果您在Add New媒体库屏幕上手动执行图像的拖放操作,它将完成所有可能发生的事情:

详细信息:

  • 我不提交邮件请求。我只是想找出我需要调用哪些函数才能执行以下操作( wordpress在拖放媒体库屏幕上所做的操作: )
    • 查找并抓取完整路径指定的图像(例如:图像位于桌面上。它不在uploads目录中)。
    • 将该图像以及该图像的各种版本上载到uploads目录中。
    • 创建一个post of post_type,等于attachment
    • 创建相关的postmeta记录

示例:

附件似乎根本无法做到这一点,因为图像必须已经存在于上载目录中。

代码语言:javascript
复制
# Below is a comment from the wp_insert_attachment example:
// $filename should be the path to a file in the upload directory

这个职位只是说这在wp_insert_attachment中是不可能的,但并没有提供解决方案。

Question(s)

  • 如何以编程方式上载路径不存在于wp-content/上载目录中的附件?相反,例如:图像的完整路径位于桌面上。
  • 如果不通过表单和POST请求上传图像,这是不可能做到的吗?理想情况下,我想调用这样的函数:“这里是指向桌面上的图像的完整路径。现在:在我的wordpress项目的上下文中完成上传图像所需的所有工作。”

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2019-07-17 18:57:43

我看到你在引用你服务器的桌面。确保您要加载的文件可由WordPress应用程序用户访问!

如果您必须以编程的方式完成这个任务,那么看起来media_handle_sideload可能会做到这一点。功能与media_handle_upload相同,但我不认为它需要POST请求才能像media_handle_upload那样激活它。

因此,第1步:将文件移动到WordPress应用程序可以访问的位置(比如WordPress/uploads)。

步骤2:抓取您需要“上载”的文件的url (类似于host/wp/uploads/Image.jpg)

步骤3:找出图像需要引用的post Id,并使用media_handle_sideload来验证和存储文件(下面是来自Wordpress代码库的代码片段)

代码语言:javascript
复制
<?php 
// Need to require these files
if ( !function_exists('media_handle_upload') ) {
    require_once(ABSPATH . "wp-admin" . '/includes/image.php');
    require_once(ABSPATH . "wp-admin" . '/includes/file.php');
    require_once(ABSPATH . "wp-admin" . '/includes/media.php');
}

$url = "http://s.wordpress.org/style/images/wp3-logo.png";
$tmp = download_url( $url );
if( is_wp_error( $tmp ) ){
    // download failed, handle error
}
$post_id = 0;
$desc = "The WordPress Logo";
$file_array = array();

// Set variables for storage
// fix file filename for query strings
preg_match('/[^\?]+\.(jpg|jpe|jpeg|gif|png)/i', $url, $matches);
$file_array['name'] = basename($matches[0]);
$file_array['tmp_name'] = $tmp;

// If error storing temporarily, unlink
if ( is_wp_error( $tmp ) ) {
    @unlink($file_array['tmp_name']);
    $file_array['tmp_name'] = '';
}

// do the validation and storage stuff
$id = media_handle_sideload( $file_array, $post_id, $desc );

// If error storing permanently, unlink
if ( is_wp_error($id) ) {
    @unlink($file_array['tmp_name']);
    return $id;
}

$src = wp_get_attachment_url( $id );
?>
票数 1
EN

Stack Overflow用户

发布于 2019-07-17 14:17:58

如果您的文件已经在服务器上,但它还没有在wordpress中设置路径(即您无法从web浏览器浏览到它),则有一个名为“从服务器添加”的插件,它打开一个连接到您的服务器的微型文件浏览器窗口,然后在您的WordPress实例中创建数据库记录到驻留在服务器上的文件,以便您可以在wp-admin上的媒体浏览器中将它们拉上来。

警告,这个插件是一个安全风险,因为插件本质上是获得文件访问您的the服务器的目录。如果您必须将大量文件大容量上传到WordPress,并且它们已经在服务器上,我将安装插件,为文件创建数据库记录,然后立即停用并卸载插件!

票数 1
EN

Stack Overflow用户

发布于 2019-07-16 21:01:43

你在找media_handle_upload。然后,您可以使用wp_update_attachment_metadata。

以下是一个基本版本:

代码语言:javascript
复制
<?php

// Use 0 as your post ID if you don't want to attach it to any post
$image = media_handle_upload($file, $post_id);

wp_update_attachment_metadata( $image, $data ); 

?>

您可以看到一个更高级的版本在这里使用前端形式

如果从URL上传图像,您也可以使用media_handle_sideload。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57064696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档