WordPress 以编程方式上传文件:3 种实用方法

已发表: 2022-10-20

默认情况下,WordPress 支持通过其媒体库或帖子编辑屏幕上传文件。 当您使用这些内置功能将文件上传到您的网站时,WordPress 会为您处理一切。 它允许您查看所有上传的文件并将它们插入到您的帖子或页面中。

但是,在自定义功能(例如前端文件上传)方面,您需要的远不止这些。 有很多可用的插件可帮助您添加、修改和管理文件,而无需调整代码。 当然,大多数都需要收费。

如果您不想为插件付费,以编程方式将文件上传到您的 WordPress 网站可能是一种解决方案。 在本文中,我们将详细指导您如何实现这一目标。

让我们开始吧!

  • 一点通知
  • #1 以编程方式从 URL 将文件上传到媒体库
  • #2 通过 HTML 表单添加文件
  • #3 以编程方式将文件插入自定义图库
  • 额外提示:保护您的文件上传

一点通知

这种方法主要是干扰代码。 因此,请仅在您具备一些编码知识的情况下才选择使用此技术。 否则,您的整个网站可能会因一个小的不当更改而崩溃。

如果您刚开始使用 WordPress,我们强烈建议您使用 Gravity Forms 插件来接受前端文件上传。 或者,查看 WordPress 前端文件上传的前 5 个插件。 您还可以使用 FTP 客户端从后端上传文件。

仍然,想学习如何在 WordPress 中以编程方式上传文件吗? 继续阅读!

#1 以编程方式从 URL 将文件上传到媒体库

您浏览互联网并找到想要上传到 WordPress 媒体库的精彩图片。 这是这样做的路线:

  1. 复制图像的 URL。
  2. 将以下代码嵌入您的网站并插入您复制的 URL:
 /**
* 以编程方式从 URL 上传图片
*
* @作者米莎·鲁德拉斯蒂
* @link https://rudrastyh.com/wordpress/how-to-add-images-to-media-library-from-uploaded-files-programmatically.html#upload-image-from-url
*/
功能 rudr_upload_file_by_url( $image_url ) {

// 它允许我们使用 download_url() 和 wp_handle_sideload() 函数
需要一次(ABSPATH。'wp-admin/includes/file.php');

// 下载到临时目录

$temp_file = download_url($image_url);

如果(is_wp_error($temp_file)){
返回假;
}

// 将临时文件移动到上传目录
$文件 = 数组(
'名称' => 基本名称( $image_url ),
'类型' => mime_content_type( $temp_file ),
'tmp_name' => $temp_file,
'大小' => 文件大小($temp_file),
);
$sideload = wp_handle_sideload(
$文件,
大批(
'test_form' => false // 不需要检查 'action' 参数
)
);

如果(!空($sideload['错误'])){
// 如果你愿意,你可以返回错误信息
返回假;
}

// 是时候将我们上传的图片添加到 WordPress 媒体库中了
$attachment_id = wp_insert_attachment(
大批(
'guid' => $sideload['url'],
'post_mime_type' => $sideload['type'],
'post_title' => 基本名称($sideload['file']),
'post_content' => '',
'post_status' => '继承',
),
$sideload['文件']
);

if( is_wp_error( $attachment_id ) || ! $attachment_id ) {
返回假;
}

// 更新元数据,重新生成图像大小
需要一次(ABSPATH。'wp-admin/includes/image.php');

wp_update_attachment_metadata(
$attachment_id,
wp_generate_attachment_metadata($attachment_id, $sideload['file'])
);

返回 $attachment_id;
}

而已!

#2 通过 HTML 表单添加文件

第二种方法是创建一个带有文件输入和提交按钮的简单 HTML 表单。 您可以将此表单放在任何页面或帖子上,从而允许用户将文件上传到您的站点。 采取以下步骤通过 HTML 表单在 WordPress 中以编程方式上传文件:

  1. 嵌入以下代码来构建一个简单的 HTML 表单:
 1 <h2>上传文件</h2>
2 <form method="post" enctype="multipart/form-data">
3 <input type="file" name="file" required />
4 <input type="submit" name="upload_file" value="Upload" />
5 </形式>

