web-dev-qa-db-fra.com

Erreur d'API de paramètres WordPress lorsque la case à cocher n'est pas cochée

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 .

3
CompositeUK

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;
}
3
Mark Kaplun

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 )
0
shea