2014/04/26カテゴリー:WordPress「WordPressの子テーマ作成なんて簡単でしょ」と侮っていたらハマったお話です。3つの点で躓きました。「Template」の指定はフォルダ名でテーマディレクトリを取得する関数に注意functions.phpは上書きされないこの問題を解決する方法は3つ例えば親テーマのfunctions.php「Template」の指定はフォルダ名で子テーマとして認識させるにはstyle.cssが必要です。twentyfourteen*/という2行の記述をしておく必要があります。この「Template」の項目は親テーマのフォルダ名を指定しましょう。間違えると以下のエラーが発生してしまいます。「壊れているテーマ以下のテーマはインストールされていますが不完全です。テーマにはスタイルシートとテンプレートが一つずつ必要です。親テーマが見つかりません。親テーマをインストールしてください。自分は「Template」の項目に親テーマの名前(style.cssで設定されたテーマ名)を入力しちゃいました。これでは駄目なんですね、フォルダ名を指定しましょう。このようなエラーが出ますテーマディレクトリを取得する関数に注意CSSやJavaScriptを読み込むためにURL指定する時、テーマのディレクトリを取得するためget_template_directory_uri()を使いますよね。この関数を子テーマのテンプレートで使用すると親テーマのディレクトリURLが返ってきてしまいます。するのかというと、子テーマではget_stylesheet_directory_uri()を使えば子テーマのディレクトリURLが返ってきます。日本語版functions.phpは上書きされない基本的に子テーマは(親テーマのテンプレートを継承するので)style.cssだけで動きます。WordPressに必要なテンプレートが子テーマに無い場合、親テーマのテンプレートを参照します。手を加えたいテンプレートのみ、親テーマから子テーマのフォルダへコピーして書き変えます。子テーマにテンプレートがあった場合、親テーマのテンプレートを上書きするイメージです。このような感じで必要なテンプレートをどんどん親テーマからコピーして良いのですが、1つだけ例外があります。それはテーマ用の関数をまとめるfunctions.phpです。子テーマのfunctions.php親テーマのfunctions.phpという順番で読み込まれる仕様になっています(上書きされません)。継承元の親テーマのfunctions.phpが子テーマ作成に対応したソースコードになっていなければ、テンプレートをそのままコピーしてしまうとPHPエラーが発生します。してそのままコピーするとエラーが発生するかというと、上書きされず順番に読み込まれてしまうのでfunctions.phpに書かれた、主に関数(その他ではクラスやグローバルな変数など)が二度定義されることになってしまうのです。二重定義が起こるとPHPはエラーを吐きます。この問題を解決する方法は3つこの関数の二重定義を回避する方法は3つあります。子テーマのfunctions.phpから関数(やその他被ったら困るソースコード)を削除する関数名を変更する既に定義されているかを調べるPHPの関数で回避するです。1つ目は特別なことが無ければコピーしてきたfunctions.phpの中身を全部削除しちゃっても良いと思います。「あ、これ必要だった」と気付いたらまたコピペで良いでしょう。1,2の方法で大体の場合はOKなのですが、3つ目の「PHPの関数で回避する」というのはどういう状況で必要かというと、子テーマが作成されることを想定している時なんですね。この二重定義を回避するには、関数が既に定義されているか調べる関数function_exists()でif判定する必要があります。(クラスを使用する方法もあります。)例えばfunctions.phpをそのまま子テーマにコピーした例を示してみます。$title;}親テーマのfunctions.phpが上記のようになっていて、これをそのまま子テーマにコピーするとfunctions.phpの内容は以下のようになります。$title;}先述した通り同じ関数が2つ出来上がってしまい、二重定義となりエラーになります。先ほど挙げた関数function_exists()の出番です。この関数に引数として渡した文字列の関数名が既に定義されていた場合、TRUEが返ってくるのでコレを利用します。}}こうすることで関数の二重定義を防げます。子テーマが作成される、もしくは作成されるかもしれない場合はこの点に注意したいですね。MarkRyoichi(しつ)除菌ティッシュを買い込んで使いきれずによく乾かす人。療養目的で退職し、どうやって生きていくか模索中。最近は勉強目的でLaravelやVue.js弄ったり、趣味で音で遊んでます。※2019年10月16日現在ブログリニューアル中です。崩れなどが発生していたらすみません。Log検索:検索カテゴリーCSSHTMLJavaScriptUnityWebサービスWordPressデザイン。