add_action( 'customize_register'...
向面板添加新部分。我要实现的控件是另一种颜色选择器。在上一篇文章中,我们看到了如何扩展核心类以添加小部件,但是我这里缺少的是一个钩子,该钩子使我能够将对象带入范围-WP_Customize_Palette_Control。在
,您可以在此处看到代码的开头。这段代码在我主题的
functions.php
文件中。感谢您的帮助。
Rob
只需更新代码即可。现在我有
require_once
来上课。所以现在我没有PHP错误,但是新控件HTML却没有出现。<?php
require_once( ABSPATH . WPINC . '/class-wp-customize-setting.php' );
require_once( ABSPATH . WPINC . '/class-wp-customize-section.php' );
require_once( ABSPATH . WPINC . '/class-wp-customize-control.php' );
class WP_Customize_Palette_Control extends WP_Customize_Image_Control {
public $type = 'palette';
public $removed = '';
public $context;
public function enqueue() {
//wp_enqueue_script( 'wp-plupload' );
}
public function to_json() {
parent::to_json();
$this->json['removed'] = $this->removed;
if ( $this->context )
$this->json['context'] = $this->context;
}
public function render_content() {
?>
<label>
<span class="customize-control-title"><?php echo esc_html( $this->label ); ?></span>
<div>
<a href="#" class="button-secondary upload"><?php _e( 'Upload' ); ?></a>
<a href="#" class="remove"><?php _e( 'Remove' ); ?></a>
</div>
</label>
<?php
}
}
//new WP_Customize_Palette_Control();
//add_action('customize_controls_init', 'WP_Customize_Palette_Control');
// add an option to the customize panel
function sci_customize_controls_init($wp_customize) {
$wp_customize->add_section( 'themename_color_scheme', array(
'title' => __( 'Color Scheme', 'themename' ),
'priority' => 35,
) );
$wp_customize->add_setting( 'themename_theme_options[color_scheme]', array(
'default' => 'some-default-value',
'type' => 'option',
'capability' => 'edit_theme_options',
) );
$wp_customize->add_control( 'themename_color_scheme', array(
'label' => __( 'Color Scheme', 'themename' ),
'section' => 'themename_color_scheme',
'settings' => 'themename_theme_options[color_scheme]',
'type' => 'palette',
'choices' => array(
'value1' => 'Choice 1',
'value2' => 'Choice 2',
'value3' => 'Choice 3',
),
) );
}
add_action( 'customize_register', 'sci_customize_controls_init' );
#1 楼
用法示例和类您可以在当前主题上看到如何使用它。您也可以使用该类。在Github上查看此类,并检查
functions.php
是否包含此内容。开始和初始化
您可以通过
customize_register
钩子注册主题定制程序的自定义设置:add_action( 'customize_register', 'themedemo_customize' );
function themedemo_customize($wp_customize) {
$wp_customize->add_section( 'themedemo_demo_settings', array(
'title' => 'Demonstration Stuff',
'priority' => 35,
) );
$wp_customize->add_setting( 'some_setting', array(
'default' => 'default_value',
) );
$wp_customize->add_control( 'some_setting', array(
'label' => 'Text Setting',
'section' => 'themedemo_demo_settings',
'type' => 'text',
) );
$wp_customize->add_setting( 'some_other_setting', array(
'default' => '#000000',
) );
$wp_customize->add_control( new WP_Customize_Color_Control( $wp_customize, 'some_other_setting', array(
'label' => 'Color Setting',
'section' => 'themedemo_demo_settings',
'settings' => 'some_other_setting',
) ) );
}
主题内用法:
使用它,就像下面的示例↓:
echo 'some_setting => ' .get_theme_mod( 'some_setting', 'default_value' )."\n";
echo 'some_other_setting => ' .get_theme_mod( 'some_other_setting', '#000000' )."\n";
echo 'non_existent_setting => '.get_theme_mod( 'non_existent_setting', 'default_value' )."\n";
调整
还可以更改控件:
$wp_customize->add_control( 'themename_color_scheme', array(
'label' => __( 'Color Scheme', 'themename' ),
'section' => 'themename_color_scheme',
'settings' => 'themename_theme_options[color_scheme]',
'type' => 'radio',
'choices' => array(
'value1' => 'Choice 1',
'value2' => 'Choice 2',
'value3' => 'Choice 3',
),
) );
默认控件类型为
text
。它创建一个文本框控件。另一个控件类型是dropdown-pages
,它创建了WordPress页面的下拉列表。但是还不止如此。实际上还有更多,但是由于它们是如此的自定义,因此它们的声明有所不同。
这一个使用OOP:
$wp_customize->add_control(
new WP_Customize_Color_Control( $wp_customize, 'link_color', array(
'label' => __( 'Link Color', 'themename' ),
'section' => 'themename_color_scheme',
'settings' => 'themename_theme_options[link_color]',
) )
);
附加说明:
>
WP_Customize_Upload_Control
–这为您提供了一个文件上传框。但是,您可能不会直接使用它,您想将其扩展到其他用途……例如:
WP_Customize_Image_Control
– 这为您提供了图像选择器和上传器框。它扩展了
上载控制器。您可以在自定义背景图片上看到它的作用,用户可以在其中上传新文件作为背景图像。
WP_Customize_Header_Image_Control
–由于调整了的作用标头部分,它需要一些特殊的处理和显示,因此,
WP_Customize_Header_Image_Control
扩展了WP_Customize_Image_Control
以添加该功能。您可以在自定义标题上看到它的,用户可以在其中上传新的
文件作为标题图像。
您可以找到有关“主题自定义程序”的更多信息“在ottos博客中。
2012年11月6日更新
在线示例以获取更多的阅读可能性和更多示例,请参见开放式源代码和doku。
2013年1月15日更新
我们在github上创建了一个带有自定义类的存储库,以方便,方便地使用它。也许您只能使用它,或者提出您的想法和解决方案。
#2 楼
好的,这是这样做的方法。将您的控件类分离到一个或多个新文件中。您有一个函数或方法挂在custom_register上,对吗?在该函数或方法中,仅在添加自定义控件之前需要一次新文件。这样PHP就不会抱怨重新定义类了。
注意:这不是开箱即用的,而是显示了窍门。
add_action('customize_register', array('myAddControl', 'customize_register') );
class myAddControl{
public function customize_register()
{
global $wp_customize;
//This will do the trick
require_once(dirname(__FILE__).'/class-gctfw-theme-control.php');
$wp_customize->add_section( 'gctfw_switch_theme' , array(
'title' => 'Switch theme',
'priority' => 25,
) );
$wp_customize->add_setting( 'gctfw_select_theme' , array(
'default' => $wp_customize->theme()->get('Name'),
'transport' => 'refresh',
'capabilities' => 'manage_options'
) );
$myControl = new gctfw_Theme_Control( $wp_customize, 'gctfw_select_theme', array(
'label' => __( 'Select theme', 'mytheme' ),
'section' => 'gctfw_switch_theme',
'settings' => 'gctfw_select_theme',
) ) ;
$wp_customize->add_control( $myControl );
}
}//class
#3 楼
您永远不会上课。尝试将类的新实例传递给add_control方法:$control_args = array(
// your args here
);
$my_control = new WP_Customize_Palette_Control(
$wp_customize, 'themename_color_scheme', $control_args);
$wp_customize->add_control($my_control);
此外,我不认为WP知道设置的选项名称是数组。也许最好使用
themename_theme_options_color_scheme
而不是themename_theme_options[color_scheme]
。您扩展的类属于图像上载控件。如果要创建颜色选择器,则可能应该扩展WP_Customize_Control类。
评论
定制程序知道多维设置。
–伊恩·邓恩
15年6月30日在21:19
#4 楼
仅出于完整性考虑:有关如何在主题定制器中添加数字字段的示例。class Customize_Number_Control extends WP_Customize_Control
{
public $type = 'number';
public function render_content()
{
?>
<label>
<span class="customize-control-title"><?php echo esc_html( $this->label ); ?></span>
<input type="number" size="2" step="1" min="0" value="<?php echo esc_attr( $this->value() ); ?>" />
</label>
<?php
}
}
评论
我认为这不是必需的,您可以只将数字作为默认控件的类型,并使用input_attrs来传递步骤,等等。
–伊恩·邓恩
2015年6月30日在21:21
@IanDunn您想添加一个示例作为其他答案吗?谢谢!
– kaiser
15年6月30日在22:08
#5 楼
我认为您必须在WP_Customize之前添加反斜杠。因此,它将是class WP_Customize_Palette_Control extends \WP_Customize_Image_Control
,因为反斜杠假定WP_Customize_Image_Control不是来自同一命名空间。
让我知道它是否有帮助
评论
次要点,但除非您的控件进入WordPress核心,否则请勿使用WP_前缀。使用您自己的插件/主题名称作为类名称的前缀。