• 解決済 rooster0364

    (@rooster0364)


    同じ関数名は子テーマの定義に置き換える+追加の関数を子テーマのfunctions.phpで定義したいです。

    日本語Codexに「functions.phpはオーバーライドできないが、子テーマに同名の関数があった場合はそちらが使用されます」とありますが、ネット上で情報を探していると子テーマのfunctions.phpで「同じ関数名を使うとエラーになる」されているものもあります。

    このフォーラム内でも子テーマのfunctions.phpについての質問が多くありましたが、このあたりの問題は過去のバージョンでの話と解釈してよいのでしょうか?

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • こんにちは

    子テーマで、親テーマと同じ関数名が使えるかどうかは、親テーマの設計の仕方によります。

    if( ! function_exists( 'hoge' ) ) {
    
      function hoge(){
    
      }
    
    }

    親テーマで、上記のように書いてある関数は、プラグアブル関数と呼ばれていて、子テーマで同名関数を定義するとオーバーライドできるようになっています。

    テーマの中には、

    function hoge(){
    
        if( ! function_exists( 'child_hoge' ) {
            return child_hoge;
        }
    
    }

    という書き方をするものもあります。

    この場合は、子テーマに関数を書いてオーバーライドしたい場合は、prefix child_をつければ、親テーマの関数をオーバーライドできるといったものです。

    これ以外で、オーバーライド可能に設計されている場合もあります

    function hoge($content){
    
     return apply_filters( 'hoge', $content );
    }

    フィルタフックやアクションフックを追加して、オーバーライドできるようにしたものもあります。

    いずれにしろ、親テーマしだいで決まります

    トピック投稿者 rooster0364

    (@rooster0364)

    nobitaさん
    ありがとうございます。
    そういうことなんですね。

    ただ、日本語Codexではfunction_existsみついての解説はなかったのですが、これではじめてオーバーライドされるということなのでしょうか?
    そうでない場合は同じ関数名がダブるとやっぱりエラーになってしまうのでしょうか?

    ただ、日本語Codexではfunction_existsみついての解説はなかったのですが、これではじめてオーバーライドされるということなのでしょうか?
    そうでない場合は同じ関数名がダブるとやっぱりエラーになってしまうのでしょうか?

    はい、そうです

    トピック投稿者 rooster0364

    (@rooster0364)

    自作テーマを子テーマで運用したいと考えていたので、気になっていました。
    ご回答を参考にやってみます。
    大変参考になる回答をありがとうございました。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「子テーマfunctions.phpでの同名関数について」には新たに返信することはできません。