質問: array( 'uid' => 'whatever_uid' ,'name' => 'some_options_name' ,'args' => array( 'class' => 'example-wrap' ) ,'echo' => true ); handle_data_fn( $args ); } // 'some_hook' is some hook in a template file where the output should get echoed. add_action( 'some_hook', 'build_args_fn', 0, 1 ); /** * example for how to add content and modify the options from the db inside a handle_data_fn function. * * @param (array) mixed $args * @param (array) mixed $options | db-options retrieved inside the oxo_parse function */ function modify_args_fn ( $args, $options ) { $args['output'] .= '<div class="container">'; $args['output'] .= '<div class="'.$args['args']['class'].'">'; $args['output'] .= $options; $args['output'] .= '</div>'; $args['output'] .= '</div>'; // test output inside callback fn echo '<pre>from inside callback: '; print_r($args); echo '</pre>'; // here's the problem. i can't simple return it, because it wouldn't be available inside my 'data_handle_fn'. # return $args['output']; // i have to print it to get some output. the $args['output'] is not available inside the 'handle_data_fn' after the do_action call. return print $args['output']; } // name of the hook comes from 'uid' argument in 'build_args_fn' combined with 'hook_data_handle_' add_action ( 'hook_data_handle_whatever_uid', 'modify_args_fn', 10, 2 ); この問題に関する情報とヘルプをお寄せいただきありがとうございます。
回答: データを返したい場合は、apply_filters()を使用してコールバックに常に返すように指示することをお勧めします。$output = apply_filters( 'hook_data_handle_'.$args['uid'], $args, $options ); if ( $args['echo'] ) echo $output; else return $output; それほど洗練されていない解決方法は、 出力バッファリング を使うことです。