Eu sei que esta é uma pergunta antiga, mas vou jogar meus dois centavos, apenas no caso de alguém aparecer; uma maneira mais simples de fazer isso seria gravar sua própria modificação da função add_settings_section()
, que adicionaria apenas um parâmetro args de retorno de chamada no final dela.
Isto ficaria assim (ou algo parecido)
function my_add_settings_section($id, $title, $callback, $page, $callbackargs) {
global $wp_settings_sections;
if ( !isset($wp_settings_sections) )
{
$wp_settings_sections = array();
}
if ( !isset($wp_settings_sections[$page]) )
{
$wp_settings_sections[$page] = array();
}
if ( !isset($wp_settings_sections[$page][$id]) )
{
$wp_settings_sections[$page][$id] = array();
}
$wp_settings_sections[$page][$id] = array( 'id' => $id, 'title' => $title, 'callback' => $callback, 'callbackargs' => $callbackargs, 'page' => 'page' );
}
Agora, você simplesmente usaria essa função em vez da função nativa do wordpress e acessaria seus argumentos de retorno de chamada por meio da chave da matriz 'callbackargs'
da maneira usual, como esta
function oenology_hooks_sections_callback( $section_passed ) {
// Our callback arguments
$section_passed['callbackargs']
}
Que poderíamos usar para passar para outra função:
function oenology_hooks_sections_callback( $section_passed ) {
// Our callback arguments
$args = $section_passed['callbackargs'];
some_other_function( $args );
}
Ou os argumentos de retorno de chamada podem ser um array que usamos:
function oenology_hooks_sections_callback( $section_passed ) {
// Our callback arguments
if ( $section_passed['callbackargs']['stuff'] !== 'things' )
{
echo 'stuff is not things!";
}
}
Isso tudo é possível porque todos os add_settings_section()
adicionam um novo membro da matriz à variável global $wp_settings_sections
, esse novo membro da matriz poderia ser um próprio array contendo qualquer número de chaves com nomes diferentes, que poderiam ser usados, por qualquer função que soubesse que eles estavam lá.
Quando do_settings_sections
chama o call_user_func_array
, ele passa um $sections
paramater como a Bainternet observou, isso significa que toda a matriz que adicionamos a $wp_settings_sections
in my_add_settings_section()
é passada para nosso retorno de chamada, o que significa que temos acesso a cada nova matriz membro que adicionamos a ele, como o callbackargs
, permitindo que nossa função tenha um retorno de chamada completo.
Mesmo que eu tenha certeza de que isso poderia ser óbvio, eu pensei em apenas explicá-lo no caso de alguém ficar confuso.