2016-01-27 10 views
5

Ho creato il tema figlio proprio. Tutto funziona alla grande, tranne che non riesco a cancellare la registrazione di un hoook.Sostituzione azione principale del tema Custormizr

$ questo è di classe TC_footer_main e il seguente codice è nel __construct

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

Ho provato diverse azioni rimuovere senza successo. Sto solo cercando di cambiare/rimuovere il piè di pagina:

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

o

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

Ho anche provato

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

Ma che buttato un errore come TC_footer_main non è stato caricato nel momento in cui il mio functions.php f ileo corse.

risposta

3

Sto solo cercando di cambiare/rimuovere il piè di pagina:

ti penso Rendendola molto più complessa, per modificare l'output del metodo tc_colophon_center_block(), che deve essere.

Basta utilizzare il filtro tc_credits_display:

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

di modificare quel blocco alle vostre esigenze.

Per rimuovere completamente l'uscita (se questo è permesso), è sufficiente utilizzare:

add_filter('tc_credits_display', '__return_null', PHP_INT_MAX); 

Bisogna ulteriormente l'accesso ai filtri come:

  • tc_copyright_link
  • tc_credit_link
  • tc_wp_powered

da scegliere.

Questo è tutto!

+0

ps: Non sono un affiliato ma sembra che la versione pro ti dia la possibilità di modificare il footer direttamente tramite la configurazione del Personalizzatore. – birgire

+0

Grazie, posso modificare l'intestazione da solo ma volevo la migliore pratica per farlo. E non con hardcoding nel tema principale – c3cris

3

Per lo scopo aggiungere il seguente codice in function.php. Otterrà la chiamata su after_setup_theme hook.

// 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'); 

Si può anche provare per sovrascrivere la classe padre dalla classe bambino come descritto qui: https://thethemefoundry.com/tutorials/advanced-customization-replacing-theme-functions/

+0

La tua soluzione mi ha ottenuto solo a metà strada. Sono stato in grado di emettere il mio footer ma non rimuovere quello vecchio. Questo perché è all'interno di una classe. 'TC_footer_main' – c3cris

+0

Per rimuovere quello vecchio è possibile utilizzare: Per ulteriori informazioni, consultare: http://benpearson.com.au/replace-a-non-pluggable-function-in-a-wordpress-parent-theme-with-a-customized-function- in-the-child-theme/ – PHPExpert

2

non sei lontanissimo ... un problema che potresti avere è che stai cercando di rimuovere il gancio prima che sia stato aggiunto dal tema principale ... la classe potrebbe essere inizializzata in un secondo momento ...

im non troppo sicuro quando le corse gancio, ma si spera che la sua dopo init

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 
} 

ovviamente è possibile ora solo aggiungere un'azione per la nuova funzione.

C'è una funzione offchance che è stata aggiunta una funzione anonima, spesso il significato di &$this viene trascurato quando si tenta di rimuovere una funzione collegata. Questo è un problema perché wp assegnerà una stringa casuale come il nome della chiave & il nome della funzione per la funzione, è diversa ogni volta quindi non può essere indovinato. Ma possiamo cercare il nome della funzione all'interno della chiave, quindi qualcosa di simile funzionerà

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'); 
    }); 
Problemi correlati