問題描述

所以有以下情況。

我添加一個操作來清除數據庫中的日誌:

add_action( 'myplugin_clean_logs', array( 'MyPlugin_Logs', 'clean_logs' ) );

現在我想定期運行這個動作:

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

並手動執行:

do_action( 'myplugin_clean_logs' );

方法 MyPlugin_Logs::clean_logs 返回受影響的行的計數,如果有其他方向,則返回 false 。

現在我想顯示已刪除的行數。我會想像這樣的事情:

$affected_rows = do_action( 'myplugin_clean_logs' );
echo $affected_rows . ' entries have been deleted.';

但是,由於 do_action 不會返回任何值,我不知道如何獲取返回值。

我應該在手動運行中直接執行該方法,但是對計劃事件使用該操作?

最佳解決方案

一件很酷的事情是一個過濾器與一個動作相同,只有它返回一個值,所以只需將它設置為一個過濾器:

add_filter( 'myplugin_clean_logs', array( 'MyPlugin_Logs', 'clean_logs' ) );

然後像:

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

應通過 $affected_rowsclean_logs()(以及您可能掛鈎到 myplugin_clean_logs 的任何其他功能),並將返回值分配給 $affected_rows

參考文獻

注:本文內容整合自 Google/Baidu/Bing 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。