したがって、次のようなシナリオがあります。
データベースからログを消去するためのアクションを追加します。
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
に戻すべきです。
この関数を使用したことがなく、これをテストしていませんが、機能する可能性がありますか? do_action_ref_array() 。
function myplugin_clean_logs_fn() {
$args = array(
'param1' => 'val1',
'param2' => 'val2',
'affected_rows' => 0,
);
do_action_ref_array( 'myplugin_clean_logs', &$args );
return $args['affected_rows'];
}
// CALL IT
$affected_rows = my_plugin_clean_logs();
echo $affected_rows .' entr'. ($args['affected_rows']*1===1?'y':'ies') .' deleted.';
// SCHEDULE IT
add_action('myplugin_clean_logs_call_fn', 'myplugin_clean_logs_fn');
wp_schedule_event( current_time( 'timestamp' ), 'daily', 'myplugin_clean_logs_call_fn' );
// A SAMPLE FILTER
add_action('myplugin_clean_logs', function($args) {
// Cleaning process
// For each log affected, increment $args['affected_rows'] accordingly
}, 10, 3);
それでもうまくいかない場合は、Casparが提案したようにフィルタリングするだけではどうですか?つまり、これがフィルターの目的であり、この場合、影響を受ける行の数がフィルター処理されます。 (古いMortCoreが懐かしいです。戻り値、参照渡し、引数を3つのパラメータ関数だけで処理した方法を覚えている人はいますか?)