Donc, il y a le scénario suivant.
J'ajoute une action pour nettoyer les journaux de la base de données:
add_action( 'myplugin_clean_logs', array( 'MyPlugin_Logs', 'clean_logs' ) );
Maintenant, je veux exécuter cette action périodiquement:
wp_schedule_event( current_time( 'timestamp' ), 'daily', 'myplugin_clean_logs' );
et l'exécuter manuellement:
do_action( 'myplugin_clean_logs' );
La méthode MyPlugin_Logs::clean_logs
renvoie le nombre de lignes affectées ou false si quelque chose s'est passé dans l'autre sens.
Maintenant, je veux afficher le nombre de lignes qui ont été supprimées. J'imagine quelque chose comme ça:
$affected_rows = do_action( 'myplugin_clean_logs' );
echo $affected_rows . ' entries have been deleted.';
Mais comme do_action
ne renverra aucune valeur, je ne sais pas comment obtenir la valeur de retour.
Devrais-je exécuter la méthode directement sur une exécution manuelle, mais utiliser l'action sur les événements de planification?
Ce qui est cool, c'est qu'un filtre est identique à une action, sauf qu'il renvoie une valeur. Configurez-le simplement comme filtre:
add_filter( 'myplugin_clean_logs', array( 'MyPlugin_Logs', 'clean_logs' ) );
Puis quelque chose comme:
$affected_rows = '';
$affected_rows = apply_filters( 'myplugin_clean_logs', $affected_rows );
devrait transmettre $affected_rows
à clean_logs()
(et à toute autre fonction à laquelle vous auriez adhéré à myplugin_clean_logs
) et attribuer la valeur de retour à $affected_rows
.