J'essaie de créer des options personnalisées pour un modèle que je développe mais j'obtiens une erreur lorsque la case à cocher (ligne 130) n'est pas cochée:
Avertissement: décalage de chaîne illégal 'show_admin_dev' dans E:\composite-cms\Paramètres-Sandbox-maître\lib\admin\pages\dev-page.php à la ligne 11
C'est la ligne qui semble jeter l'erreur:
if ( $options['show_admin_dev'] == 1 )
Le code complet peut être trouvé sur GitHub .
Votre problème est que vous n’avez pas inclus de fonction de désinfection en tant que troisième paramètre de register_settings à la ligne 111. Si aucune désinfection n’est fournie, WordPress supprime la valeur de l’option et en crée une nouvelle basée uniquement sur ce qui est passé dans $_POST
. Comme les cases à cocher non cochées ne sont pas du tout envoyées par le navigateur, vous obtenez $options['show_admin_dev']
non défini.
Vous devriez essayer d’ajouter une désinfection qui ajoute la valeur si elle n’est pas dans l’option
register_setting(
'ccms_developer_options',
'ccms_developer_options',
'ccms_developer_sanit'
);
function ccms_developer_sanit($newval) {
if (!isset($newval['show_admin_dev']))
$newval['show_admin_dev'] = 0;
return $newval;
}
Il apparaît que $options['show_admin_dev']
est en réalité une chaîne , pas un entier. Vous essayez de comparer une chaîne à un entier, ce qui agace vraiment les nouvelles versions de PHP.
Lorsque vous définissez l'option par défaut (ligne 69), show_admin_dev
est défini sur '0'
. Si vous supprimez les guillemets, cela devrait empêcher l’erreur.
Vous pouvez également convertir $options['show_admin_dev']
en entier dans la comparaison à l'aide de la fonction intval()
:
if ( intval( $options['show_admin_dev'] ) == 1 )