web-dev-qa-db-fra.com

Conflit de cases dans la page d'administration de mon plugin personnalisé

J'essaie de créer un plugin personnalisé pour WordPress avec une page d'option d'administrateur.

Dans la page d'option, l'utilisateur doit pouvoir cocher une option et si la case à cocher est cochée, le plug-in doit ajouter une section à un formulaire HTML.

Le problème que je rencontre est que la deuxième case à cocher ne stocke pas sa valeur dans la base de données, je ne peux donc pas la vérifier. Si je change l'ordre des codes de déclaration, seule la deuxième case à cocher ne fonctionne pas.

Veuillez noter que mes options de plug-in fonctionnent avec chaque composant et que ce problème ne concerne que les cases à cocher.

Voici la partie case à cocher de mon plugin. Y a-t-il des conflits? Qu'est-ce que je fais mal?

function set_options() {
    register_setting( 'checkbox-1-settings', 'my_checkbox_1_name' );
    register_setting( 'checkbox-2-settings', 'my_checkbox_2_name' );
}

function admin_page(){
    ?>
    <form method="post" action="options.php">
      <?php settings_fields( 'checkbox-1-settings' ); ?>
      <?php settings_fields( 'checkbox-2-settings' ); ?>
      <?php do_settings_sections( 'checkbox-1-settings' ); ?>
      <?php do_settings_sections( 'checkbox-2-settings' ); ?>
      <table class="form-table">
        <tr valign="top">
          <th scope="row">Option 1</th>
          <td><input type='checkbox' name='my_checkbox_1_name' <?php checked( get_option('my_checkbox_1_name'), 1 ); ?> value='1'></td>
        </tr>
        <tr valign="top">
          <th scope="row">Option 2:</th>
          <td><input type='checkbox' name='my_checkbox_2_name' <?php checked( get_option('my_checkbox_2_name'), 1 ); ?> value='1'></td>
        </tr>
      </table>
      <?php submit_button(); ?>
    </form>
    <?php
}

function my_plugin() {

  $html = '<form>
  if (get_option('my_checkbox_1_name')) {
    $html .= '<select name="select1" id="test1">
        <option selected disabled>select1</option>
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
      </select>';
  }
  else if (get_option('my_checkbox_2_name')) {
    $html .= '<select name="select2" id="test2">
        <option selected disabled>select2</option>
        <option value="1">1</option>
        <option value="2">2</option>
        <option value="3">3</option>
      </select>';
  }
  return $html . '<input type="submit" value="Go!"></form>' . $content;
}
1
Css14

vous enregistrez deux groupes de paramètres distincts pour les champs de configuration et le problème peut être ici.

 function set_options() {
    register_setting( 'checkbox-1-settings', 'my_checkbox_1_name' );
    register_setting( 'checkbox-2-settings', 'my_checkbox_2_name' );
}

utilisez donc un seul groupe de paramètres pour les deux champs pour voir si cela fonctionne.

function set_options() {
    register_setting( 'checkbox-settings', 'my_checkbox_1_name' );
    register_setting( 'checkbox-settings', 'my_checkbox_2_name' );
}

Mettre à jour

Obtenir les paramètres de l'API et stocker dans un tableau.

$options = (array) get_option( 'plugin_options' );

Maintenant, $ options est un tableau contenant tous les sous-champs de champs. et vous pouvez obtenir la valeur de n'importe quelle clé en passant simplement cette clé avec ce tableau.

par exemple, pour obtenir une valeur de check_2

$check_two = $options['check_2'];
0
Anwer AR