wordpress フォルダ内のファイル一覧を取得して画像ファイルであれば表示する

2014年1月11日

WordPress のフォルダにあるファイルの一覧を取得して、画像ファイルであれば出力して表示する方法のメモ。

フォルダ内のファイル一覧を取得

ファイルの一覧を取得して出力するには以下のようにする。

この時、URL からサーバー内部のファイル一覧を取得することはできないので「get_template_directory()」を使用する。( http:// で始まる URL ではなくディレクトリのパス)

「get_template_directory_uri()」や「get_bloginfo(‘template_url’)」ではNG。

<?php
$dirName = get_template_directory(). '/images/top_photo/';
if ($dir = opendir($dirName)) {
    while (($file = readdir($dir)) !== false) {
        if ($file != "." && $file != "..") {
            echo $file;
        }
    } 
    closedir($dir);
}
?>

または、以下のようにしても同じような結果が得られる。

<?php
$dirName = get_template_directory(). '/images/top_photo/';
$dir = dir($dirName);
while(FALSE !== ($fileName = $dir->read())){
   if ($fileName != "." && $fileName != "..") {
    echo $fileName;
  }
}
?>

上記の場合、そのフォルダ内にフォルダがあればそのフォルダ名も取得される。

ファイルが画像かどうかを判定

  • ファイルが画像かどうかを判定するには「getimagesize()」を使用(画像ファイルでない場合は FALSE が返る)。
  • dir() を使っての読み込みにより返されるディレクトリエントリの順番は、システムに依存するとのことなので、sort() でソート。
  • sort() の第2引数は省略可能だが、意図した順番で並べ替えられないことがあるとのことなので指定。
<?php
$dirName = get_template_directory(). '/images/top_photo/';
$dir = dir($dirName);

while(FALSE !== ($fileName = $dir->read())){
  $path = $dir->path. '/' .$fileName;  
  if(@getimagesize($path)){
    $imageFileNames[] = $fileName;
  }
}

sort($imageFileNames, SORT_STRING) ;

foreach ( $imageFileNames as $imageFileName ){
  $src = get_template_directory_uri(). '/images/top_photo/' .$imageFileName ;
  echo '<img src="'.$src. '" width="680" height="420" alt="">';  
}
?>