WordPressは人気のCMSで、かつ、カスタマイズしやすいツールなので、世界中のいろいろなサイトでカスタマイズ用のコードや方法が紹介されています。多分に漏れず、このサイトでも「少しでもお役に立てれば」という想いと自身の備忘録を兼ねて機能やコードの紹介をさせていただいております。
でも、せっかく自分の思う機能が実装できそうだと、紹介記事の通りに作業をしたのに
- そして何も起こらなかった・・・
- エラーが表示されて編集した画面が保存できなかった・・・
- 「重大なエラーが発生しました」と表示され、サイトの管理画面にも入れなくなった・・
となることは少なくないと思います。
もちろん、紹介している(されている)コードの利用については、紹介している人がすべての環境や状況に合わせて書いているものでもありませんから、たとえ明記されていないくても、あくまでも自己責任で行っていただくことが前提ですし、何かのトラブルが発生しても責任を持つことはできないですし、私自身もそうしたコードを使わせていただく場合にはコードの解説を読むのはもちろん、自身で何をしているコードなのか?というのもしっかり調べ、万が一のためにテスト用サイトで試してから導入するようにしています。
ただ、「コピペで・・」と書いてあるのをそのまま使えるだろうと思う方がほとんどですから、私もコードや機能を紹介することがあるサイトを運営している人間の一人として、コピペ用コードをコピーしたり、添付されているファイルを指示通りに転送して起こるトラブルについて、思い当たるケースと対応方法を紹介しておきたいと思います。
・・・の前にまずは他者が紹介しているコードを使う際の注意点から・・・
いろいろなサイトで紹介されているカスタマイズコードをコピーして使う前に・・
掲載されているページの公開日付(最終更新日付)は必ず確認しましょう
何かのカスタマイズをしようと一生懸命検索してたどり着いたページ。もうもう心はウキウキ、気分はワクワク💛ですぐに飛びつきたいところですが、まずはそのページが公開された(最終更新された)日付を確認しましょう。
ご存じの通りWordPressは非定期に更新されていっています。また、WordPressを動かしている環境も様々です。そしてテーマ構成・導入しているプラグイン・・・書ききれないほどサイトごとに内容は異なります。当時使えた命令文・記述方法でも今では使用できなくなっているものもありますから、ご自身のサイトのWordPressバージョンが最新であれば、比較的最近書かれた(更新された)記事の内容を参考にすることで、未然にトラブルを防ぐことができます。
できるだけ環境やバージョン情報が書かれているページを参考にしましょう
日付と似た内容ではありますが、親切なページでは、コード紹介時にどんな環境のどのバージョンのWordPressで動作したコードなのかが書かれています。環境やバージョンには以下のような要件があります。
- WordPress本体のバージョン
- サーバーの名称、PHPのバージョン、データベースの種類とそのバージョン
- 使用しているテーマとそのバージョン、親テーマなのか子テーマなのか?
- 使用しているプラグインとそのバージョン
他にもいろいろな要件がありますが、これらすべてを記載してコードや機能を紹介しているサイトは少ないです(私のサイトでも自己責任でコピー使用されるのを前提にしているので、よほど限定される場合でなければ記載していません)から、コードは書けないけど何してるかは理解できる、万が一トラブルになっても自身で元に戻すことができるスキルがなければ、そのままコピペして使用するのは避けた方がいいでしょう。
よくあるトラブルと対処方法の例
「親テーマ」「子テーマ」の違いによる不具合
WordPressのテーマには、すべてのプログラムが書かれている「親テーマ」と、基本的なプログラムは親テーマを踏襲し、独自のデザインやプログラムを追加できる「子テーマ」があります。
一般的に、管理画面から「外観」をクリックすると、親テーマは【テーマ名】そのもの、子テーマは【テーマ名-child】という風にテーマ名が表示されます(【テーマ名】+何かの文字列が子テーマだと思えばいいかと思いますが、そうでないものもあります)。
正確に調べるには「外観」→「テーマエディター」を開き、出てくる画面の最初の方に「Template:〇〇」と書かれていれば、〇〇というテーマの子テーマということになります。
親テーマと子テーマには、WordPressの動作そのものに指示や命令を出す「functions.php」というファイルがあり、何かの機能を追加したり、制御したりする場合にはこのファイルへ何かを追記するようになっています。恐らくコピペで・・というコードを紹介する記事にも「テーマのfunctions.phpへ・・・」という説明が書かれているかと思います。
この時気を付けたいのが、親テーマに記述するコードと子テーマに記述するコードとで異なる書き方をする場合があるということです。
例えば・・・
wp_enqueue_style( 'child-style', get_stylesheet_directory_uri() . '/style.css'
というのをテーマの「functions.phpへコピペします」と説明されていたとします。
この中にある「get_stylesheet_directory_url()」というコードは「今有効化しているテーマのstyle.cssというファイルがある場所」を指します。
つまり、
- 親テーマを有効化している場合には親テーマのstyle.cssというファイルがある場所
- 子テーマを有効化している場合には子テーマのstyle.cssというファイルがある場所
を指しています。要するに親テーマの中にあるファイルや記述を親テーマで呼び出す場合と、子テーマの中にあるファイルや記述を子テーマで呼び出す場合に有効なのです。
トラブルになりやすいのは、
- 子テーマが有効で、子テーマのfunctions.phpへ「get_stylesheet_directory_url()」というコードを書いているのに、呼び出すファイルや記述は親テーマにあるという場合→子テーマにファイルが存在しないのでエラーになる
- 親テーマが有効で、親テーマのfunctions.phpへ「get_stylesheet_directory_url()」というコードを書いていて、問題なく動作していたのに、子テーマを有効にした途端エラーになったり動作しなくなったりする
という2通りでしょう。今有効化しているテーマの!というのがミソになるわけです。
1の場合は子テーマにファイルや記述が存在しないわけですから、子テーマのフォルダ内などへ紹介されたものを転送または追記すれば大抵は解決します。
似たコードに「get_template_directory_url()」があります。よく似てますが、こちらは何が何でも親テーマ内のファイルやコードを参照しなさい!というものになります。親テーマのfunctions.phpへこのコードを使った紹介コードをコピペする場合には、2のトラブルを避けるために必ず「get_template_directory_url()」を使うようにしましょう。
※「get_stylesheet_directory_url()」「get_template_directory_url()」とも、最後の「_url」なしでも基本的に同じ場所を参照しますので、「get_stylesheet_directory()」「get_template_directory()」と書かれていても問題ありません。
独自関数名の重複による不具合
WordPress5.0以降、テーマファイルとして標準的に使うもの(「外観」→「テーマエディタ」で一覧リンクの下に日本語でどんなファイルかの説明書きがあるもの)を主として、動作に支障を起こす記述ミスや誤りがあった場合には、そのファイルを保存しないで、保存前の状態を保持するようになり、更新と同時にいきなり真っ白な画面になって管理画面からはどうにもならなくなることが少なくなりました。
そしてなぜ保存できないのかという理由が編集画面下に表示されるようになり個人的には非常にありがたく便利な機能が備わったと感動すらしています。
そのエラー表示の中の1つに
Cannot redeclare 関数名() (previously declared in wp-content/themes/テーマ名/functions.php:行数)
というのがあります。英語の得意な方なら冒頭に書かれている「Cannot redeclare」(再宣言できません)と書かれているので想像がつくと思います。
内容としては、コピペするコードに書かれている「関数名」の部分が今使っているテーマで既に使用されていますよ!ということなのです。
単純にこの「関数名」に当たる部分を別の半角英数字に変えれば問題は解消できます。
が、注意点が1点。
コピペコードの中には以下のようになっているものが多々あります。
function 関数名() {
処理する内容
}
add_action('指示', '関数名');
※最終行の先頭はadd_action以外であることがあります。
こういう形の場合は、1行目の「function 関数名」から「]」までに書かれていることをWordPressに指示して実行しなさいというものになりますから、「関数名」の部分は同じものにしなければなりません。
保存したらparse error: unexpected… やSyntax Error…と表示されるときは
結構多いのがこのタイプかも知れません。基本的にSyntax Errorは入力の誤り、parse error: unexpectedはプログラムの誤り(プログラムとして認識できませんという意味)になります。
ただ、これらのエラーが出る主な原因はプログラムが間違っているわけではなくコードの中に全角の文字が含まれていたり、全角と判断される空白(スペース)がある場合がほとんどです。
コピペして保存したらこのエラーになった場合には
- コードの前後にある空白をすべて省いてみる
- 「’」や「,」「{}」などが全角になっていないか確認し、修正する
をすることで大抵の場合は解消できます。
※WordPress公式サイトの関連ページはこちらにありますので、興味があれば参照ください。
動きを持たすjQueryやJavaScriptに関するエラー
紹介されているコードの中には何かの動作をさせる(よくあるのはスライド表示や遅延表示、スムーズに移動させる動作など)ためのものもたくさんあります。
トラブルとしてはコピペしたけど何も動かない、うまく動かない、・・・と思ったら他の機能もなんだかおかしい・・というのがほとんどだと思います。見た目には何もエラーが表示されないので???と困惑することが多いでしょう。
そんな時はまずなぜ動いてないのか?を探ります。
問題の出ているページを実際に表示して、キーボードの「F12」を押してください。ページ表示の上下左右のいずれかに、別の窓が表示されると思います(これを「デベロッパーツール」といいます)。そこに「X」「△」などが並んだ場所を見つけ、「X」をクリックすると画面がちょっと変わり、
- Uncaught SyntaxError:…
- Uncaught TypeError:…
という文字列で始まるエラーが表示されます。
基本的に何かの障害によってプログラムが動きません!と言っているものなのですが、原因は多岐にわたりますので、ここで紹介することはできません。
が内容をコピーしてググれば大抵の原因と対処方法が出てきますのでがんばって調べて解決しましょう。
私が知る限りでは
が分かりやすいかなぁと思います。
※本当にスクリプトのエラーは環境によってさまざまですので、簡易的な説明となりますがご容赦ください。
いかがでしたか?少しでも遭遇したトラブルに対する対応のお役にたてたでしょうか??
そのほかにもいろいろなトラブルがあろうかと思いますので、また折を見てケース紹介できればと思います。
おまけ エラーが出てしまったら
見たことのない警告表示が出たり、「重大なエラーが・・・」となって表示画面に何も表示されなくなったりするとびっくりしますよね?
でもそこはまず落ち着いて・・・エラーがエラーを呼ばないようにすることが大切です。
私はココナラでそうした相談もお受けしているのですが、「〇〇をしたら・・」という相談を受ける方のほとんどが、聞いていくとそこに行きつく前にそれはそれはたくさんの悪あがき対処をされています。ただ、何度かやり取りしていくと、決して隠してたということではなく、もう何が何だか分からなくなって伝えることができないというのが実情であることがほとんどです。
そうなると経験上こんなことしたんだろうなぁ・・あんなことしたんだろうなぁ・・というのを想像して対応させていただくのですが、実にいろいろなパターンが存在します(トラブル対応は経験と引き出しの数が命だと実感できる瞬間です)。
ではどうやったらエラーがエラーを呼ばないようにするのか??その極意は2つ
1つめは、
カスタマイズはとにかく1つだけ行ってしばらく運営すること
2つめは、
トラブルが起きたら、まず何よりも先に元に戻すこと
です。この記事の中盤でもお話した通り、最近のWordPressのバージョンでは、滅多に何もできない状況にはなりません。テーマファイルを触って何かあればロールバックされますし、重大なエラーが発生すればリカバリーモードで復旧できますから(リカバリーモードで復旧するためには、管理ユーザーのメールアドレスをきちんと届くものにしておく必要があります)。
どちらもちょっと何かの操作に慣れてきたころに私も含め皆さん必ずやらかします。まあ同じファイル触るんだからあれとこれと・・・で更新・・・あれ?ってなるんですね。2に絡みますが、編集したのはそのファイルなので、そのファイルで変えたところを元に戻せば絶対確実に元に戻るんです。例えばfunctions.phpを変更して保存できたのにエラーが出てしまったら、FTPなどで一旦パソコンへファイルをダウンロードし、変更したところだけを元に戻してから再度アップロードすれば、絶対に確実に元に戻ります。また、カスタマイズが成功したと思っていても実はしばらく運営したらトラブルに・・ということもありますから、1つだけ行ってしばらくそのまま運営することもトラブル防止のコツです。