web-dev-qa-db-de.com

WordPress Customizer: Wie können Sie mehrere aktive Rückrufe auf einem Steuerelement haben?

Ich habe die folgenden zwei Customizer-Steuerelemente, die ein Kontrollkästchen zum Anzeigen/Ausblenden von Inhalten anzeigen. Auf jedes Kontrollkästchen folgt ein active_callback, der die entsprechenden Steuerelemente anzeigt/verbirgt, wenn das Kontrollkästchen aktiviert/deaktiviert ist.

// 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;
    }
}

Beide funktionieren alleine, mit der Ausnahme, dass das Problem darin besteht, dass sich der About Block Button unten im About Block befindet. Ich möchte in der Lage sein, den About Block Button alleine auszublenden, wenn der About Block angezeigt wird, aber auch den About Block Button auszublenden, wenn der About Block vollständig ausgeblendet ist (ohne beide Kontrollkästchen aktivieren zu müssen). Daher benötigt es zwei active_callbacks wie folgt:

// 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'
) );

Leider werden nicht beide active_callback akzeptiert. Wie kann ich zwei (oder möglicherweise mehr) aktive Rückrufe auf einem Steuerelement haben?

2
Troy Templeman

Sie können eine dritte aktive Rückruffunktion erstellen, die nur auf die beiden vorhandenen verweist, beispielsweise über eine anonyme Funktion (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