wordpress覚え書き一覧

【welcart】welcartのメジャーアップデートにようやく対応

当店のWebサイトはWordPressで作られおり、ショッピングカート部分はwelcartというECプラグインを使用しています。Wordpressは強力なCMSで、さまざまなプラグイン(welcartもその一つ)が用意されている他、カスタマイズも比較的容易でSEO対策も優秀なため、そのWordpress上で動き、原則無料(制作・カスタマイズの有料オプションあり)のwelcartはとてもありがたいプラグインなのです。

そのwelcartが、このたびVer. 2.7へアップデートを行ったのですが、そのアップデートがデータ構造まで変更するというメジャーなものだったため、当HPもその煽りを受けて様々不具合が発生する事態となりました。

以下備忘録として、症状と行った対策を書き記しておきます。

1. welcartデータの更新が途中で止まる
Ver. 2.7へアップデートした後、welcartデータの更新が必須となりますが、その更新作業が25%ほどで止まってしまいます。実はこの症状、Ver. 2.6の時にも起こりましたが、その時はwelcartレスキューへ連絡したところ修正されましたので、今回はバージョンアップを待ちましたが、Ver. 2.7.2になっても対応されなかったため、再びwelcartレスキューへ連絡。Ver. 2.7.3で無事データ変換が完了しました。

2. NEW ARRIVALリストが表示されなくなる
次の検索結果が表示されなくなる原因と同じなのですが、当WebpageはWelcartがカスタムフィールド(メタキー)に作っている「_itemCode」という項目を参照して、welcartのアイテムか通常の記事なのかを判断していた他、「NEW ARRIVAL」では並べかえ用のキーに使用していました。
この「_itemCode」が原因と分かるまでに少し苦労しましたが、実は随分前から「Welcart 2.7 のためのカスタマイズ修正」というドキュメントが発表されていたようです。マニュアル・ドキュメント類はきちんと読まないといけません。
NEW ARRIVALの並べかえは日付がメインで「_itemCode」は同一日時だった場合にのみ意味のある値でしたので、Wordpressのメタキー「ID」で代用することにしました。

3. レコード(welcartアイテム)の検索結果が表示されなくなる
上記同様「_itemCode」をwelcartアイテムの確認に使用していたのが原因でした。上手い具合に、すべてのwelcartアイテムに並べかえのためのメタキー文字列「Sorting」が埋め込んでありましたので、「_itemCode」の代わりに「Sorting」を参照することで解決しました。「Sorting」はWelcart内部のメタキーではなく、独自に追加したメタキーだったため問題なく使用できました。

4. 通常記事の検索結果が表示されなくなる
前述の通り当Webpageは「_itemCode」の参照によってWelcartアイテムの場合と通常記事の場合とで表示方法を変えていたのですが、検索用窓も別々に設定しており、通常記事検索とレコード(商品)検索が個別に行えるようになっていました。上記の通りレコード検索の方は復旧したのですが、通常記事検索は復旧しませんでした。
これは原因に気づくのに苦労しました。あれこれと勘でいじくってみても復旧しなかったのですが、ふと検索後のURLを見てみると、

 https://classicus.jp/category/[homeurl]?noitem=y&s=シェーンベルク

となっています。どうやら<form>内のショートコードで設定した「action=”[homeurl]“」が上手く働いていないようです。ひとしきり何が原因か考えたりソースコードを眺めたりしてみたのですが、よくわからず、さりとてステップ・バイ・ステップで原因を探るのも面倒なため、「action=”/”」としてお茶を濁してしまいました。デバッガーを使えばたちどころに判明するのかもしれませんが、使ったことがないものですから…。これは、welcartのアップデートが原因ではなかったかもしれません。

以上、ほぼ丸一日を費やしてようやく通常状態へと復旧した次第。今回はWelcartが使用していたメタキーの扱いが大幅に変更されたため、カスタマイズした部分で大きく影響を受けてしまいました。


【wpメモ】500 Internal Server Errorが出現した

ご存知のように、現在のCLASSICUSのWebサイトはWordPressで作られおり、ショッピングカート機能はwelcartという、標準機能は無料のWordPress用EC(eコマースの略らしい)プラグインを使用しています。

