コンテンツを表示/非表示にするためのチェックボックスを表示する次の2つのカスタマイザコントロールがあります。各チェックボックスの後には、チェックボックスがオン/オフのときに対応するコントロールを表示/非表示にするactive_callback
が続きます。
// Display About Block Button
$wp_customize->add_setting( 'display_about_block_button', array(
'default' => true
) );
$wp_customize->add_control( 'display_about_block_button', array(
'label' => __( 'Display About Button', 'my_theme_name' ),
'type' => 'checkbox',
'section' => 'about',
'active_callback' => 'display_about_block_callback'
) );
function display_about_block_button_callback( $control ) {
if ( $control->manager->get_setting( 'display_about_block_button' )->value() == true ) {
return true;
} else {
return false;
}
}
// Display About Block
$wp_customize->add_setting( 'display_about_block', array(
'default' => true
) );
$wp_customize->add_control( 'display_about_block', array(
'label' => __( 'Display About Block', 'my_theme_name' ),
'type' => 'checkbox',
'section' => 'about'
) );
function display_about_block_callback( $control ) {
if ( $control->manager->get_setting( 'display_about_block' )->value() == true ) {
return true;
} else {
return false;
}
}
問題は下記のAbout Block Button
がAbout Block
の中にあることを除けば、どちらも単独で動作します。 About Block Button
が表示されている場合はAbout Block
だけを非表示にできますが、About Block Button
が完全に非表示になっている場合は(両方のチェックボックスをオンにしなくても)About Block
を非表示にできます。したがって、これには2つのactive_callback
が必要です。
// About Block Button Text
$wp_customize->add_setting( 'about_block_button_text', array(
'default' => __( 'Read More', 'my_theme_name' )
) );
$wp_customize->add_control( 'about_block_button_text', array(
'label' => __( 'About Button Text', 'my_theme_name' ),
'type' => 'text',
'section' => 'about',
'active_callback' => 'display_about_block_button_callback',
'active_callback' => 'display_about_block_callback'
) );
残念ながら、両方のactive_callback
を受け入れることはできません。 1つのコントロールに2つ(またはそれ以上)のアクティブコールバックを設定するにはどうすればよいですか。
たとえば、無名関数(PHP≥5.3)を介して、既存の2つを参照するだけの3番目のアクティブコールバック関数を作成できます。
// About Block Button Text
$wp_customize->add_setting( 'about_block_button_text', array(
'default' => __( 'Read More', 'my_theme_name' )
) );
$wp_customize->add_control( 'about_block_button_text', array(
'label' => __( 'About Button Text', 'my_theme_name' ),
'type' => 'text',
'section' => 'about',
'active_callback' => function( $control ) {
return (
display_about_block_button_callback( $control )
&&
display_about_block_callback( $control )
);
},
) );