wenty twelveの子テーマを作りサイトをカスタム中です。
WPのthemesの中にtwenty-childというディレクトリを作り親からコピーしてきたstyle.cssを設置してそれでcssを上書きをしています。
header.phpとfooter.phpも同じように親からコピーしてtwenty-childというディレクトリに入れました。
念のためfunction.phpもコピーして子テーマtwenty-childに入れました。
function.phpはオーバーライドできませんとあります。
functions.php の使用方法
オーバーライド?….読んでもよくわかりません。ただコピーするだけじゃだめなんですか?
教えて下さい。
/////////////////////////
子テーマfooter.phpをカスタマイズしようとしたら、エラー表示が出てfunction.phpの77行目がおかしいと言ってた(多分)だからfooter.phpは上書きできないと。
だから子テーマのfunction.phpをいったん削除したら、問題なくfooter.phpのカスタマイズが出来ました。
function.phpは他のphoとは違った特別なものっぽい。(多分)
////////////////////////
2014-05-30 の勉強会で謎がとけました。
オーバーライドとは?
例えばfooter.phpやheader.phpは、オーバーライドできます。「オーバーライドできます」と言うことは親テーマに書いてある内容を読み込んで、さらに子テーマに上書きした内容も読み込みます。ということではありません!
オーバーライド「できる」という事は、親のファイルは「読み込まれず無視」されるという事です。
functions.phpがオーバーライドできないと言うことは、親テーマと子テーマに同じ内容のもの(functions.php)があると駄目なのです。どちらも読み込んでしまうから、「あんた同じものがあるじゃないのよ!」と叱られてしまうわけです。叱られないようにするには、子テーマのfunctions.phpには追加した内容だけ書くようにします。まず最初に子テーマのfunctions.php内には親テーマに書いてあることは、削除しておきます。こうしておけば同じものが2つあるわけじゃないので、叱られません。ほっ
下記のものは、親テーマfunctions.phpからコピーした子テーマfunctions.phpです。(親テーマの内容を削除した状態のものです。)
(注意!)コメントアウトの部分は削除しないでください。下記参照。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
<?php /** * Twenty Twelve functions and definitions * * Sets up the theme and provides some helper functions, which are used * in the theme as custom template tags. Others are attached to action and * filter hooks in WordPress to change core functionality. * * When using a child theme (see http://codex.wordpress.org/Theme_Development and * http://codex.wordpress.org/Child_Themes), you can override certain functions * (those wrapped in a function_exists() call) by defining them first in your child theme's * functions.php file. The child theme's functions.php file is included before the parent * theme's file, so the child theme functions would be used. * * Functions that are not pluggable (not wrapped in function_exists()) are instead attached * to a filter or action hook. * * For more information on hooks, actions, and filters, @link http://codex.wordpress.org/Plugin_API * * @package WordPress * @subpackage Twenty_Twelve * @since Twenty Twelve 1.0 */ /** * Twenty Twelve setup. * * Sets up theme defaults and registers the various WordPress features that * Twenty Twelve supports. * * @uses load_theme_textdomain() For translation/localization support. * @uses add_editor_style() To add a Visual Editor stylesheet. * @uses add_theme_support() To add support for post thumbnails, automatic feed links, * custom background, and post formats. * @uses register_nav_menu() To add support for navigation menus. * @uses set_post_thumbnail_size() To set a custom post thumbnail size. * * @since Twenty Twelve 1.0 */ |
これで問題ありません!
子テーマfunctions.phpに何か追加したい場合は、この状態から追加していきます。
オーバーライドできる:親テーマにも子テーマにもhoge.phpがある場合、子テーマのhoge.phpが使われます。親テーマのhoge.phpは無視されます。
functions.phpはオーバーライドできない:親テーマにも子テーマにもfunctions.phpがある場合、始めに子テーマのfunctions.phpが読み込まれ、続いて親テーマのfunctions.phpも読み込まれます。無視されません。
実際のエラーについては、エラーが起きるソースをチェックしないと正確な事はわかりません。
今度、ソースを見せてください。
予想としては、おそらくfunctions.php内のスペルミスが原因でしょう。
記事のタイトルや、記事中に出てくる「function.php」は、正しくは、「functions.php」です。
文末の「phpとは違った特別なものっぽい。」とすべき所が、「pho」になってます。
もちろん、記事内のスペルミスとコードのスペルミスは直接関係ありませんが、
「ファイル名や関数名を正確に書かなくても平気な人なんだなあ。コードの方もスペルミスがありそうだなあ。」と予想できる投稿になっています。
細かい事を指摘し続けると、恋人に嫌われますが、プログラミングは細かい事の積み重ねなので、
一つ一つミスを潰していくしかありません。
>実際のエラーについては、エラーが起きるソースをチェックしないと正確な事はわかりません。
>今度、ソースを見せてください。
親からコピペしただけなのでスペリングミスはないと思います。(記事は思いっきり間違ってますね〜)金曜日の勉強会でチェックお願いします。
オーバーライド理解しました!
勉強会で謎が解けました。先生ありがとうございました。
内容は記事の本文に追加しました。