KUSANAGIでWordPressデータベースエラーが出る時の対処法
※本ページはプロモーションが含まれていますKUSANAGIでキャッシュを有効にし、サーバーのエラーログを見てみるとデータベースエラーがちょくちょく出ていました。
[error] 3822#0: *2524 FastCGI sent in stderr: "PHP message: WordPress データベースエラー: Column 'type' cannot be null for query INSERT INTO `wp_site_cache` (`hash`, `content`, `device_url`, `type`, `post_type`, `headers`, `user_agent`, `server`, `updating`, `create_time`, `expire_time`) VALUES …
調べてみると、KUSANAGI独自のキャッシュプラグインで上手く動いていない部分があり、とりあえずエラーが出ないようにできたのでその方法を紹介します。
※KUSANAGI7.8での事例です。
プラグインの修正
エラーを見ると、「type」カラムはnullじゃダメだというので該当箇所を探す。
該当ファイルは、
/home/kusanagi/プロビジョニング名/DocumentRoot/wp-content/mu-plugins/kusanagi-core/modules/page-cache.php
になるので開く。
581行めから635行目までの間で、表示されるページの種類でtype分けをしている。
if ( is_front_page() ) { $type = 'front'; $post_type = 'page'; $life_time_key = 'home'; } elseif ( is_singular() ) { $type = 'single'; …
その後キャッシュデータをデータベースに入れているが、404ページなどここで指定がされていないページでは「type」に何も代入されないのでエラーが出ている。
そこで、データベースに入れる前にtypeをチェックし、「null」でなければデータベースに入れるようにした。
656行目付近を変更
$cache_db->insert( $cache_db->prefix . 'site_cache', $data, array( '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%d', '%s', '%s' ) );
↓
if ( !is_null($data['type'] ) ) { $cache_db->insert( $cache_db->prefix . 'site_cache', $data, array( '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%d', '%s', '%s' ) ); }
これでとりあえずエラーが出なくなった。