web-dev-qa-db-ja.com

取り外し不可能な親テーマ関数をオーバーライドする方法

次のようにして、子テーマにPHPテンプレートがあり、関数ale_filter()を呼び出します。

        <div class="articles">
            <?php ale_filter($_POST);?>
        </div>

この関数は、親テーマファイル/aletheme/functions.filter.phpで定義されています。このファイルを自分の子テーマにコピーし、関数を編集し、問題のPHPテンプレートが親テーマの関数ではなくこの関数を呼び出すようにします。どうすればいいの?

同じファイル名と相対パス(/aletheme/functions/filter.php)を使用して、親テーマファイルを子テーマに既にコピーしました。


A 前回のStack Exchangeの質問 と3つの方法で page へのリンク。これら3つの方法は次のとおりです。

  • プラガブル関数を利用する - このメソッドは、親テーマ関数がプラガブルである場合にのみ適用されます。私のものではありません。
  • 子供のテーマ機能の優先順位を上げる - 私の場合はどうすればよいかわからない。与えられた例はWordPressフックに取り付けられた親テーマ関数のためのものでした、そして私のものはそうではありません。 PHPのproc_Niceのmanページ もそれほど明確ではありませんでした。私はそれについて少しフォローアップすることができると思います。たぶんここの誰かがアイデアを持っています。
  • フック、アクション、およびフィルタを利用する - この方法は、親テーマ関数がWordPressフックにアタッチされている場合にのみ適用されます。それが私の場合には当てはまるとは思わない。

私は他のいくつかのStack Exchangeの質問を見つけました、しかし私が私の場合には当てはまるとは思わないすべての記述された方法における答え:

ありがとう。

4
cag8f

この関数は子テーマのテンプレートで使用されているため、別の名前の関数を使用するのを妨げるものは何もありません。そのため、実際に関数をプラグインする必要はなく、必要な機能を実行する関数を作成して代わりにそれを使用する必要があります。

それでale_filter()をあなたの子供のテーマにコピーし、ale_child_filter()のように改名し、それを好きなように変更し、そしてその関数を使用するようにテンプレートを変更してください。

関数が子テーマで上書きできない場所で使用されている場合にのみ、関数をプラグインする必要があります。それを差し込むことはあなたが機能が使用されている場所を変更するためのアクセス権を持っていないときにあなたが機能を再定義することを可能にするでしょう。どの機能を使用するかを変更することはできますので、プラグインする必要はありません。

6
Jacob Peattie