web-dev-qa-db-ja.com

親テーマの機能を無効にすることは可能ですか?

親テーマのfunctions.phpで呼び出される関数を完全に無効にすることは可能かどうかと、もしそうなら、どのように? (もちろん、関数を削除せずに、子テーマのfunctions.phpに何かを追加することによって。)

4
Bram Vanroy

ある状況下でのみ。

  1. 親テーマの関数がfunction_exists条件式で囲まれている場合は、それらを置き換えることができるはずです。例えば:

    // Parent
    if (!function_exists('p_wpse_95799')) {
      function p_wpse_95799() {
        // 
      }
    }
    

    子テーマがp_wpse_95799という名前の関数を定義している場合、親関数は使用されません。これが可能性であるならば、あなたはちょうど何もしない関数を定義する必要があるでしょう。

  2. 関数が何らかのフィルタやアクションに「フック」されている場合は、フックを解除することができます。キャッチがあります。子テーマfunctions.phpが最初にロードされます。つまり、 filters を直接削除することはできないかもしれません。親のfunctions.phpが実行された後にそれらを実行するようにフックする必要があります。それ以外の場合は、追加されていないものを削除しようとしています。コーデックスから: "フィルタを追加した後に発生するフックにフィルタの削除を優先させる必要があるかもしれないことも注目に値します。 " ほとんどの場合、これは親のfunctions.phpの後に走るフックを見つけてそれにフックすること、おそらく add_action /の3番目のパラメータを操作することを意味します。 add_filter を使用すると、関数の実行が遅くなります。

これらは私が今考えることができるケースです。おそらく私は事件を忘れています。私が持っているなら誰かがそれを指摘すると私は信じています:)

PHPレベルの "関数の削除"はなく、同じ名前で2つの関数を定義しようとするとエラーになります。

削除したい関数のコードが表示されないので、それが可能な場合は、削除または変更することによって、何かを壊すことになります。少し注意が必要です。

8
s_ha_dum

コードを見ずに自分のしたいことを正確に実行する方法を正確に知ることは困難ですが、これは役に立ちます - 子テーマの親関数をオーバーライドする方法?

関数の変更に興味がない場合は、そのQ&Aの上書き部分を無視して、それがどのように削除されるのかに焦点を当ててください。

基本的に、あなたはあなたの子テーマのfunction.phpファイルでuse remove_actionまたはremove_filterを使い、テーマが設定された後にそれを実行したいでしょう。

0
Jared Sulzdorf