J'ai les deux contrôles Customizer suivants qui affichent une case à cocher pour afficher/masquer le contenu. Chaque case à cocher est suivie d'un active_callback
qui affiche/masque les contrôles correspondants lorsque la case à cocher est cochée/décochée.
// 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;
}
}
Ils travaillent tous les deux seuls, sauf que le problème est que le About Block Button
ci-dessous se trouve à l'intérieur du About Block
. Je veux pouvoir masquer le About Block Button
seul si le About Block
est affiché, mais aussi pouvoir masquer le About Block Button
si le About Block
est complètement masqué (sans avoir à cocher les deux cases). Par conséquent, il a besoin de deux active_callback
comme ceci:
// 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'
) );
Malheureusement, il n'accepte pas les deux active_callback
. Comment puis-je avoir deux (ou éventuellement plusieurs) rappels actifs sur un contrôle?
Vous pouvez créer une troisième fonction de rappel active qui ne fait que référencer les deux fonctions existantes, par exemple via une fonction anonyme (PHP≥5.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 )
);
},
) );