WordPress:アップロードされたファイルサイズを取得・表示する方法

WordPress:アップロードされたファイルサイズを取得・表示する方法

個人的によく利用する例だと、管理画面で特定の箇所にPDFをアップロードするとフロントではそのPDFのファイル名・リンク先・ファイルサイズを表示といったように、WordPressでアップロードしたファイルのサイズを取得・表示する方法です。

ファイルサイズを取得・表示する

使いたい箇所に直接でもいけますが、ここでは複数箇所で使うことを考えてfunctions.phpへ下記のように関数として記述します。

functions.php

if ( ! function_exists( 'get_filesize' ) ) {
  function get_filesize( $file_path ) {
    $file_fullpath = str_replace( site_url(), ABSPATH, $file_path );
    if ( is_file( $file_fullpath ) ) {
      $file_size = size_format( filesize( $file_fullpath ) );
      return $file_size;
    }
  }
}

内容としてはfilesize()でファイルサイズを取得し、それをWordPressのsize_format()というバイト数を人間に読みやすい単位にフォーマットしてくれる関数と組み合わせて表示させるというものになります。
その際filesize()に指定するパスはフルパスの必要があるので、呼び出し時の引数で指定するパスがフルパスでない場合は、サンプルコードの3行目にあるようにstr_replace()を使うなどしてパスを置き換える必要があります。

あとは実際にフロントで値を表示したい箇所で<?php echo get_filesize( 'ここにファイルのパス' ); ?>という形で記述すれば、例えば「100 KB」や「20 MB」のように引数で指定したパスのファイルサイズが表示されます。

値と単位間のスペースを削除

上で紹介したコードでファイルサイズを表示することができますが、例えばファイルサイズが100KBの場合は「100 KB」、20MBの場合は「20 MB」といったように値と単位の間にスペースが付きます。
このスペースを取り除きたい場合は、size_format()を使用している箇所にstr_replace()を追加してfunctions.phpを下記のように記述します。

functions.php

if ( ! function_exists( 'get_filesize' ) ) {
  function get_filesize( $file_path ) {
    $file_fullpath = str_replace( site_url(), ABSPATH, $file_path );
    if ( is_file( $file_fullpath ) ) {
      $file_size = str_replace( ' ', '', size_format( filesize( $file_fullpath ) ) );
      return $file_size;
    }
  }
}

上記関数で<?php echo get_filesize( 'ここにファイルのパス' ); ?>を使用した場合は、「100KB」や「20MB」といったように値と単位間のスペースがない状態でファイルサイズが表示されます。

値と単位をそれぞれタグで括る

同じくstr_replace()を利用して出力内容をカスタマイズする方法です。
例えば値と単位をそれぞれデザインしたいときには、functions.phpへ下記のように記述することでそれぞれをclass付きのspanタグで括られた状態で出力されるようになるので、あとはこのclassを利用してCSSを適用させれば任意の見栄えに変更できます。

functions.php

if ( ! function_exists( 'get_filesize' ) ) {
  function get_filesize( $file_path ) {
    $file_fullpath = str_replace( site_url(), ABSPATH, $file_path );
    if ( is_file( $file_fullpath ) ) {
      $file_size = '<span class="filesize-value">' . str_replace( ' ', '</span><span class="filesize-unit">', size_format( filesize( $file_fullpath ) ) ) . '</span>';
      return $file_size;
    }
  }
}

例えば一番上で紹介したコードで単純に表示すると「100 KB」と表示されるものは、下記のようにスペースもなく値と単位がそれぞれタグで括られているHTMLで出力されます。

HTML

<span class="filesize-value">100</span><span class="filesize-unit">KB</span>

Close the search window,
please press close button or esc key.