Files and Directories

The files utility function provides a tool for listing subdirectories within a specified directory.

Available Function

cbo_list_folders($folder, $levels)

Lists subdirectories within a specified directory with configurable depth.

Parameters:

  • $folder: The directory path to scan (default: '').
  • $levels: Number of levels of subdirectories to explore (default: 1).

Return Value:

Returns an array of subdirectories found or false in case of error.

1
// List subdirectories in the uploads folder
2
$uploads_dir = wp_upload_dir()['basedir'];
3
$subdirs = cbo_list_folders($uploads_dir);
4
5
// Display the subdirectories
6
if ($subdirs) {
7
echo '<ul>';
8
foreach ($subdirs as $dir) {
9
echo '<li>' . $dir . '</li>';
10
}
11
echo '</ul>';
12
} else {
13
echo 'No subdirectories found or error occurred.';
14
}
15
16
// List subdirectories with depth of 2
17
$theme_dir = get_template_directory();
18
$theme_subdirs = cbo_list_folders($theme_dir, 2);
19
20
// Display the theme subdirectories
21
if ($theme_subdirs) {
22
echo '<h3>Theme Subdirectories:</h3>';
23
echo '<ul>';
24
foreach ($theme_subdirs as $dir) {
25
echo '<li>' . $dir . '</li>';
26
}
27
echo '</ul>';
28
}

Usage Examples

Finding Template Parts

1
// Find all template parts in the theme
2
function get_template_parts() {
3
$template_parts_dir = get_template_directory() . '/template-parts';
4
$template_parts = [];
5
6
// Get all subdirectories in the template-parts directory
7
$subdirs = cbo_list_folders($template_parts_dir);
8
9
if ($subdirs) {
10
foreach ($subdirs as $dir) {
11
// Get the template part name from the directory path
12
$part_name = basename(rtrim($dir, '/'));
13
$template_parts[] = $part_name;
14
}
15
}
16
17
return $template_parts;
18
}
19
20
// Usage
21
$template_parts = get_template_parts();
22
23
echo '<h3>Available Template Parts:</h3>';
24
if (!empty($template_parts)) {
25
echo '<ul>';
26
foreach ($template_parts as $part) {
27
echo '<li>' . $part . '</li>';
28
}
29
echo '</ul>';
30
} else {
31
echo '<p>No template parts found.</p>';
32
}

Creating a Media Browser

1
// Create a simple media browser
2
function simple_media_browser() {
3
$uploads_dir = wp_upload_dir()['basedir'];
4
$uploads_url = wp_upload_dir()['baseurl'];
5
6
// Get year/month folders
7
$year_folders = cbo_list_folders($uploads_dir);
8
9
echo '<div class="media-browser">';
10
11
if ($year_folders) {
12
foreach ($year_folders as $year_folder) {
13
$year = basename(rtrim($year_folder, '/'));
14
15
echo '<div class="year-folder">';
16
echo '<h3>' . $year . '</h3>';
17
18
// Get month folders within each year
19
$month_folders = cbo_list_folders($year_folder);
20
21
if ($month_folders) {
22
echo '<div class="month-folders">';
23
foreach ($month_folders as $month_folder) {
24
$month = basename(rtrim($month_folder, '/'));
25
$relative_path = $year . '/' . $month;
26
27
echo '<div class="month-folder">';
28
echo '<h4>' . $month . '</h4>';
29
echo '<a href="' . $uploads_url . '/' . $relative_path . '" target="_blank">View Files</a>';
30
echo '</div>';
31
}
32
echo '</div>';
33
}
34
35
echo '</div>';
36
}
37
} else {
38
echo '<p>No media folders found.</p>';
39
}
40
41
echo '</div>';
42
}
43
44
// Usage
45
simple_media_browser();

Best Practices

  • Always check the return value before using the results, as the function may return false.
  • Be cautious with the depth level as higher values can lead to performance issues on directories with many nested subdirectories.
  • Use absolute paths when working with directories to avoid path resolution issues.
  • Consider caching the results for frequently accessed directories to improve performance.