WordPress内で利用している画像の幅と高さを取得する方法

自分のサーバーの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;
  }
}

動作としては、以下のようなことを行っています。

  1. 引数に指定された「サーバー内の画像URL」を「ローカルのファイルパス」に変換
  2. PHPで元からあるgetimagesize()関数で画像情報を取得
  3. 幅と高さを連想配列で返す
この関数は、Wordpressインストールフォルダのwp-contentフォルダにアップされた画像のみサイズが取得できます。外部サイトの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に記入する画像サイズを出力するときに、必要だったので、今回の関数を作成しました。

Wordpressで投稿ごとにJSON-LDを出力するコードを書いたので紹介。 JSON-LDの書き方 サイト上の記事で、sch...

JSON-LD以外にも、AMPで画像表示(amp-imgの利用)をするときは、width・height属性の指定は必須です(JSON-LD自体もAMPの構造化データのためではあるけど)。

もし、「自分のWordpress内の画像URLのみから画像サイズを取得する必要がある」なんて事があれば、今回の関数を使用すると、結構手軽に取得できると思います。