web-dev-qa-db-fra.com

Comment sauvegarder un tableau de données dans une page d'options en paramétrant api?

J'essaie de créer mon premier premier plugin, mais je suis novice en codage, alors veuillez me guider dans la bonne direction.

Ce plugin doit définir la date de post-expiration en fonction du rôle de l'utilisateur. Maintenant, je suis bloqué à la phase de sauvegarde des données.

Depuis que je ne veux pas créer une nouvelle table de base de données pour les entrées. J'utilise les paramètres api pour effectuer le travail et enregistrer les données dans la table wp_options.

Dans ma page de paramétrage de plugin, je veux que l'utilisateur puisse ajouter/éditer/supprimer les règles. Chaque règle est définie par l'utilisateur avec plusieurs entrées.

Pour ajouter une règle, l'utilisateur doit sélectionner le rôle, post_type, expired_action et day_limits. Je veux que ces entrées soient stockées dans un tableau, comment puis-je le faire?

Par exemple :

array(1) {
role           => "" // get from the form input
post_type      => "" // get from the form input
expired_action => "" // get from the form input
day_limti      => "" // get from the form input 
        }

array(2) {
    role           => "" 
post_type      => "" 
expired_action => ""  
day_limti      => "" 
    }

array(3) {
role           => "" 
post_type      => "" 
expired_action => "" 
day_limti      => ""    
    }
......etc

Comment utiliser le nom d'entrée de mon formulaire html afin qu'ils puissent être enregistrés dans un tableau chaque fois qu'un utilisateur soumet une règle?

Voici mon formulaire HTML dans la page d'option du plug-in pour ajouter la règle:

<form action="options.php" id="apext_form" method="post" name="author_limit">
              <?php settings_fields('apext_Options'); ?>

    <table class="form-table">
        <tbody>
        <tr valign="top">
        <td>
        <label for="apext_user_role"><?php _e('User Role', 'apext') ?></label>
        <select name="role" id="apext_role_id">
         <option></option>
           <?php global $wp_roles; if ( !isset( $wp_roles ) ) $wp_roles = new WP_Roles();
            foreach ( $wp_roles->role_names as $role => $name ) { ?>
            <option value="<?php echo $name; ?>"><?php echo $name; ?></option>
                    <?php }
           ?>
        </select><br>
        </td>

        <td>
        <label for="apext_post_type"><?php _e('Post Type', 'apext') ?></label>  
        <select name="apext_pt" id="apext_pt_id">
          <?php $post_types=get_post_types('','names'); 
               foreach ($post_types as $post_type ) {
            ?>
            <option value="<?php echo $post_type;?>"><?php echo $post_type;?></option>
            <?php }
            ?>
        </select><br/>

        </td>

        <td><label for="Expired Action"><?php _e('Expired Action'); ?></label>
         <select name="remove_to" id="re_to"><option value =''></option>
                                             <option value="pending">pending</option>
                             <option value="draft">draft</option>
                             <option value="trash">trash</option>
                             <option value="delete">delete</option>
        </td>

          <td>
         <label for="apext_post_limit"><?php _e('Days Limit', 'apext') ?></label>   
                 <input type="text" id="apext_lim" name="apext_lim" id="lim" size="4" value="<?php echo get_option('apext_lim');?>"/><br>
         </td>

                 <td><input class="button-primary" type="submit" name="Submit" value="<?php _e("Submit Rule", 'apext') ?>" /></td>
        </tr>   
        </tbody>
  </table>
 </form>

Je sais que le formulaire ne fonctionne pas, car il n'a pas de nom de référence dans register_settings. Cela vous aide simplement à comprendre ce que j'essaie de faire.

Encore une fois, ma question: comment puis-je enregistrer ces valeurs d'entrée dans un tableau?

2
dev-jim

C’est ainsi que j’aime gérer la collecte des entrées de formulaire. Une explication détaillée est dans les commentaires.

if( isset( $_POST ) ) {

    // Create an empty array. This is the one we'll eventually store.
    $arr_store_me = array();

    // Create a "whitelist" of posted values (field names) you'd like in your array.
    // The $_POST array may contain all kinds of junk you don't want to store in
    // your option, so this helps sort that out.
    // Note that these should be the names of the fields in your form.
    $arr_inputs = array('input_1', 'input_2', 'input_3', 'etc');

    // Loop through the $_POST array, and look for items that match our whitelist
    foreach( $_POST as $key => $value ) {

        // If this $_POST key is in our whitelist, add it to the arr_store_me array
        if( in_array( $key, $arr_inputs) )
            $arr_store_me[$key] = $value;

    }

    // Now we have a final array we can store (or use however you want)!
    // Update option accepts arrays--no need
    // to do any other formatting here. The values will be automatically serialized.
    update_option('option_name', $arr_store_me)

}

Ceci est juste une approche générale. Vous pouvez améliorer cela en créant un tableau de valeurs par défaut pour les champs et en le comparant à votre tableau "arr_store_me" à l'aide de wp_parse_args () . Si vous combinez cela avec un extract ($ arr_store_me) , cela devient un excellent moyen de pré-remplir des champs de formulaire tout en évitant les avertissements pour les vars non définis.

1
MathSmath