web-dev-qa-db-fra.com

Comment faire_action et obtenir une valeur de retour?

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?

10
Aley

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.

10
Caspar