WordPressというのは非常に簡単かつ強力なCMS(Contents Management Systemつまりコンテンツ管理システム。次々と現れる略称の数々、まったくついていけません)で、無数にあるテーマやプラグインなどを選んでいくだけで相当に完成度の高いWebページ(昔はHP、つまりホームページと言ったものですが)を作ることができます。html手打ちをしてWebをコツコツと作っていた世代から見ると隔世の感があります。

さてこのWordPress、テーマやらプラグインを選び、ちょっとしたデザインや遊びをCSS(カスケード・スタイル・シート、要はhtmlの装飾要素のようなものです)をいじくり回して満足しているうちは良いのですが、本格的に動作の原理(つまりは表示する内容やら順番やら)を変更しようとすると、いささか厄介な事になります。

詳しくは他所へ譲るとして、WordPressはPHPという言語で書かれており、このPHPをカスタマイズすることによって、Web上で可能なことはほとんど何でも実現できてしまう、ある意味禁断の果実といえます。

CLASSICUSのWebページも、特にwelcartを独自の仕様で表示させたかったためもあってPHPをカスタマイズしているのですが(ただし、このPHPカスタマイズも、最近のWordPressは子テーマをカスタマイズすることによって、テーマの基幹部分を壊したり、更新によってカスタマイズが消去されるというようなことが防止されるようになっています)、このPHPカスタマイズによってエラーが出てしまうことが少なからずあります。

最も多いエラーは単純な文法エラーです。括弧が対になっていなかったり、関数の綴り間違いなど、ごく簡単かつ見落としがちなこのようなエラーによって、いきなりWebページが表示されなくなってしまうため、初めて出くわした時には慌てふためいてしまいます。また、エラーの種類は千差万別ですから、気がつくときにはすぐに気がつくのですが、単純であればあるほど見つからなかったりするものです。

ようやく本題です。 商品の並べ替え方法を見直そうと、久々にPHPをカスタマイズ(ややこしく表現すれば、function.phpの並べ替えフックの変更)したのですが、WordPressのエディターで更新したところ、突如として真っ白な画面に「500 Internal Server Error」と表示されてしまったのです。

こうなってしまうと、WordPress自体が動作を止めてしまうため、FTPからファイルをアップロードして復旧を行うより他なくなってしまいます。ところが、FTPで変更した部分を元に戻してもWordPressは動作せず、いささか慌ててしまいました。

ひとしきり検索をして、色々な事例を眺めて思案したところで、手始めにfunction.phpを消去してみますと、何事もなかったように復旧してしまいました(function.phpは親テーマにもあるため、子テーマのものが消えても大きな問題とはなりません)。次に、カスタマイズした部分をコメントアウト(/* */ で囲い言語と見なされないコメントとすること)したfunction.phpをアップロードすると、これもまたごく普通に動作します。

これで、エラーはカスタマイズした中にあることが分かりました。しかし、何度見直し、似たような部分と比較しても、エラーらしきものは見つけられず、コメントアウトを外した途端に「Error 500」となってしまいます。

あちらを消しこちらを直し何度試してみても「Error 500」から逃れることが出来ず諦めかけたところで突然閃き、テキストエディターにペーストしたfunction.phpに半角文字検索をかけてみたところ、半角スペースであるはずの部分に謎の空白が挟まっていることが判明しました(キャプチャ写真参照)。そこで、その謎の空白を正しい半角スペースへ変更したものをFTPでアップロードしたところ、あっけなく動作してしまいました。

この謎スペースの文字コードは「00A0」で、これは「ノーブレークスペース」というものらしく、手打ちhtml世代は良くお世話になった「&nbsp;」と同じもののようです。アルファベットや括弧などの半角と全角の間違いはチェックしていたのですが、まさかスペース部分にこのような罠が潜んでいようとは思いもよりませんでした。一体このようなものがいつどこで混入したのか、謎は残ったままですが。

レアケースとは思いますが、構文上問題が無いのにPHPの動作がおかしい場合にはスペースや改行などに怪しい文字コードが潜んでいないかチェックしてみても良いかもしれません。