¿Cómo hacer_acción y obtener un valor de retorno?

10

Así que está el siguiente escenario.

Agrego una acción para limpiar registros de la base de datos:

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

Ahora quiero ejecutar esta acción periódicamente:

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

y ejecútalo manualmente:

do_action( 'myplugin_clean_logs' );

El método MyPlugin_Logs::clean_logs devuelve el recuento de filas afectadas o falso si algo fue en la otra dirección.

Ahora quiero mostrar el número de filas que se han eliminado. Me imagino algo como esto:

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

Pero como do_action no devolverá ningún valor, no tengo idea de cómo obtener el valor de retorno.

¿Debo ejecutar el método directamente en una ejecución manual, pero usar la acción en eventos programados?

    
pregunta Aley 21.04.2016 - 18:47

1 respuesta

10

Lo bueno es que un filtro es lo mismo que una acción, solo que devuelve un valor, así que configúralo como un filtro:

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

Entonces algo como:

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

debe pasar de $affected_rows a clean_logs() (y cualquier otra función que pueda haber enganchado a myplugin_clean_logs ) y asignar el valor de retorno a $affected_rows .

    
respondido por el Caspar 21.04.2016 - 20:18

Lea otras preguntas en las etiquetas