こんにちは、コワーキングスペース Room8 鶴田です。
今回は、kusanagiでDigiPressのテーマを使うと起こるエラーを修正したお話です。
ちょいちょいお問合せがあり、その都度、修正方法を調べてたので備忘録的にメモしておこうかと
なので、kusanagi使ってないし、kusanagiだけどDigiPress使ってないって人は、読まなくても良いです(笑)
ちなみにkusanagiとは、超高速WordPress仮想マシンです。
超高速Wordpress仮想マシン:kusanagiの詳細はこちら
DigiPressとは、レスポンシブやAMPに対応したおしゃれな有料テーマです。
WordPressテーマ : DigiPressの詳細はこちら
症状は、設定項目が、反映されない
DigiPressは、DigiPress用の設定画面があり、そこでデザイン等を弄るのですが、設定画面で変更して保存をすると以下のようなエラーメッセージが表示されます。
{wordpressのインストールパス}/wp-content/uploads/digipress/{テーマ名}/css/visual-custom.css: The file is not rewritable. Please change the permission to 666 or 606.
このメッセージを読むと、パーミッションが悪い
666か606にしろと怒られてますよね?
そこでパーミッションを666にしてリトライ
しかし、同じメッセージが表示される・・・
対処方法は2つ
応急処置(コマンドラインからgzファイルの展開)
とりあえずの応急処置としては、エラーメッセージで表示されているパスを見ると以下のファイルがある。
visual-custom.css.gz
このファイルを手動で展開します。
kusanagiを使っている方なら僕がわざわざ説明しなくても分かるとは思いますが一応
僕は、sshでログインしてgzipコマンドで展開しました。
$ su パスワード:rootのパスワード # cd /home/kusanagi/{プロビジョン名}/DocumentRoot/wp-content/uploads/digipress/{テーマ名}/css # gzip -d visual-custom.css.gz gzip: visual-custom.css already exists; do you wish to overwrite (y or n)? (yを押してEnter)
とりあえず、今回は、macchiato
と言うテーマだったので上記の{テーマ名}の所は「macchiato」が入ります。
違うテーマを使ってる人は適当に置き替えてください。
これで、設定は反映されたと思います。
テーマファイルの修正
一度だけの設定なら上記の方法でいいと思いますが、これからサイトを作ろう思うと、修正するたびに手動で更新していかなければいけない。
それは面倒なので、PHPを修正してみました。
上記テーマ以外でも、いくつかのテーマで試してみましたところ、どれも正常に設定が反映されるようにはなりましたが、テーマファイルを直接弄るので自己責任でお願いします。やる前は、必ずファイルをバックアップしておいてください。
まず、やり方の流れ
- 上記のパスのパーミッションを666に変更(606は試してません)
- create_css.phpを修正
cssが作られるのディレクトリのパーミッションの変更
chmodでパーミッションを変更します。
スーパーユーザーで実行する必要があります。
$ su パスワード:rootのパスワード # cd /home/kusanagi/{プロビジョン名}/DocumentRoot/wp-content/uploads/digipress/{テーマ名}/ # chmod -R 666 css
llコマンドでパーミッション確認できます。
create_css.phpファイルの修正
create_css.phpのファイルを探し修正します。
ファイルのある場所は、以下です。
テーマにより違う場所が違う可能性もあります。
/home/kusanagi/{プロビジョン名}/DocumentRoot/wp-content/theme/{テーマ名}/inc/scr/
create_css.phpを開いたら、以下の場所を探してください。
「Write File」とかで検索すればすぐに見つかると思います。
ここを以下の様に書き換えます。
何をしているかと言うと、request_filesystem_credentials関数を使って、ファイル操作権限をもらっています。
もっとスマートで良い方法があるかもしれませんが、あったら教えて下さい。
欠点としては、テーマファイルを修正してるのでテーマをアップデートすると初期化されます。
アップデートしても設定内容は保持されると思いますが、もし色が初期状態に戻ってしまったとか、新機能があり修正したいという場合は、再度上記の設定をする必要があります。
余談
テーマの設定画面で色々設定して保存をすると、cssディレクトリの下に、visual-custom.css.gzファイルができます。
visual-custom.css.gzファイルが無い状態で、設定画面で保存をすると、このファイルのパーミッションが644で作成され、パーミッションエラーがでます。
これで随分ハマりました・・・
visual-custom.css.gzのパーミッションを666に変更したら(それ以外のファイルも)無事保存出来るようになりました。
※2020年9月追記:クライアントがテーマをアップデートしたため、再度この問題が発生したので修正したのですが、改善されず。
調べると、ファイルが書き込み可能ではないという判定(is_writable関数)、しかしパーミッションは変更してある。
するともう一つの可能性としては、ファイル所有者と実行者の違い、デフォルトでは、所有者・グループがkusanagiとなっている。
これを、所有者:https・グループ:wwwに変更したところ無事書き込まれるようになった。
コマンドは、chown
DigiPressだけで起きる問題ではない
そもそも、この問題はkusanagiのセキュリティーがレンタルサーバーよりも強い事により発生します。DigiPress以外のテーマであってもファイル等を出力するよう仕組みがあるテーマだと同じ様な症状が発生する可能性はあります。
ただパーミッションエラーと出るのは、Digipressの仕様です。
実際にはパーミッションエラーではなく、WP_Filesystem()から値を取得できないことが原因です。
他のテーマで設定が反映されない時には、WP_Filesystem()という文字列を探してみてはいかがでしょう?
他のテーマで似たような症状が起きたらとりあえず、該当箇所を探してみてください。
まとめ
DigiPressのテーマのパーミッションエラーは、create_css.phpの修正等で直せます。同じ様に困っている人がいたら参考にしてみてください。
あと、もっと良い解決方法があるという人は、教えて下さい!
今回修正したテーマはこちらです。
「Macchiato」
DigiPressは、とてもおしゃれなテーマなので僕は好きです。
上記以外にも色々良いテーマがあるので見てみてください!