Sto aggiornando uno dei miei plugin e sono un po 'bloccato con funzioni deprecanti.
Inizialmente, il mio plugin aveva una variabile globale e la classe principale del plugin era istanziata e memorizzata nella variabile globale. In questo modo gli utenti potrebbero utilizzare il globale per accedere alle funzioni nella classe plugin.
$GLOBALS['my_custom_plugin'] = new my_custom_plugin();
Quindi, ad esempio, nelle mie FAQ avevo il codice che mostrava come rimuovere una delle funzioni della mia classe da un hook specifico e aggiungerlo a un hook diverso:
function move_input(){
global $my_custom_plugin;
remove_action( 'before_main_content', array( $my_custom_plugin, 'display_input') );
add_action( 'after_main_content', array( $my_custom_plugin, 'display_input' ) );
}
add_action( 'wp_head' , 'move_input' );
Ora, nel mio aggiornamento la display_input()
funzione è stata spostata in un'altra classe e voglio far sapere alle persone come accedervi. Ho provato a sostituire la funzione originale (nella classe principale del plugin) con il seguente avviso di deprecazione:
public function display_input() {
_deprecated_function( 'display_price', '2.0', 'my_custom_plugin()->display->display_input' );
return $this->display->display_input();
}
Tuttavia, le funzioni add_action
e remove_action
non sembrano attivare l'avviso di ammortamento. Stranamente, la rimozione completa della funzione non causa un errore, anche se array( $my_custom_plugin, 'display_input')
non esiste.
Se qualcuno tenta di accedere direttamente alla funzione:
$my_custom_plugin->display_input();
Quindi vedo gli avvisi di debug. È questo il risultato atteso per _deprecated_function()
? Oppure mi sfugge qualcosa? È possibile mostrare un avviso di debug quando qualcuno tenta di rimuovere o aggiungere un'azione utilizzando una funzione obsoleta?
Aggiornare
Mi sono reso conto che semplicemente non vedevo il messaggio di debug per add_action
come lo stavo aggiungendo abbastanza in basso nella pagina. #facepalm! Tuttavia, non vedo ancora alcun avviso di debug per remove_action
.
add_action()
era effettivamente lì. remove_action()
non può essere gestito in questo modo.
call_user_func(function(){trigger_error('hello?');});
Opere interessanti , ma non riesce in un callback registrato per add_action.