Como fazer_ação e obter um valor de retorno?

10

Portanto, há o seguinte cenário.

Eu adiciono uma ação para limpar logs do banco de dados:

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

Agora quero executar esta ação periodicamente:

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

e executá-lo manualmente:

do_action( 'myplugin_clean_logs' );

O método MyPlugin_Logs::clean_logs retorna a contagem de linhas afetadas ou false se algo foi na outra direção.

Agora quero exibir o número de linhas que foram excluídas. Eu imagino algo assim:

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

Mas como do_action não retornará nenhum valor, não tenho idéia de como obter o valor de retorno.

Devo executar o método diretamente em uma execução manual, mas usar a ação em eventos de agendamento?

    
por Aley 21.04.2016 / 18:47

1 resposta

10

O mais legal é que um filtro é o mesmo que uma ação, apenas retorna um valor, então, basta configurá-lo como um filtro:

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

Então, algo como:

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

deve passar $affected_rows para clean_logs() (e quaisquer outras funções que você possa ter fisgado para myplugin_clean_logs ) e atribuir o valor de retorno de volta para $affected_rows .

    
por Caspar 21.04.2016 / 20:18

Tags