web-dev-qa-db-fra.com

WordPress Customizer: Comment peut-on avoir rappels actifs sur un contrôle?

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?

2
Troy Templeman

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 )
        );
    },
) );
5
Weston Ruter