在wordpress 上傳檔案至指定目錄, 並可讓一般使用者下載的功能

面臨醫療院所評鑑常常會有一些公開檔案需要於網站上更新,

所以我幫管理單位製作一個功能,

可在前台上傳檔案並讓檔案可以讓其他醫療院所下載的功能.

 

1. 進入檔案下載畫面可以令一般民眾或合作單位下載檔案

2. 若要更新檔案, 必須先以管理員帳號登入

3. 進入畫面可以看到檔案上傳

4. 管理單位只要依規則上傳指定的pdf檔格式即可

5. 假設我亂傳非指定格式的PDF檔, 就會進行錯誤提示

6. 成功上傳後上傳日期就會自動修改為上傳當時的時間! 這樣一來就很不必逐一變更上傳時間嘍!

7. 若有需要此功能的單位可以來 line 洽詢!

 

語法討論:

1. 檢查當前使用者是否具有管理權限
if (current_user_can(‘manage_options’)) {
ob_start();
?>
<form id=”upload-pdf-form” method=”post” enctype=”multipart/form-data”>
<input type=”file” name=”pdf_file” accept=”.pdf” />
<input type=”hidden” name=”action” value=”handle_pdf_upload” />
<?php wp_nonce_field(‘pdf_upload_nonce’, ‘pdf_upload_nonce’); ?>
<input type=”submit” value=”上傳 PDF” />
</form>
<?php
return ob_get_clean();
} else {

2. 如果使用者沒有權限,顯示有關下載文件的訊息
return ‘您僅能下載檔案。’;
}
}

3. 上傳檔案

function handle_pdf_upload() {
if (isset($_POST[‘action’]) && $_POST[‘action’] == ‘handle_pdf_upload’) {
if (!isset($_POST[‘pdf_upload_nonce’]) || !wp_verify_nonce($_POST[‘pdf_upload_nonce’], ‘pdf_upload_nonce’)) {
die(‘安全性驗證失敗’);
}

if (isset($_FILES[‘pdf_file’])) {
$file = $_FILES[‘pdf_file’];

 

4. 限制問題檔案與檢查名稱
$allowed_files = array(‘*****.pdf’, ‘*********.pdf’);

$target_dir = ‘/檔案夾位置/’;

if (in_array(basename($file[‘name’]), $allowed_files)) {

5. 上傳檔案
if (move_uploaded_file($file[‘tmp_name’], $target_dir . ‘/’ . basename($file[‘name’]))) {
echo ‘文件已成功上傳。’;
} else {
echo ‘上傳文件失敗。’;
}
} else {
echo ‘警示標語’;
}
}
}
}
add_action(‘init’, ‘handle_pdf_upload’);

6. 於前台顯示檔案名稱及最新新時間

$file_name = sanitize_text_field($atts[‘file’]);
$file_path = ‘/檔案夾位置/’ . $file_name;

if (file_exists($file_path)) {
$upload_date = date(‘Y-m-d’, filemtime($file_path));

// 定義文件的顯示名稱
$display_name = ”;
switch ($file_name) {
case ‘*******.pdf’:
$display_name = ‘採檢***手冊’;
break;
case ‘*******.pdf’:
$display_name = ‘微量金屬****手冊’;
break;
// 根據需要添加其他文件的顯示名稱
default:
$display_name = ‘*****文件名稱’;
}

// 構建下載連結
$download_link = ‘<a href=”‘ . esc_url(site_url(‘/****/’ . $file_name)) . ‘” download=”‘ . esc_attr($file_name) . ‘”>下載 ‘ . esc_html($display_name) . ‘(上傳日期: ‘ . esc_html($upload_date) . ‘)</a>’;

return $download_link;
} else {
return ‘文件不存在。’;
}