主题定制程序样板–条件选项,子主题和插件

  1. 1个. WordPress主题定制器简介
  2. 2. 与WordPress主题定制器进行交互
  3. 3. WordPress主题定制器样板
  4. 4. 扩展WordPress主题定制程序样板
  5. 5. 当前阅读: 主题定制程序样板–条件选项,子主题和插件

到目前为止,我们已经看到使用Theme Customizer Boilerplate及其挂钩处理主题选项非常简单。您可能还记得,最重要的步骤是 ‘thsp_cbp_options_array’ 筛选器挂钩,并将要在主题中使用的选项传递给它.


我确定您已经熟悉WordPress操作和过滤器挂钩-插件API-以及它们的工作方式,但是以防万一,这里有个简短的回顾(以过滤器挂钩为例)。您可以定义自定义函数,并使用add_filter函数将其挂钩到现有过滤器中:

add_filter($ tag,$ function_to_add,$ priority,$ accepted_args);

让我们集中讨论优先级参数。它的默认值为10,因此,如果您不使用其他数字,这就是函数的执行优先级。降低数字,可以更早地执行函数。因此,如果您执行以下操作:

//添加第一条消息
函数my_theme_add_first_message($ content){
$ content。='

第一条讯息

'; 返回$ content; } add_filter('the_content','my_theme_add_first_message',1); //添加第二条消息 函数my_theme_add_second_message($ content){ $ content。='

第二则讯息

'; 返回$ content; } add_filter('the_content','my_theme_add_second_message',2);

当您在single.php或其他模板中调用the_content函数时,将显示内容,然后是“第一条消息”,然后是“第二条消息”。不是因为这是此代码段中的顺序,而是因为执行优先级参数。想想钩子,就像它们是滚雪球滚下山坡一样,在路上捡各种东西.

这如何适用于主题定制程序样板?

您可以加入 ‘thsp_cbp_options_array’ 从您主题的function.php文件中,使用优先级设置为1的自定义函数(例如my_theme_options_array) ‘thsp_cbp_options_array’ 过滤器挂钩将在您已经定义的my_theme_options_array函数之后执行此操作。看一下这个例子:

函数my_theme_options_array(){
//使用辅助函数获取默认的必需功能
$ thsp_cbp_capability = thsp_cbp_capability();

$选项=数组(
//区段ID
'my_theme_new_section'=>数组(

'existing_section'=>否,
'args'=>数组(
'title'=> __('New Section','my_theme_textdomain'),
'优先级'=> 10
),
'字段'=>数组(
/ *
*无线电领域
* /
'my_radio_button'=>数组(
'setting_args'=>数组(
'默认'=>'选项-2',
'类型'=>'选项',
'功能'=> $ thsp_cbp_capability,
'运输'=>'刷新',
),
'control_args'=>数组(
'标签'=> __('我的单选按钮','my_theme_textdomain'),
'type'=>'radio',//无线电控制
'选择'=>数组(
'option-1'=>数组(
'标签'=> __('选项1','my_theme_textdomain')
),
'option-2'=>数组(
'标签'=> __('选项2','my_theme_textdomain')
),
'option-3'=>数组(
'标签'=> __('选项3','my_theme_textdomain')
)
),
'优先级'=> 3
)
)
)
)
);

返回$ options;
}
add_filter('thsp_cbp_options_array','my_theme_options_array',1);

这会将新部分添加到主题定制器中,其中有一个字段称为“我的单选按钮”。然后,您或其他人为您的主题开发了一个子主题,并决定保留“新节”,但是最好使用“我的复选框”代替“我的单选按钮”。简单:

函数my_child_theme_options_array($ options){
//使用辅助函数获取默认的必需功能
$ thsp_cbp_capability = thsp_cbp_capability();

/ *
*这次,我们仅编辑$ options数组中my_theme_new_section中的字段
* /
$ options ['my_theme_new_section'] ['fields'] = array(
'my_checkbox_field'=>数组(
'setting_args'=>数组(
'默认'=> true,
'类型'=>'选项',
'功能'=> $ thsp_cbp_capability,
'运输'=>'刷新',
),
'control_args'=>数组(
'标签'=> __('我的复选框','my_theme_textdomain'),
'type'=>'checkbox',//复选框字段控件
'优先级'=> 2
)
)
);

返回$ options;
}
add_filter('thsp_cbp_options_array','my_child_theme_options_array',2);

注意到我没有将$ options参数传递给my_theme_options_array并在my_child_theme_options_array函数中使用了吗?那是因为当我第一次迷上 ‘thsp_cbp_options_array’ 钩子,我想覆盖主题定制程序样板示例选项。然后,当我再次将其从子主题中插入时,我不想完全删除父主题的选项,只需对其稍加修改即可。这就是为什么我只搞混$ options [‘my_theme_new_section’] [‘fields’]而不是整个$ options数组的原因.

当然,您也可以加入 ‘thsp_cbp_options_array’ 从父主题过滤掉钩子不止一次。.假设您选择不向主题添加插件区域功能,而让插件执行其应有的功能。现在,您只想在某些插件处于活动状态时显示一些主题定制器选项。再次简单:

函数my_plugin_dependency_options_array($ options){
//使用辅助函数获取默认的必需功能
$ thsp_cbp_capability = thsp_cbp_capability();

/ *
*仅在“ test-plugin.php”处于活动状态时才添加my_plugin_dependency_section
* /
如果(is_plugin_active('test-plugin / test-plugin.php')){

$ options ['my_plugin_dependency_section'] = array(
'existing_section'=>否,
'args'=>数组(
'标题'=> __('插件依赖','my_theme_textdomain'),
'优先级'=> 10
),
'字段'=>数组(
/ *
* 文本域
* /
//栏位ID
'new_text_field'=>数组(
'setting_args'=>数组(
'默认'=> __('','my_theme_textdomain'),
'类型'=>'选项',
'功能'=> $ thsp_cbp_capability,
'运输'=>'刷新',
),
'control_args'=>数组(
'标签'=> __('仅显示','my_theme_textdomain'),
'type'=>'text',//文本字段控件
'优先级'=> 5
)
),
)
);

}

返回$ options;
}
add_filter('thsp_cbp_options_array','my_plugin_dependency_options_array',3);

想要开发一个 核心功能插件 可以与您的主题一起使用(如您所愿)?您可以加入 ‘thsp_cbp_options_array’ 也可以从一个插件的文件中获取,就像从主题的function.php文件中获取文件时一样.

不要选择疯狂

每次为主题开发选项时,都需要保留WordPress的一项核心原则- 决定不是选项 – 心里。很容易迷失方向,并开始为主题的每个次要细节添加用户选项,但这并没有给任何人带来帮助。我希望这些技巧,尤其是添加与插件相关的选项,将有助于使主题的选项数量尽可能少.

毕竟,如果您的主题具有诸如每个元素的每个边框半径之类的选项,那么它不是一个主题,而是所见即所得的编辑器,并且可能不是一个很好的选择.

您不需要购买白衬衫,是因为您不费吹灰之力就可以将其转变为桌布,而购买是因为您喜欢它的“白衬衫”。 WordPress主题也应该是这样的,它们应该以某种方式呈现内容,而不是试图以可以想象的所有方式来做所有事情。如果您是主题开发人员,那么确保用户的期望值是他们的工作是您的工作。.

Jeffrey Wilson Administrator
Sorry! The Author has not filled his profile.
follow me
    Like this post? Please share to your friends:
    Adblock
    detector
    map