如何在子主题中添加定制器设置

时间:2016-12-23 作者:CoderScissorhands

我想为我的孩子主题的定制器添加一个选项,但我在实现它时遇到了一些困难。我很确定我的问题与我所说的论点的名称有关,但我不确定,所以如果你看到其他东西,请毫不犹豫地告诉我你的想法。

我怀疑的是错的:我不确定我的functions.php 应具有子主题的名称(例如。child_theme_name/ tesseract-child), 以及父主题的标题(例如。parent_theme_name/tesseract) . 通常我会假设我应该始终使用子主题的名称,但面板的声明是父主题的customizer.php 文件包括父主题的名称(tesseract_footer_options), 我不确定WordPress在使用子主题时是否修改了这个名称。例如,第一个参数add_section 在儿童主题的be中parent_theme_name_footer_optionschild_theme_name_footer_options

如果我应该使用儿童主题的名称,我很困惑如何使用。当我尝试使用子主题的名称来命名函数时(例如。tesseract-child_options), 其中包括连字符,我得到一个错误。所以,我认为php不喜欢使用连字符命名的函数,事实上,我已经读到这个php不允许在函数名中使用连字符。另一个连字符不好的线索是:子主题名称中的连字符不仅导致崩溃,还导致我的编辑器(升华文本)奇怪地标记代码。为了测试连字符是否是问题所在,我将函数的名称更改为tesseract_child_options, 使用所有下划线,但这对我来说似乎是错误的,因为从技术上讲,主题的名称是tesseract-child 带连字符,而不是tesseract_child 带有下划线。

代码这是父主题中面板的声明customizer.php 文件:

$wp_customize->add_panel( \'tesseract_footer_options\', array(

\'priority\'       => 5,

\'capability\'     => \'edit_theme_options\',

\'title\'          => \'Footer Options\',

//\'description\'  => \'\'

) );
这是我在我的孩子主题中使用的代码function.php 尝试将节添加到该选项面板的文件:

add_action( \'customize_register\' , \'tesseract_child_options\' );

function tesseract_child_options( $wp_customize ) {

$wp_customize->add_section( 
    \'tesseract_footer_options\', 
    array(
        \'title\'       => __( \'Reblog Options\', \'tesseract\' ),
        \'priority\'    => 100,
        \'capability\'  => \'edit_theme_options\',
        \'description\' => __(\'Change Reblog Options Here.\', \'tesseract\'), 
    ) 
);


$wp_customize->add_setting( \'number_of_reblogs\',
    array(
        \'default\' => \'3\'
    )
);  

$wp_customize->add_control( new WP_Customize_Control( 
    $wp_customize, 
    \'reblog_number_control\',
    array(
        \'label\'    => __( \'Number of Reblogs\', \'tesseract-child\' ), 
        \'section\'  => \'tesseract_footer_options\',
        \'settings\' => \'reblog_number\',
        \'type\'     => \'text\',
        \'priority\' => 10,
    ) 
));

}
任何帮助都将不胜感激!谢谢

关于PROSTI答案的最新信息:

@PROSTI回答了这个问题,但我只想澄清一下,对于任何试图找出如何做到这一点的人来说,有什么错:

操作调用的整个函数的名称customize_register 是任意的,只要不包含连字符,就可以随意命名。请注意,此函数名does not 必须以任何方式与父主题的名称或子主题的名称相关。为了说明这一点,在我的工作示例(如下所示)中,我将我在初始问题中使用的函数名从tesseract_child_optionschildtheme_customize_register. 请注意,虽然您不必在此函数中引用子主题或父主题的名称,但这是一种很好的做法,但只是为了易读性,而不是功能性

要创建的节的名称(函数中的第一个参数add_section) 是任意的,你可以随意命名。这是WP将用于内部传递变量的标记。在的第二个参数中包含的文本add_section 将确定第一次在自定义程序的根菜单(显示的第一个菜单)上着陆时显示的文本<同样,良好实践要求,为了便于阅读,使用与主题相关的名称

内部add_section, 和add_control 函数,我使用的所有两个参数语句(例如。title, description, 和label) 需要将子主题的确切名称作为第二个参数。如果该子主题的名称有连字符(就像我的一样,例如。tesseract-child), 第二个参数也应该有连字符。

priority 确定我创建的节在选项列表中的位置(即高或低)。页脚是父对象中的第四部分,它的优先级为5. 如果我在中设置优先级add_section, 优先考虑4 该选项位于页脚选项按钮上方,如果我将其设置为6, 它落在它下面。

工作代码示例

 
add_action( \'customize_register\', \'childtheme_customize_register\'); //second argument is arbitrary, but cannot have hyphens because php does not allow them in function names.



function childtheme_customize_register( $wp_customize ) {

$wp_customize->add_section( 
    \'tesseract_reblog_options\', 
    array(
        \'title\'       => __( \'Reblog Options\', \'tesseract-child\' ), //2nd arg matches child theme name 
        \'priority\'    => 6, // put the section below the Footer options on the list
        \'capability\'  => \'edit_theme_options\',
        \'description\' => __(\'Change Reblog Options Here.\', \'tesseract-child\'), //2nd arg matches child theme name 
    ) 
);


$wp_customize->add_setting( \'number_of_reblogs\',
    array(
        \'default\' => \'3\'
    )
);  

$wp_customize->add_control( \'setting_id\', array(
  \'label\'    => __( \'Number of Reblogs\', \'tesseract-child\' ), //2nd arg matches child theme name
    \'section\'  => \'tesseract_reblog_options\',
    \'settings\' => \'number_of_reblogs\',
    \'type\'     => \'text\',
    \'priority\' => 6
) );
}

1 个回复
最合适的回答,由SO网友:prosti 整理而成

好的,看看主题开发者handbook.

$wp_customize->add_control( \'reblog_number_control\', array(
  \'label\'    => __( \'Number of Reblogs\', \'tesseract-child\' ), 
    \'section\'  => \'tesseract_footer_options\',
    \'settings\' => \'number_of_reblogs\',
    \'type\'     => \'text\',
    \'priority\' => 10
) );
因为你在儿童主题中

\'title\'       => __( \'Reblog Options\', \'tesseract\' ),
应该是

\'title\'       => __( \'Reblog Options\', \'tesseract-child\' ),
换句话说,您的设置、控件和节名称需要匹配add_control, add_section, add_setting.

相关推荐

Admin sidebar customization

我的新客户wordpress站点在管理侧栏中没有插件、外观或任何其他默认项。谁能告诉我这些是怎么出现的吗。该站点正在主站点的子目录中运行。它有自己的wordpress安装。主题是前面的rttheme16。提前谢谢。