问题描述
所以有以下情况。
我添加一个操作来清除数据库中的日志:
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_rows
到 clean_logs()
(以及您可能挂钩到 myplugin_clean_logs
的任何其他功能),并将返回值分配给 $affected_rows
。
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。