通过使用wp_upload_bits()函数,WordPress 会自动将您上传的文件存储在上传目录中。 您可以在当前年月文件夹中找到您的文件,例如wp-content/uploads/2020->03->your_file

2. 将此代码插入您的functions.php文件中:

 1 <?php
2 函数 fn_upload_file() {
3 if ( isset($_POST['upload_file']) ) {
4 $upload = wp_upload_bits($_FILES['file']['name'], null, $_FILES['file']['tmp_name']);
5 // 保存到数据库 $upload['url]
6 }
7 }
8 add_action('init', 'fn_upload_file');

如果您打印$upload变量,您将获得一个包含目录和上传文件的 URL 的数组。 用户可以使用$upload['url]在数据库中查找并保存这些 URL。

如上所述,一旦使用wp_upload_bits()方法,您的文件将存储在默认的 WordPress 文件夹层次结构中。 但是,如果您希望将文件保存在自己的目录中呢?

在这种情况下,您应该在上传目录中创建一个自定义文件夹并将文件移动到其中。 假设您要将文件存储在uploads/product-images目录中。 使用下面的代码,您可以生成product-images文件夹并将文件存储在其中。

functions.php文件中编写代码:

 1 函数 fn_upload_file() {
2 if ( isset($_POST['upload_file']) ) {
3 $upload_dir = wp_upload_dir();
4
5 if ( !empty( $upload_dir['basedir'] ) ) {
6 $user_dirname = $upload_dir['basedir'].'/product-images';
7 if ( !file_exists( $user_dirname ) ) {
8 wp_mkdir_p($用户目录名);
9 }
10
11 $filename = wp_unique_filename($user_dirname, $_FILES['file']['name']);
12 move_uploaded_file($_FILES['file']['tmp_name'], $user_dirname .'/'. $filename);
13 // 保存到数据库 $upload_dir['baseurl'].'/product-images/'.$filename;
14 }
15 }
16 }
17 add_action('init', 'fn_upload_file');

在这里,我们应用wp_unique_filename()技术为给定目录提供唯一的文件名。

#3 以编程方式将文件插入自定义图库

假设您有一个画廊添加为一个名为“画廊”的自定义元字段。 您通过media_sideload_image()上传大量图像。 然后,序列化它们的 ID 并通过update_post_meta( $post_id , 'gallery', $serialized)将它们插入到图库中;

因此,当您在后端编辑帖子页面中查看帖子时,您会看到所有上传的照片。 但是,在您点击后端的更新之前,这些图片不会在前端的幻灯片中显示。

那么,如何在创建图库后以编程方式单击更新按钮? 只需按照以下指南进行操作:

  1. 更新帖子库后,添加此代码以编程方式选择更新按钮:
 wp_update_post(['ID'=>$post_id]);

2.更新缓存以使用搜索和过滤功能:

 do_action('search_filter_update_post_cache', $post_id);

额外提示:保护您的文件上传

有什么方法可以防止未经授权访问您上传的文件? 答案是肯定的。 有关更多信息,请参阅我们的详细指南,了解 21 种有用的 .htaccess 技巧来保护 WordPress 文件。 由于 .htaccess 是一个让您的网站顺利运行的关键文件,因此在进行任何更改时要小心。

另一方面,如果您对自己的编码技能没有信心,请安装 PDA Gold 插件。 它将帮助您处理麻烦,而不必担心影响 .htaccess 文件。

另一个值得考虑的方法是使用密码保护您的 WordPress 文件。 查看我们的文章了解更多详情。

像专家一样在 WordPress 中以编程方式上传文件!

我们向您展示了在 WordPress 中以编程方式上传文件的 3 种方法。 现在,您可以轻松地将文件上传到媒体库或通过 HTML 前端文件上传表单。 将文件添加到您的自定义画廊也是可以实现的。 最重要的是,不要忘记使用代码或安装插件来保护您的 WordPress 文件。

这完全是关于如何在 WordPress 中以编程方式上传文件。 你知道其他方法吗? 请在下面的评论部分与我们分享。