WordPressのサムネイル再生成プラグイン – Regenerate Thumbnails

WordPressでサーバへの負荷軽減の為にフルサイズ画像のみ生成するように設定していたのですがサムネイル画像を使用する必要が出てきたのでサムネイル画像再生成の方法についてシェアしたいと思います。

前置き

WordPressのデフォルトのメディアの設定は以下の通りになっておりサムネイル、中サイズ、大サイズ、フルサイズが生成され “wp-content/uploads/YYYY/MM/”に格納されます。

またこの値を全て0にすることでフルサイズのみ生成することも可能です。

この時データベースの wp_postmeta > _wp_attachment_metadata に次のように画像のサイズやそれに対するファイル名、Exif情報等が格納されます。当然メディア設定でフルサイズのみを生成した場合には、thumbnail、medium等の情報はなくなります。

a:6:{s:5:"width";s:3:"584";s:6:"height";s:3:"438";s:14:"hwstring_small";s:23:"height='96' width='128'";s:4:"file";s:13:"wckobe-01.jpg";s:5:"sizes";a:5:{s:9:"thumbnail";a:3:{s:4:"file";s:21:"wckobe-01-150x150.jpg";s:5:"width";s:3:"150";s:6:"height";s:3:"150";}s:6:"medium";a:3:{s:4:"file";s:21:"wckobe-01-300x225.jpg";s:5:"width";s:3:"300";s:6:"height";s:3:"225";}s:14:"post-thumbnail";a:3:{s:4:"file";s:21:"wckobe-01-584x288.jpg";s:5:"width";s:3:"584";s:6:"height";s:3:"288";}s:13:"large-feature";a:3:{s:4:"file";s:21:"wckobe-01-584x288.jpg";s:5:"width";s:3:"584";s:6:"height";s:3:"288";}s:13:"small-feature";a:3:{s:4:"file";s:21:"wckobe-01-400x300.jpg";s:5:"width";s:3:"400";s:6:"height";s:3:"300";}}s:10:"image_meta";a:10:{s:8:"aperture";s:1:"0";s:6:"credit";s:0:"";s:6:"camera";s:0:"";s:7:"caption";s:0:"";s:17:"created_timestamp";s:1:"0";s:9:"copyright";s:0:"";s:12:"focal_length";s:1:"0";s:3:"iso";s:1:"0";s:13:"shutter_speed";s:1:"0";s:5:"title";s:0:"";}}

ここに格納されたデータの使用例としては以下のようにwp_get_attachment_image_srcでサイズを指定した時の画像URLの取得等に利用されます。

<?php
$attachment_id = 1;
$image = wp_get_attachment_image_src( $attachment_id, 'thumbnail' );
?>
<img src="<?php echo $image[0]; ?> width="<?php echo $image[1]; /> height="<?php echo $image[2]; ?> />

本題

上述した通り_wp_attachment_metadataの情報は画像をアップロードした時点で設定されるため、初期のメディア設定でフルサイズのみを生成する、としてあとからサムネイル画像を使用したいとなっても当然サムネイル画像URLは取得できず、フルサイズ画像のURLが取得されてしまいます。

そこでRegenerate Thumbnailsプラグインを用いてサムネイル画像再生成及び_wp_attachment_metadata情報更新を行いたいと思います。
Regenerate Thumbnails

使い方は以下の通り。

  1. Regenerate Thumbnailsプラグインをインストール、有効化。
  2. 設定 > メディア で画像サイズを再設定。
  3. ツール > Regen. Thumbnails でRegenerate All Thumbnailsを押下。
  4. 再生成中・・・

wp-content/uploads/フォルダを見てみるとメディア設定で指定したサイズの画像が再生成されていると思います。
また、_wp_attachment_metadataの情報も更新されています。

エックスサーバー、シックスコアのPHPバージョンアップで躓いたメモ

WordPress3.2系からサーバ要件としてPHP5.2.4以上が必要となりました。
サーバの用意 – WordPress Codex 日本語版

運用しているエックスサーバー,シックスコア(以下エックスサーバー系)では2011/09/20現在PHPバージョンは以下の通り

  • PHP4.3.9(非推奨)
  • PHP5.1.6(推奨)
  • PHP5.2.14
  • PHP5.3.3

これまで5.1.6を利用していたものをWordPressバージョンアップに合わせて5.3.3にアップグレードすることにしました。
その際、WordPress、オリジナルプログラムでPHPのエラーが発生したので解決方法をシェアしたいと思います。

PHPをバージョンアップ後もWordPressのバージョン未対応警告が表示される

コントロールパネルでPHP5.3.3に変更したにも関わらず以下のような警告が表示されてしまいます。

サーバーの PHP バージョンは 5.1.6 ですが WordPress 3.2.1 は 5.2.4 以上のみでご利用になれます。

原因としてはエックスサーバー系では.htaccessのAddHandlerで以下記述をしないとPHP4.3.9として認識されるらしく、今回は”AddHandler x-httpd-php5 .php”としていた為、PHP5.1.6として認識されていたようです。
PHP5.3.3用の記述により正常にWordPressが表示されるようになりました。

PHP4.3.9
.htaccessに記述必要なし
PHP5.1.6
AddHandler x-httpd-php5 .php
PHP5.2.14
AddHandler x-httpd-php5.2 .php
PHP5.3.3
AddHandler x-httpd-php5.3 .php

以前PHP5.1.6でWordPressをインストールした際も.htaccessにAddHandlerで指定していなかったのでPHP4.3.9と誤認識されて躓いた記憶があります・・・

PEARモジュールが読み込まれない

require_once 'PEAR.php';

自作プログラムでPHP5.1.6までは標準でインストールされているPEARの読み込みが上記で動作していたのですが5.3.3にバージョンアップ後は以下のエラーが出て読み込まれていないようでした。

Warning: require_once(PEAR.php) [function.require-once]: failed to open stream: No such file or directory in /hoge/hoge.php on line 2
Fatal error: require_once() [function.require]: Failed opening required 'PEAR.php' (include_path='.:') in /hoge/hoge.php on line 2

PEARへのパスが通っていないのは分かったのですがマニュアルやよくある質問を検索してみてもそれらしい解決方法は見つからずgoogle先生に頼ることに。
Xserver の便利なphp.ini のカスタマイズ – Mottys Web page!より解決方法が見つかりました。

php.iniに以下を記述することでPEARへのパスを通すことができました。

include_path = ".:/usr/share/pear5.3"

エックスサーバー系はどうもPHPバージョン変更に対するphp.iniへのサポートがいまいちなのか、エックスサーバではバージョン切り替えページに以下の注意書きがあったのですがシックスコアではありませんでした。

■お客様側で個別にphp.iniを設置されている場合のご注意
 【PHP5.2.x】【PHP5.3.x】では php.ini 未設定項目の値は
 php4/php5.1とは異なる値となる場合があります。

特にお客様側で個別に設置されているphp.iniにて、
 「sendmail_path」や「date.timezone」が未設定の場合、
 プログラムが正常に動作しなくなる可能性があります。
 上記現象を回避するには、事前に php.ini に設定値を追記する必要があります。

※「sendmail_path」と「date.timezone」のデフォルトのphp.ini設定値は以下になります。
 —————————————-
 sendmail_path = /usr/sbin/sendmail -t -i
 date.timezone = “Asia/Tokyo”
 —————————————-

案の定シックスコアでdate.timezoneを設定していなかったためエラーで躓きましたし・・・

エックスサーバ系は管理画面もわかりやすくてバージョンアップ対応なんかも迅速なのでよく利用させて頂いているので、マニュアルをもう少し充実させて頂ければと思います。