Tire o filtro de múltiplas funções

Eu preciso passar arrays para uma function de várias funções. Estou usando apply_filters_ref_array() para isso. O problema é que ele só aceita a matriz passada do callbak de prioridade mais alta. Aqui está o cenário:

 //First Callbak function first_callback() { $html['abc'] = 'xyz'; return $html; } add_filter( 'process_args', 'first_callback' ); //Second Callbak function second_callback() { $html['def'] = 'uvw'; return $html; } add_filter( 'process_args', 'second_callback' ); //Third Callbak function third_callback() { $html['ghi'] = 'rst'; return $html; } add_filter( 'process_args', 'third_callback' ); //Callbak that processes $args function process_args( $args ) { $args = apply_filters_ref_array( 'process_args', $args ); print_r( $args ); } 

Agora, o print_r( $args ); imprime a matriz passada da última function.

 Array ( [ghi] => rst ) 

Eu preciso imprimi-lo como:

 Array ( [abc] => xyz [def] => uvw [ghi] => rst ) 

Como faço isso?

obrigado

EDITAR:
Código atual com o qual estou trabalhando

 function pwpus_input_field_text( $field, $inputs, $html=array() ) { $html['text'] = ''; return $html; } add_filter( 'pwpus_input_fields', 'pwpus_input_field_text' ); function pwpus_input_field_tel( $field, $inputs, $html=array() ) { $html['tel'] = ''; return $html; } add_filter( 'pwpus_input_fields', 'pwpus_input_field_tel' ); function pwpus_input_field_email( $field, $inputs, $html=array() ) { $html['email'] = ''; return $html; } add_filter( 'pwpus_input_fields', 'pwpus_input_field_email' ); function pwpus_shortcode_form( $fields, $inputs=array() ) { $inputs = apply_filters_ref_array( 'pwpus_input_fields', $inputs ); //$inputs = do_action( 'pwpus_input_fields' ); if ( array_key_exists( 'class', $fields ) && $fields['class'] != '' ) { $class = ' ' . $fields['class']; } else { $class = ''; } if ( array_key_exists( 'callback', $fields ) && $fields['callback'] != '' ) { $callback = $fields['callback']; } else { $callback = 'pwusp_nocallback'; } $html = '
'; $html .= ''; if ( array_key_exists( 'fields', $fields ) && is_array($fields['fields']) ) { foreach ( $fields['fields'] as $field ) { //$html .= pwpus_fields( $field ); $html .= ''; } } $html .= ''; $html .= wp_nonce_field( 'pwpus-shortcode-nonce', 'pwpus-shortcode-nonce', false ); $html .= '
:' . $inputs[ $field['type'] ]. ''. $field['desc'] .'
'; $html .= '
'; $html .= '
'; //return $html; print_r( $inputs ); }

Solutions Collecting From Web of "Tire o filtro de múltiplas funções"

Você pode retornar $ html [‘abc’] e adicionar $ html como parâmetro em cada function e no filtro. Exemplo para a function:

 function second_callback($html){ $html['def']= 'uvw'; return $html['def']; } 

Você esqueceu de transmitir o argumento de input para suas chamadas de retorno de filtro, como:

 function first_callback( $html = [] ) { $html['abc'] = 'xyz'; return $html; } add_filter( 'process_args', 'first_callback' ); 

onde substituimos => para = .

Caso contrário, você está apenas substituindo o valor do filtro de cada vez!

Atualizar:

Eu vejo em seu código atualizado que você tem, por exemplo,

 function pwpus_input_field_email( $field, $inputs, $html=array() ) { $html['email'] = ''; return $html; } add_filter( 'pwpus_input_fields', 'pwpus_input_field_email' ); 

Há alguns problemas aqui, que vêm à mente:

  • Pode haver outras formas de implementar isso em geral?
  • Devemos retornar o primeiro argumento de input no retorno de chamada do filtro.
  • Eu acho que a variável $html não é necessária.
  • Eu acho que você poderia retornar $inputs vez de $html e usá-lo em vez disso?
  • Pode haver uma confusão com nomes de variables, em relação à forma como você usa $inputs com apply_filters_ref_array e em suas chamadas de retorno de filtro.
  • Eu acho que devemos usar apply_filters vez de apply_filters_ref_array para evitar essa confusão.
  • Se usarmos apply_filters , devemos registrar as devoluções de retorno do filtro com a prioridade correta e o número de argumentos de input.
  • Lembre-se de usar esc_attr() quando você constrói os atributos das tags de input.
  • Eu acho que o $field deve ser chamado de $fields onde você verifica, por exemplo, $fields['email']['id'] não vazios $fields['email']['id'] antes de usá-lo, etc.

Espero que ajude!