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 中以編程方式上傳文件。 你知道其他方法嗎? 請在下面的評論部分與我們分享。