The wp_mkdir_p() WordPress PHP function is designed to create directories recursively based on a complete path. It can also set permissions on these folders.
Usage
A simple example of the function:
$targetPath = '/your/desired/path'; if ( wp_mkdir_p( $targetPath ) ) { echo __( 'Directory successfully created!', 'textdomain' ); }
In this snippet, the function attempts to create a directory at the location specified by $targetPath
. If successful, it outputs a message.
Parameters
- $target (string, Required): The full path of the directory that the function will attempt to create.
More information
See WordPress Developer Resources: wp_mkdir_p() This function is an integral part of the WordPress core and is not deprecated as of the latest version.
Examples
Creating a Deep Sub-directory
Suppose you want to create a sub-directory that’s several levels deep, you can use this function:
$targetPath = '/a/very/deep/sub/directory'; if ( wp_mkdir_p( $targetPath ) ) { echo __( 'Sub-directory successfully created!', 'textdomain' ); }
This code attempts to create a deeply nested sub-directory at the path specified in $targetPath
.
Setting Permissions to 777 for a Cache Folder
To create a directory with full permissions (777), useful for a cache folder:
$cache_folder = ABSPATH . 'cache'; if ( ! is_dir( $cache_folder ) ) { wp_mkdir_p( $cache_folder ); chmod( $cache_folder, 0777 ); }
This code checks if a directory named ‘cache’ exists in the root directory of your WordPress installation. If it doesn’t, the function creates it and sets its permissions to 777.
Checking if a Directory Exists
To create a directory only if it doesn’t already exist:
$folder = ABSPATH . 'my-folder'; if ( ! is_dir( $folder ) ) { wp_mkdir_p( $folder ); }
This script checks if a directory named ‘my-folder’ exists in the root directory of your WordPress installation. If it doesn’t, the function creates it.
Creating a Directory for User Uploads
If you want to create a directory for each user to upload files, you can do it as follows:
$user_id = get_current_user_id(); $uploads_dir = wp_upload_dir(); $user_folder = $uploads_dir['basedir'] . '/' . $user_id; if ( ! is_dir( $user_folder ) ) { wp_mkdir_p( $user_folder ); }
This script creates a new directory in the WordPress uploads directory for the current user, identified by their user ID.
Handling Failed Directory Creation
To gracefully handle situations where directory creation fails:
$new_folder = ABSPATH . 'new-folder'; if ( ! wp_mkdir_p( $new_folder ) ) { echo __( 'Directory creation failed. Please check your permissions.', 'textdomain' ); }
In this example, if the function fails to create the ‘new-folder’, it echoes an error message prompting the user to check their permissions.