IR情報などPDFファイルのリストを作成することはよくあると思いますが、ファイルのサイズを表示したいという要望は多いのではないかと思います。
PHPにはfilesize()というそのまんまな関数があって、ファイルサイズを取得し、単位を出力するスクリプトを参考に下記の関数を作りました。ってほぼコピペなんですけど。
[追記]
WordPressのコアにsize_formatという関数がありましたので、単位変換部分がだいぶシンプルにできました。末尾のコードご参照ください。(2015/01/19)
あと、プラグイン化してショートコードで使えるようにしましたのでよかったら使ってください。
WordPress:PDFとかのファイルサイズを取得して表示するショートコードを公式ディレクトリに公開しました
WordPress.orgのPlugin Directory:
Get Filesize Shortcode
function get_file_size($file){
if ( is_file($file) ){
$filesize = filesize($file);
$s = array('B', 'KB', 'MB', 'GB', 'TB', 'PB');
$e = floor(log($filesize)/log(1024));
if($e==0 || $e==1) { $format = '%d '; }
else { $format = '%.1f '; }
$filesize = sprintf($format.$s[$e], ($filesize/pow(1024, floor($e))));
return $filesize;
}
}
このとき、get_file_sizeに渡す引数$fileはカスタムフィールドにあるpdfファイルのurlになります。
http://www.ika-ring.net/aaa.pdfみたいなのです。
ですが、このままだと
Warning: filesize() [function.filesize] : stat failed for…….
というエラーが出てしまいます。もうだいぶググったのですが、サクッと理解できるようなものがなかったので書いとくことにしました。
is_file($file)とかで見てもfalseが返ってくるので、さっぱり分かりませんでした。
それで、答えはこのページにありました。
WordPress and the “filesize() [function.filesize]: stat failed” Error
最初二つのコードでなにが変わったのか分からなかったのですが、要はfilesize()やfiletype()などに渡す引数はURLではなくてサーバーのディレクトリーパスを渡せということです。フルパスっていうんでしょうか。
ということで先の$fileからstr_replaceでディレクトリーパスに書き換えることで無事できました。
以下、完成版コードです。
もっといい書き方があったら教えてください。
function get_file_size($file){
/*教えていただいたように記述を変更しました。
$mfile = str_replace( 'https://ika-ring.net','/usr/home/somedirectory/www/htdocs',$file );*/
$mfile = str_replace( esc_url(home_url('/'))."wp/",ABSPATH,$file );
if ( is_file( $mfile ) ){
/* WordPressのコアにsize_formatという関数がありましたので、単位変換部分がだいぶシンプルにできました */
$filesize = size_format( filesize( $mfile ) );
return $filesize;
}
}