web-dev-qa-db-fra.com

API de paramètres - Séparation PHP et HTML

J'ai créé un plugin où les paramètres sont configurés sur différents onglets. Chaque onglet enregistre ses paramètres dans un champ différent dans wp_options. Le code HTML de chaque onglet est séparé dans son propre fichier afin que le mélange de PHP et de HTML soit minimal.

J'aimerais ajouter des champs supplémentaires à un onglet existant, mais je veux enregistrer ces paramètres particuliers dans une entrée distincte dans wp_options. Je sais que cela est possible en utilisant add_settings_field et en spécifiant le code HTML dans la fonction de rappel, mais je souhaite continuer à garder le code HTML séparé de PHP.

Est-il possible de faire les deux?

THX.

[MIS À JOUR]

partials/book-review-admin-advanced.php:

<form action="options.php" method="post">
  <?php
    @settings_fields( 'advanced_options' );
    @do_settings_fields( 'advanced_options' );

    // This doesn't work:
    // @settings_fields( 'general_options' );
    // @do_settings_fields( 'general_options' );
    // Neither does adding a separate form for general_options.
  ?>
  <table class="form-table">
    <tbody>
      <tr>
        <th scope="row">
          <label for="book_review_api_key">
            <?php esc_html_e( 'Google API Key', $this->plugin_name ); ?>:
          </label>
        </th>
        <td>
          <input id="book_review_api_key" class="regular-text text-input" type="text"
        name="book_review_advanced[book_review_api_key]"
        value="<?php echo esc_attr( $advanced['book_review_api_key'] ); ?>">
        </td>
      </tr>
      <tr>
        <th scope="row">
          <label for="book_review_test">
            <?php esc_html_e( 'Test Field', $this->plugin_name ); ?>:
          </label>
        </th>
        <td>
          <!-- How can I save both book_review_advanced and book_review_general? -->
          <input id="book_review_test" class="regular-text text-input" type="text"
        name="book_review_general[test]">
        </td>
      </tr>
    </tbody>
  </table>


  <?php @submit_button(); ?>
</form>

class-book-review-admin.php:

public function init_menu() {
  register_setting( 'advanced_options', 'book_review_advanced', array( $this, 'sanitize_advanced' ) );
  register_setting( 'general_options', 'book_review_general', array( $this, 'sanitize_general' ) );
}

public function sanitize_advanced( $input = array() ) {
  $output = array();

  // Do some sanitization.

  return $output;
}

public function sanitize_general( $input = array() ) {
  $output = array();

  // Do some sanitization.

  return $output;
}

public function render_tabbed_content() {
  if ( isset ( $_GET['tab'] ) ) {
    $active_tab = $_GET['tab'];
  }
  else {
    $active_tab = 'advanced';
  }

  if ( $active_tab == 'advanced' ) {
    $advanced = get_option( 'book_review_advanced' );

    include_once( 'partials/book-review-admin-advanced.php' );
  }

  // Handle other tabs.
}
1
donnapep

L'API de paramètres concerne (également) la modularité des paramètres. Les paramètres peuvent être supprimés (personne ne l'a jamais entendu dire, mais c'est possible) ou modifiés (ma technique préférée actuellement).

Lorsque vous séparez le HTML et PHP, vous interrompez la modularité. Par conséquent, vous ne devez peut-être pas utiliser l'API de paramétrage.

Comme avec beaucoup d'autres choses, vous pouvez probablement le pirater pour utiliser toutes sortes de filtres, mais la question est de savoir pourquoi l'utiliser si cela va à l'encontre de votre pratique de développement préférée.

1
Mark Kaplun