J'ai créé un plugin WordPress et ajouté une page d'options.
Il y a un message d'erreur quand la case à cocher est décochée:
Notice: Undefined index: upo_enable
Mais lorsque la case à cocher est cochée, cela fonctionne bien. Voir le GIF ci-dessous:
Le code de démonstration:
<?php
/*
Plugin Name: update option
Plugin URI:
Description: Plugin Demo.
Author: Ryan
Version: 1.0
Author URI:
*/
if ( !function_exists('upo_admin_page') ) :
function upo_admin_page() {
add_options_page(
__( 'Update Option', 'demo' ),
__( 'Update Option', 'demo' ),
'manage_options',
'update-option',
'upo_option_page'
);
}
endif;
add_action( 'admin_menu', 'upo_admin_page' );
// Update Options.
if ( !function_exists('upo_options_update') ) :
function upo_options_update() {
$updated = '<div class="updated settings-error notice is-dismissible"><p><strong>' . __('Settings saved.', 'demo') . '</strong></p></div>';
if (isset($_POST['update_options'])) {
update_option('upo_enable', $_POST['upo_enable']);
echo $updated;
}
}
endif;
if ( !function_exists('upo_option_page') ) :
function upo_option_page() {
?>
<div class="upo-wrap">
<h2><?php _e('Update Options') ?></h2>
<?php upo_options_update(); ?>
<div class="update-option">
<form method="post" action="<?php echo admin_url( 'options-general.php?page=update-option' ); ?>">
<?php wp_nonce_field('update_options');?>
<table class="upo-options-form">
<tr valign="top">
<th scope="row"><?php _e('Enable'); ?></th>
<td><label for="upo_enable">
<input name="upo_enable" type="checkbox" id="upo_enable" value="true" <?php checked('true', get_option('upo_enable')); ?> /><?php _e('Test Text'); ?></label>
</td>
</tr>
</table>
<p class="upo-submit">
<input type="submit" name="update_options" class="button-primary" value="<?php _e('Save Changes','demo'); ?>" />
</p>
</form>
</div>
</div>
<?php
}
endif;
Alors, comment puis-je résoudre ce problème?
Merci!
En effet, lorsqu'une case à cocher n'est pas cochée, elle n'est pas envoyée au serveur. C'est pourquoi le tableau POST ne possède pas l'index upo_enable
.
Vous pouvez cependant vérifier si la valeur est vide ou non:
$upo_enable = !empty($_POST['upo_enable']) ? true : false;
Or
$upo_enable = !empty($_POST['upo_enable']) ? $_POST['upo_enable'] : false;
Pour en savoir plus: https://www.w3.org/TR/html401/interact/forms.html
Les cases à cocher (et les boutons radio) sont des boutons d'activation/désactivation que l'utilisateur peut basculer. Un commutateur est "activé" lorsque l'attribut vérifié de l'élément de contrôle est défini. Lorsqu'un formulaire est soumis, seuls les contrôles de case à cocher "sur" peuvent réussir.