It easier to implement file uploading programmatically on the custom WordPress plugin using wp_handle_upload() method.
After successfully upload this returns the file path which you can use to store in the MySQL database table or display on the page.
In this tutorial, I create a simple plugin to demonstrate file upload in WordPress.
Contents
1. Create Directory and Files
Create two PHP files and img directory where stored logo.png file.
- customplugin.php – Define plugin details and menu.
- uploadfile.php – Create a
<form >and upload file on submit.
2. customplugin.php
Define plugin information between /* */.
Create customplugin_menu() function to add menu and uploadfile() for include uploadfile.php.
Completed Code
<?php
/*
Plugin Name: Custom plugin
Plugin URI: https://makitweb.com
description: A simple custom plugin to demonstrate file upload
Version: 1.0.0
Author: Yogesh Singh
Author URI: https://makitweb.com/about
*/
// Add menu
function customplugin_menu() {
add_menu_page("Custom Plugin", "Custom Plugin","manage_options", "myplugin", "uploadfile",plugins_url('/customplugin/img/icon.png'));
add_submenu_page("myplugin","Upload file", "Upload file","manage_options", "uploadfile", "uploadfile");
}
add_action("admin_menu", "customplugin_menu");
function uploadfile(){
include "uploadfile.php";
}
3. uploadfile.php
Create a <form > which has file element and submit button.
On <form > submit check file is selected or not. If selected then assign $_FILES['file'] to $uploadedfile and array('test_form'=>false) to $upload_overrides variable.
Use this variables in wp_handle_upload() method.
If file successfully uploaded then read file path $movefile['url'] and print on the screen otherwise display error $movefile['error'].
Completed Code
<?php
// Upload file
if(isset($_POST['but_submit'])){
if($_FILES['file']['name'] != ''){
$uploadedfile = $_FILES['file'];
$upload_overrides = array( 'test_form' => false );
$movefile = wp_handle_upload( $uploadedfile, $upload_overrides );
$imageurl = "";
if ( $movefile && ! isset( $movefile['error'] ) ) {
$imageurl = $movefile['url'];
echo "url : ".$imageurl;
} else {
echo $movefile['error'];
}
}
}
?>
<h1>Upload File</h1>
<!-- Form -->
<form method='post' action='' name='myform' enctype='multipart/form-data'>
<table>
<tr>
<td>Upload file</td>
<td><input type='file' name='file'></td>
</tr>
<tr>
<td> </td>
<td><input type='submit' name='but_submit' value='Submit'></td>
</tr>
</table>
</form>
4. Conclusion
I hope this tutorial, helps you to add file upload in your plugin. The uploaded file will be stored in wp-content/uploads directory.

