Comment faire_action et obtenir une valeur de retour?

10

Il existe donc 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' ) );

Je souhaite maintenant exécuter cette action régulièrement:

wp_schedule_event( current_time( 'timestamp' ), 'daily', 'myplugin_clean_logs' );

et exécutez-le 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.

Je souhaite maintenant afficher le nombre de lignes 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?

    
posée Aley 21.04.2016 - 18:47

1 réponse

10

Ce qui est bien, 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' ) );

Ensuite, quelque chose comme:

$affected_rows = '';
$affected_rows = apply_filters( 'myplugin_clean_logs', $affected_rows );

devrait passer de $affected_rows à clean_logs() (et quelles que soient les autres fonctions que vous pourriez avoir rattachées à myplugin_clean_logs ) et attribuer la valeur de retour à $affected_rows .

    
réponse donnée Caspar 21.04.2016 - 20:18

Lire d'autres questions sur les étiquettes