自分のサーバーのWordpress内にアップされている画像のURLから、画像の幅(width)と、画像の高さ(height)を取得する関数を作ったのでメモがてら紹介です。
目次
サーバー内の画像URLから画像の幅と高さを取得する関数
で、作成した関数が以下です。
//画像URLから幅と高さを取得する(同サーバー内ファイルURLのみ) function get_image_width_and_height($image_url){ $res = null; //wp-contentディレクトリのパス:/var/www/html/example/wp-content $wp_content_dir = WP_CONTENT_DIR; //wp-contentディレクトリのURL:http://www.example.com/wp-content $wp_content_url = content_url(); //URLをローカルパスに置換 $image_file = str_replace($wp_content_url, $wp_content_dir, $image_url); //画像サイズを取得 $imagesize = getimagesize($image_file); if ($imagesize) { $res = array(); $res['width'] = $imagesize[0]; $res['height'] = $imagesize[1]; return $res; } }
動作としては、以下のようなことを行っています。
- 引数に指定された「サーバー内の画像URL」を「ローカルのファイルパス」に変換
- PHPで元からあるgetimagesize()関数で画像情報を取得
- 幅と高さを連想配列で返す
関数の使い方
関数は、以下のように使用するとwidthとheightが入った連想配列を返します。
例えば以下のように書いたとすると、
$size = get_image_width_and_height('Wordpress内の画像URL'); var_dump($size);
$sizeは、以下のように返ってきます。
array(2) { ["width"]=> int(画像の幅) ["height"]=> int(画像の高さ) }
アイキャッチ画像からの取得例
例えば、投稿ページのアイキャッチ画像からwidth属性とheight属性を指定したHTMLタグを出力したい場合は、以下のように書きます。
$image_id = get_post_thumbnail_id(); $image = wp_get_attachment_image_src($image_id, true); $image_url = $image[0]; $size = get_image_width_and_height($image_url); echo '<img src="'.$image_url.'" width="'.$size['width'].'" height="'.$size['height'].'">';
すると、以下のようなIMGタグが出力されます。
<img src="http://exsample.com/wordpress/wp-content/uploads/2016/07/suit-portrait-preparation-wedding-large.jpg" width="867" height="650">
まとめ
WordPressの場合、単にwidth属性や、height属性が入ったimgタグなら、the_post_thumbnail()関数などを使用すれば、属性込みのタグが出力されます。
ただ、JSON-LDに記入する画像サイズを出力するときに、必要だったので、今回の関数を作成しました。
JSON-LD以外にも、AMPで画像表示(amp-imgの利用)をするときは、width・height属性の指定は必須です(JSON-LD自体もAMPの構造化データのためではあるけど)。
もし、「自分のWordpress内の画像URLのみから画像サイズを取得する必要がある」なんて事があれば、今回の関数を使用すると、結構手軽に取得できると思います。