问题描述

所以有以下情况。

我添加一个操作来清除数据库中的日志:

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 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。