Entonces, existe el siguiente escenario.
Agrego una acción para limpiar los 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 ejecutarlo 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?
Respuestas:
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:
debe pasar
$affected_rows
aclean_logs()
(y a cualquier otra función a la que haya conectadomyplugin_clean_logs
) y asignar el valor de retorno nuevamente$affected_rows
.fuente
do_action()
asunto no es más que un elaborado truco deapply_filters()
:)do_action()
no devolver un valor en lugar de cómo diseñar una solución en congruencia condo_action()
la intención de s. Si alguien puede hacer lo que está pidiendo, esa respuesta merece ser la respuesta aceptada. Mi primer pensamiento sería hacer que el método enganchado (suponiendo que el OP esté usando un diseño OOP para este complemento) deje caer el resultado en una propiedad protegida de la clase de complemento y luego escriba un captador rápido para sacarlo en algún momento posterior. ¡Pero esa es una idea descabellada!Nunca usé esta función y no la he probado, pero ¿podría funcionar? do_action_ref_array () .
Si eso no funciona, ¿por qué no simplemente filtrar lo que sugirió Caspar? Quiero decir, ese es el propósito de un filtro, y en este caso el número de filas afectadas es lo que se está filtrando. (Extraño el viejo MortCore. ¿Alguien recuerda cómo manejó los valores de retorno, la referencia de paso y los argumentos con una sola función de tres parámetros?)
fuente