web-dev-qa-db-fra.com

Comment créer un champ dépendant dans Customizer?

J'essaie d'avoir un champ dépendant dans Customizer. Un champ est la case à cocher Enable Custom Excerpt Length. Un autre est le champ de texte Custom Excerpt Length. Je veux implémenter le champ contextuel en utilisant active_callback. Je suis cet article. https://make.wordpress.org/core/2014/07/08/customizer-improvements-in-4-0/

J'ai des problèmes pour vérifier la valeur de contrôle dans la fonction de rappel.

  $wp_customize->add_setting( 'blueplanet_options[theme_enable_custom_excerpt]',
     array(
        'default'    => false,
        'capability' => 'edit_theme_options',
     )
  );
  $wp_customize->add_control(
      'theme_enable_custom_excerpt',
      array(
        'label'       => 'Enable Custom Excerpt Length',
        'section'     => 'admin_section',
        'settings'    => 'blueplanet_options[theme_enable_custom_excerpt]',
        'type'        => 'checkbox',
      )
    );
  $wp_customize->add_setting( 'blueplanet_options[theme_custom_excerpt_length]',
     array(
        'default'              => 20,
        'capability'           => 'edit_theme_options',
     )
  );
  $wp_customize->add_control(
      'theme_custom_excerpt_length',
      array(
        'label'           => 'Custom Excerpt Length',
        'section'         => 'admin_section',
        'settings'        => 'blueplanet_options[theme_custom_excerpt_length]',
        'type'            => 'text',
        'active_callback' => 'flag_is_custom_excerpt_enabled',
      )
    );

  // Callback function
  function flag_is_custom_excerpt_enabled(){
    // how to check if `theme_enable_custom_excerpt` is enabled or disabled
  }
1
Nilambar

Vous pouvez obtenir et vérifier la valeur de votre thème mod comme vous le faites habituellement n'importe où.

Ce code est testé et fonctionne (le code à l'intérieur de cyb_customizer() est exactement le code que vous avez posté dans la question, seule la partie add_section a été ajoutée):

function flag_is_custom_excerpt_enabled(){
    $blueplanet_options = get_theme_mod( 'blueplanet_options');
    if( empty( $blueplanet_options['theme_enable_custom_excerpt'] ) ) {
        return false;
    }
    return true;
}

add_action( 'customize_register', 'cyb_customizer' );
function cyb_customizer( $wp_customize ) {


    $wp_customize->add_section(
        'admin_section',
        array(
            'title' => 'Admin section',
            'description' => 'Admin section',
            'priority' => 0,            
        )
    );

    $wp_customize->add_setting( 'blueplanet_options[theme_enable_custom_excerpt]',
        array(
            'default'    => false,
            'capability' => 'edit_theme_options',
         )
      );
      $wp_customize->add_control(
          'theme_enable_custom_excerpt',
          array(
            'label'       => 'Enable Custom Excerpt Length',
            'section'     => 'admin_section',
            'settings'    => 'blueplanet_options[theme_enable_custom_excerpt]',
            'type'        => 'checkbox',
          )
       );
      $wp_customize->add_setting( 'blueplanet_options[theme_custom_excerpt_length]',
         array(
            'default'              => 20,
            'capability'           => 'edit_theme_options',
         )
      );
      $wp_customize->add_control(
          'theme_custom_excerpt_length',
          array(
            'label'           => 'Custom Excerpt Length',
            'section'         => 'admin_section',
            'settings'        => 'blueplanet_options[theme_custom_excerpt_length]',
            'type'            => 'text',
            'active_callback' => 'flag_is_custom_excerpt_enabled',
          )
        );

    }
1
cybmeta