2016-01-27 6 views
5

私自身のテーマを作成しました。私はフックの登録を解除することができないことを除いて、すべてが素晴らしい作品です。Custormizrテーマの親アクションを置換する

$これは、クラスTC_footer_mainで、次のコードは、私がいない成功を収めていくつかの削除の操作を試してみました__construct

add_action ('__colophon'  , array($this , 'tc_colophon_center_block'), 20); 

です。私はちょうどフッターを削除/変更しようとしています:

remove_action('__colophon' , 'tc_colophon_center_block' , 55);

または

remove_action('__colophon' , array('TC_footer_main','tc_colophon_center_block') , 55);

私も

remove_action('__colophon' , TC_footer_main::$instance->tc_colophon_center_block() , 55);

を試みたしかし、それはようにエラーを投げましたTC_footer_mainは時間が私のfunctions.php fを読み込まなかったileが走った。

答えて

3

私はフッターを削除/変更しようとしています:

私はあなたを考えますtc_colophon_center_block()メソッドの出力を変更するには、それをもっと複雑にする必要があります。

add_filter('tc_credits_display', function($html) 
{ 
    // Modify output to your needs! 
    return $html; 
}); 

は、あなたのニーズにそのブロックを変更するには:

ちょうどtc_credits_displayフィルタを使用しています。

(それが許可されています場合は)全く出力を削除するには、単に使用:

  • tc_copyright_link
  • tc_credit_link
  • tc_wp_powered
  • add_filter('tc_credits_display', '__return_null', PHP_INT_MAX); 
    

    あなたが好きなフィルタへのさらなるアクセスを持っています

から選択してください。

これだけです!

+0

ps:私はアフィリエイトではありませんが、プロバージョンのように見えますが、カスタマイザの設定でフッターを直接変更することができます。 – birgire

+0

ありがとう、私はヘッダーを自分で変更することができますが、私はそうすることでベストプラクティスを望んでいました。親のテーマでハードコーディングするのではなく – c3cris

3

function.phpに次のコードを追加します。 after_setup_themeフックを呼び出します。

// replace parent function 
function child_theme_function() { 
    // your code goes here 
} 

function my_theme_setup() { 
    remove_action('__colophon', 'tc_colophon_center_block', 1000); 
    add_action('__colophon', 'child_theme_function', 1000); 
} 
add_action('after_setup_theme', 'my_theme_setup'); 

また、ここで説明するように、子クラスから親クラスをオーバーライドするために試すことができます:https://thethemefoundry.com/tutorials/advanced-customization-replacing-theme-functions/

+0

あなたの解決策は私にそこに私を得ただけです。私はフッタを出力することができましたが、古いものを削除することはできませんでした。それはそのクラスの中にあるからです。 'TC_footer_main' – c3cris

+0

古いものを削除するには、次のようにしてください: <?php remove_action( 'widgets_init'、 'parenttheme_widgets_init'); 関数childtheme_widgets_init(){ /*ウィジェット領域を登録するためにいくつかのコードは、ここに* /} add_action( 'widgets_init'、 'childtheme_widgets_init')。 ?> 詳細については、http://benpearson.com.au/replace-a-non-pluggable-function-in-a-wordpress-parent-theme-with-a-customized-function-子どものテーマ/ – PHPExpert

2

あなたはあまりにも遠く離れていませんでした...あなたの親テーマで追加される前にフックを削除しようとしているかもしれません。後でクラスを初期化することができます...

あなたのフックを実行イムあまりわからない、うまくいけば、その初期化

add_action('init', 'remove_parent_hook'); 

function remove_parent_hook(){ 
     remove_action('__colophon' , array('TC_footer_main','tc_colophon_center_block') , 20); // needs to be the same priority 
} 

した後、あなたは明らかに今ちょうどあなたの新しい機能のためのアクションを追加することができます。

匿名機能が追加されていることがあります。フックされた機能を削除しようとすると、しばしば重要性が無視されます。&$thisこれは、wpがランダムな文字列をキー名として&という関数の関数名に割り当てているため、痛みです。毎回違うので、推測できません。しかし、私たちはキー内の関数名を検索することができますので、このようなものは動作します

function remove_anon_hk($hook, $function, $priority=10){ 

     global $wp_filter; 

     $hooks= $wp_filter[$hook][$priority]; 

     if(empty ($hooks)) 
      return; 

     foreach($hooks as $hk=>$data): 
      if(stripos($hk, $function) !== false){ 
       unset($wp_filter[$hook][$priority][$hk]); 
      } 
     endforeach; 
    } 


    add_action('init', function(){ 
     remove_anon_hk('__colophon', 'tc_colophon_center_block'); 
    }); 
関連する問題