Gancho de configuração padrão do plugin

Estou escrevendo um plugin onde eu quero que as configurações padrão sejam alteradas de acordo com o tema selecionado. Eu funciono, mas prefiro fornecer um gancho de ação para isso, em vez de escrever a function especificamente mencionada como eu tenho aqui. Existe um método melhor para isso usando do_action e add_action possivelmente?

PLUGIN ADMIN PHP:

 function bf_set_defaults(){ $default_settings = array( // Header 'embers_header_nav_pos' => 'bottom', 'embers_header_leftcol' => '4', 'embers_header_middlecol' => '4', 'embers_header_rightcol' => '4', // Full Width Content 'embers_full_width_contentcol' => '12', // Content Sidebar 'embers_content_sidebar_contentcol' => '8', 'embers_content_sidebar_primarycol' => '4', //Sidebar Content 'embers_sidebar_content_contentcol' => '8', 'embers_sidebar_content_primarycol' => '4', // Content Sidebar Sidebar 'embers_content_sidebar_sidebar_contentcol' => '6', 'embers_content_sidebar_sidebar_primarycol' => '4', 'embers_content_sidebar_sidebar_secondarycol' => '2', // Sidebar Sidebar Content 'embers_sidebar_sidebar_content_contentcol' => '8', 'embers_sidebar_sidebar_content_primarycol' => '4', 'embers_sidebar_sidebar_content_secondarycol' => '2', 'embers_sidebar_sidebar_content_contentsidebar' => '10', // Sidebar Content Sidebar 'embers_sidebar_content_sidebar_contentcol' => '8', 'embers_sidebar_content_sidebar_primarycol' => '4', 'embers_sidebar_content_sidebar_secondarycol' => '2', 'embers_sidebar_content_sidebar_contentsidebar' => '10', ); if (function_exists('bf_new_defaults')) { return bf_new_defaults( $default_settings ); }else{ return $default_settings; } } // Create the Admin Page $this->create( $page_id, $menu_ops, $page_ops, $settings_field, bf_set_defaults() ); 

THEME functions.php:

 function bf_new_defaults( $default_settings ) { $default_settings['embers_header_nav_pos'] = 'top'; $default_settings['embers_header_leftcol'] = '8'; return $default_settings; } 

Solutions Collecting From Web of "Gancho de configuração padrão do plugin"

Eu usaria um filtro. Você pode remover isso:

 if (function_exists('bf_new_defaults')) { return bf_new_defaults( $default_settings ); } else { return $default_settings; } 

e substitua-o por algo como isto:

  return apply_filters('bf_filter', $default_settings) 

O seguinte é uma versão truncada, prova de conceito do código para que você veja como $default_settings é alterado.

 add_filter( 'bf_filter', function($default_settings) { var_dump($default_settings); $default_settings[] = 4; return $default_settings; } ); $default_settings = array(1, 2, 3); var_dump(apply_filters('bf_filter', $default_settings)); 

Seu filtro deve ser adicionado antes que bf_set_defaults executado para que você possa ter problemas com o fato de que os plugins são carregados antes dos temas, mas depende de como (quando) a function é usada.