web-dev-qa-db-fra.com

Comment corriger le décalage de chaîne non initialisé: erreur dans une case à cocher dans WP API de paramètres

J'essaie de créer une page d'options avec un champ de case à cocher. La case à cocher fonctionne bien, mais lorsque je décoche la case et enregistre les paramètres, une chaîne d'erreur s'affiche

Notice: Uninitialized string offset: 0 in C:\xampp\htdocs\project\wp-content\plugins\test\admin\options.php on line 55

Voici le code de paramètres principal:

register_setting('twb_settings', 'twb_option', '' );

add_settings_section('twb_section', 'General Settings', '', __FILE__);

add_settings_field(  'hide_avatar',  'Hide Avatar',  'hide_vatar_fn',  __FILE__,  'twb_section');

function hide_vatar_fn()
{
    $options = get_option( 'twb_option' );      
    echo'<input type="checkbox" id="hide_avatar" name="twb_option[hide_avatar]" value="1" ' . checked(1, $options['hide_avatar'], false) . '/>';
}

Si j'ajoute un rappel de désinfection dans register_settings, alors l'erreur est remplacée par l'erreur Undefined Variable.

Si je désactive le mode WP_Debug, toutes les erreurs ont disparu.

1
bakar

Très probablement, votre $options est une chaîne et non un tableau.

Il est toujours préférable de vérifier que les options $ sont dans le format que vous attendez, en particulier en période de développement, lorsque vous êtes susceptible de changer de format et trop paresseux pour nettoyer la base de données.

quelque chose comme

if (!isset($options['hide_avatar'])) 
  $options['hide_avatar'] = 0;

Cela aurait quand même pu provoquer une erreur étrange, mais il aurait été un peu plus facile de comprendre exactement où et peut-être pourquoi.

1
Mark Kaplun