[ PHP ][ WordPress ] テンプレートファイルで表示する画像やアイキャッチ・カスタムフィールドに登録している画像サイズを取得する方法

PHP 関数を使って画像のパスから画像のサイズを取得したり、WordPress のアイキャッチサイズなどを WP関数で調べる方法です。

HTML 出力前にサイズを調べ、画像のサイズや縦横比によって付与するクラス名を変えたい場合などに便利です。AMP 対応などで img タグを amp-img タグに置き換える場合の width height 属性値の設定などにも使えそうです。

PHP の関数 getimagesize() を使用して画像サイズを取得する

getimagesize() に調べたい画像へのパスを渡すと配列で画像サイズのデータを返してくれます。
例えば、 https://memocarilog.info/wp-content/uploads/2017/01/1-2.png の画像サイズを調べたい場合

!2017/05/06追記

getimagesize() へ渡す画像のパスはサーバーからのパスでないと上手くいかないことがあるそうです。
詳しくはこちらの記事をご覧下さい → WordPressで getimagesize() を使ってコケた時のファイルパスの置換 | H.I. Art Works Web Technorogy


$image = getimagesize( 'https://memocarilog.info/wp-content/uploads/2017/01/1-2.png' );

とします。配列で「 width, height, 画像の形式, width=”◯◯” height=”◯◯”, ビット数, MIMEタイプ 」を返してくれるので、上記の $image には以下のようなデータが格納されます。

array(6) {
	[0]=> int(647) // width の値
	[1]=> int(550) // height の値
	[2]=> int(3) // 画像の形式
	[3]=> string(24) "width="647" height="550"" // 属性値入りの値
	["bits"]=> int(8) // 色のビット数
	["mime"]=>  string(9) "image/png" // 
}

以下のように list() 関数で変数に入れ直すと便利です。

// 画像の大きさを取得
$image = getimagesize( 'https://memocarilog.info/wp-content/uploads/2017/01/1-2.png' );
// width と height を変数に取り出す
list( $width, $height ) = $image;

これで $width に画像の width 値、$height に画像の height 値が入るので、縦横比の比較など簡単に行えます。

WordPress 関数 wp_get_attachment_image_src() を使用して画像サイズを取得する

wp_get_attachment_image_src() へ調べたい画像の添付画像 ID を渡すと配列で画像サイズのデータを返してくれます。記事に添付した画像に関してはこちらの関数で取得するのが便利です。

アイキャッチの画像サイズを調べる

$image_id = get_post_thumbnail_id( 記事ID ); 
$image = wp_get_attachment_image_src( $image_id, 'full' );

$image には以下のようなデータが格納されます。

array(4) { 
	[0]=> string(73) "画像パス/画像名.jpg"  // 画像url
	[1]=> int(400)  // width の値
	[2]=> int(200)  // height の値
	[3]=> bool(false)  [3] => リサイズされいている場合は true、元のサイズの場合は false
}

こちらも list 関数で変数に取り出すには以下のようにします。

$image_id = get_post_thumbnail_id( 記事ID ); 
// 画像の大きさを取得
$image = wp_get_attachment_image_src( $image_id, 'full' );
// 変数に取り出す
list( $url, $width, $height ) = $image;

カスタムフィールドにアップロードした画像もアイキャッチと同じ要領で調べることができます。
プラグインによって設定などが変わると思いますが、添付画像の ID を取得できれば、wp_get_attachment_image_src にてサイズを調べられます。

記事に添付された画像すべてのサイズを調べる

これは使いみちがあまりなさそうですが、せっかく調べたので書いておきます(笑)
get_post でその記事に対してのすべての添付画像の情報を取得して、foreach で回しながら画像サイズ情報を取得し、$images に格納します。

$args = array(
	'post_type' => 'attachment',
	'post_mime_type' => 'image',
	'posts_per_page' => -1,
	'post_status' => null,
	'post_parent' => 記事ID
); 
$attachments = get_posts( $args );
$images = [];
if ( $attachments ) {
	foreach ( $attachments as $attachment ) {
		$images[] = wp_get_attachment_image_src( $attachment->ID, 'full' );
	}
}

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です