【WordPress】ディレクトリ内のファイルパスを全て取得する関数

2018年8月14日

WordPressでディレクトリ内のファイルパスを全て取得したかったので作成した。

コード

function get_file_paths_in_directory( $directory_path, $is_searching_in_sub_directory = true ) {
    $pattern    = TEMPLATEPATH.$directory_path.'/*';
    $paths      = glob( $pattern );
    $file_paths = [];

    $add_file_paths_in_sub_directory = function( $path ) use( &$file_paths, $is_searching_in_sub_directory ) {
        if ( !$is_searching_in_sub_directory ) return;

        $sub_directory_path             = str_replace( TEMPLATEPATH, '', $path );
        $file_paths_in_sub_directory    = get_file_paths_in_directory( $sub_directory_path );
        $file_paths                     = array_merge( $file_paths_in_sub_directory, $file_paths );
    };

    $add_file_path = function( $path ) use( &$file_paths ) {
        $file_paths[] = $path;
    };

    foreach ( $paths as $path ) {
        is_dir( $path ) ? 
            $add_file_paths_in_sub_directory( $path ) :
            $add_file_path( $path )
        ;
    }

    return $file_paths;
}

使い方

引数の$directory_pathにテンプレートパス以降のパスを指定し、呼び出す。

$file_paths = get_file_paths_in_directory( '/sample' );

ディレクトリ内の全てのファイルパスを配列として取得できる。

サブディレクトリを対象にしたくない場合は、引数の$is_searching_in_sub_directoryfalseを指定する。