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?
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;
}
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.