Est-il possible d'ajouter des fragments de code dans la fonction standard de wordpress? Dans mon cas, je développe un plugin qui va retracer l'emplacement exact de l'appelant de la méthode wp_delete_attachment dans wordpress. Je peux y arriver par debug_backtrace () mais cette méthode doit être appelée dans la méthode que vous souhaitez suivre. Comment puis-je y arriver sans toucher/éditer les fonctions principales de wordpress?
function wp_delete_attachment( $post_id, $force_delete = false ) { <-- wordpress core function
global $wpdb;
//my custom code inside wordpress core function
$bt = debug_backtrace();
$caller = array_shift($bt);
die(json_encode($caller));
}
Je résous le problème en accrochant ma fonction à delete_attachment
, puis en plaçant la trace de débogage dans ma fonction et en filtrant le wp_delete_attachment
. Cela permet de récupérer le fichier et le numéro de ligne où le nom wp_delete_attachment est appelé.
add_action( 'delete_attachment', 'your_function' );
function your_function($postid) {
$trace = debug_backtrace();
if(is_array($trace) && !empty($trace)) {
foreach ($trace as $trace_value) {
if(array_key_exists("function", $trace_value)) {
if($trace_value['function'] == "wp_delete_attachment") {
echo $trace_value;
}
}
}
}
}
Cela dépend de ce que vous voulez faire.
Si vous regardez dans la définition de la fonction , vous remarquerez un peu do_action () :
Par exemple:
do_action( 'delete_attachment', $post_id );
do_action( 'delete_post', $post_id );
do_action( 'deleted_post', $post_id );
Ce sont des points, appelés crochets dans WordPress, où vous pouvez réellement exécuter vos tâches. Les crochets vous aideront à modifier le comportement principal sans modifier le noyau WordPress lui-même.
Supposons que vous souhaitiez intégrer le code avant la suppression de la pièce jointe. Vous pouvez ensuite utiliser add_action('delete_attachement', 'yourfunction');
dans le functions.php
de votre plugin ou de votre thème pour exécuter le code de votre choix.
Par exemple:
add_action('delete_attachement', 'yourfunction');
function yourfunction( $post_id ){
echo 'sample';
die;
}
Vous devez associer votre fonction à l'attribut delete_attachement
, mais vous devez également supprimer certaines fonctions supplémentaires appelées avant d'appeler votre action accrochée pour atteindre le bon appelant de wp_delete_attachment()
.
Voici une implémentation possible ...
function my_backtrace( $post_id ) {
$bt = debug_backtrace();
array_shift( $bt ); // Remove reference to function
array_shift( $bt ); // Remove reference to call_user_func_array
array_shift( $bt ); // Remove reference to do_action
array_shift( $bt ); // Remove reference to wp_delete_attachment
$caller = array_shift( $bt ); // This is what called wp_delete_attachment
die( '<pre>' . json_encode( $caller, JSON_PRETTY_PRINT ) . '</pre>' );
}
add_action('delete_attachement', 'my_backtrace');
Aussi, vous pouvez utiliser json_encode( $caller, JSON_PRETTY_PRINT )
pour imprimer votre JSON codé;)
Laisse-moi savoir comment ça marche pour toi ...
À votre santé