我正在编写一个插件,我希望它的默认设置根据所选主题进行更改。我已经让它工作了,但我更愿意为此提供一个动作挂钩,而不是像我在这里这样编写特定命名的函数。有没有更好的方法do_action
和add_action
可能地
插件管理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() );
主题功能。php:
function bf_new_defaults( $default_settings ) {
$default_settings[\'embers_header_nav_pos\'] = \'top\';
$default_settings[\'embers_header_leftcol\'] = \'8\';
return $default_settings;
}
最合适的回答,由SO网友:s_ha_dum 整理而成
我会用过滤器。您可以删除此项:
if (function_exists(\'bf_new_defaults\')) {
return bf_new_defaults( $default_settings );
} else {
return $default_settings;
}
将其替换为以下内容:
return apply_filters(\'bf_filter\', $default_settings)
下面是代码的一个截断的概念验证版本,以便您可以看到如何
$default_settings
更改。
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));
必须在之前添加筛选器
bf_set_defaults
运行时,您可能会遇到插件在主题之前加载的问题,但这取决于函数的使用方式(何时)。