web-dev-qa-db-fra.com

Définir la case à cocher comme cochée par défaut dans la page des options

Je crée une page de paramètres de thème. Ainsi, lorsque je commence à coder les options des cases à cocher, cela fonctionne correctement si la valeur par défaut est unchecked. Voici le code:

function classy_show_resume_section_callback () {
    $options = get_option( 'classy_general_settings' );
    $html = "<label class='switch'>";

    if ( empty( $options['classy_show_resume'] ) ) $options['classy_show_resume'] = 0;

    $html .= "<input type='checkbox' name='classy_general_settings[classy_show_resume]' value='1' " . checked($options['classy_show_resume'], 1, false) . " >";

    $html .= "<div class='slider round'></div>";
    $html .= "</label>";

    echo $html;
}

Cependant, parce que je veux que la case à cocher soit checked par défaut, je devais changer la condition if du code précédent. S'il est vide, définissez le $options var égal à 1. Donc le code sera:

function classy_show_resume_section_callback () {
    $options = get_option( 'classy_general_settings' );
    $html = "<label class='switch'>";

    if ( empty( $options['classy_show_resume'] ) ) $options['classy_show_resume'] = 1;

   $html .= "<input type='checkbox' name='classy_general_settings[classy_show_resume]' value='1' " . checked($options['classy_show_resume'], 1, false) . " >";

   $html .= "<div class='slider round'></div>";
   $html .= "</label>";

   echo $html;
}

Donc ça a marché. La case à cocher obtient checked par défaut, mais lorsque je unchecked et que j'ai cliqué sur enregistrer, un problème est survenu dans la base de données. Cela a bien fonctionné et la valeur a été supprimée, mais au début, parce que la valeur de la condition if est maintenant vide, elle apparaît à l'écran sous la forme checked tout le temps, bien qu'en réalité ce ne soit pas dans la BD (conflit).

Alors, comment puis-je résoudre ce conflit?

1
hesham shawky

Option-1: Modifiez l'option de show à hide:

Le moyen le plus simple serait de changer le nom et le comportement de la variable option. Donc, au lieu de $options['classy_show_resume'], vous pouvez l’implémenter en tant que $options['classy_hide_resume'].

De cette façon, par défaut hide option est non coché , cela signifie que vous l’affichez par défaut. Puis masquez-le lorsque ce hide option est coché.

Donc, simplement en changeant le nom de l'option, puis en implémentant hide option (au lieu du show option) dans votre thème, vous pouvez y remédier facilement.

Donc, votre code sera comme:

function classy_hide_resume_section_callback () {
    $options = get_option( 'classy_general_settings' );
    $html = "<label class='switch'>";

    if ( empty( $options['classy_hide_resume'] ) ) $options['classy_hide_resume'] = 0;

    $html .= "<input type='checkbox' name='classy_general_settings[classy_hide_resume]' value='1' " . checked($options['classy_hide_resume'], 1, false) . " >";

    $html .= "<div class='slider round'></div>";
    $html .= "</label>";

    echo $html;
}

Option-2: Make classy_show_resume coché par défaut:

Si vous devez utiliser classy_show_resume avec la valeur par défaut cochée, vous pouvez utiliser la logique suivante:

Par défaut, get_option( 'classy_general_settings' ) devrait renvoyer false et lorsqu'il sera enregistré en tant que unchecked, il s'agira d'une chaîne vide ou d'un tableau avec $options['classy_show_resume'] non défini. Nous allons donc utiliser ceci pour déterminer la valeur par défaut par rapport aux valeurs sauvegardées checked ou unchecked.

Selon cela, votre nouveau CODE sera comme:

function classy_hide_resume_section_callback () {
    $options = get_option( 'classy_general_settings' );
    $classy_show_resume = 0;
    if ( $options === false ) {
        // nothing is set, so apply the default here
        $classy_show_resume = 1;
    }
    else if( is_array( $options ) && isset( $options['classy_show_resume'] ) ) {
        // classy_show_resume is checked
        $classy_show_resume = $options['classy_show_resume'];
    }

    $html = "<label class='switch'>";

    $html .= "<input type='checkbox' name='classy_general_settings[classy_show_resume]' value='1' " . checked( $classy_show_resume, 1, false ) . " >";

    $html .= "<div class='slider round'></div>";
    $html .= "</label>";

    echo $html;
}

Maintenant, il devrait être coché par défaut et afficher la bonne checked | unchecked status après la sauvegarde.

1
Fayaz