File: /var/www/html/www.winghung.com/wp-content/plugins/custom-listing/custom-listing.php
<?php
/**
* Plugin Name: Directory Listing
* Description: A simple plugin to list files and folders from a specific directory.
* Version: 1.1
* Author: Your Name
*/
// Function to recursively get files and directories
function list_files_in_directory($directory, $base_url) {
$files = array_diff(scandir($directory), array('..', '.')); // Get files and folders, excluding '.' and '..'
$output = '';
foreach ($files as $file) {
$file_path = $directory . '/' . $file;
if (is_dir($file_path)) {
// If it's a directory, add it to the output and list its contents recursively
$output .= '<li class="folder"><strong>' . esc_html($file) . '</strong>';
$output .= '<ul>' . list_files_in_directory($file_path, $base_url . '/' . $file) . '</ul></li>';
} else {
// If it's a file, create a clickable link to download
$output .= '<li class="file"><a href="' . esc_url($base_url . '/' . $file) . '" download>' . esc_html($file) . '</a></li>';
}
}
return $output;
}
function list_document_files() {
$directory = ABSPATH . 'document'; // Path to your 'document' folder
$base_url = home_url('document'); // Base URL for the document folder
$output = '<ul class="file-explorer">' . list_files_in_directory($directory, $base_url) . '</ul>';
return $output;
}
function display_directory_listing() {
return list_document_files();
}
// Register the shortcode [directory_listing]
add_shortcode('directory_listing', 'display_directory_listing');
// Enqueue styles
function document_file_list_styles() {
echo '
<style>
.file-explorer {
list-style-type: none;
padding: 0;
margin: 0;
}
.file-explorer li {
padding: 8px;
border: 1px solid #ccc;
margin: 4px 0;
border-radius: 4px;
background-color: #f9f9f9;
}
.file-explorer li.folder {
background-color: #e0f7fa; /* Light blue for folders */
}
.file-explorer li.file a {
text-decoration: none;
color: #007bff; /* Bootstrap primary color */
}
.file-explorer li:hover {
background-color: #f0f0f0; /* Light grey on hover */
}
.file-explorer li.folder:hover {
background-color: #b2ebf2; /* Darker blue on folder hover */
}
</style>
';
}
add_action('wp_head', 'document_file_list_styles');