如何通过设置接口将数据数组保存在选项页中?

时间:2012-06-18 作者:dev-jim

我正在尝试创建自己的第一个插件,但我是新手,所以请指导我正确的方向。

此插件用于根据用户的角色设置过期后的日期。现在我陷入了保存数据的阶段。

因为我不想为输入创建新的数据库表。我使用设置api来完成这项工作,并将数据保存在wp\\U选项表中。

在我的插件设置页面中,我希望用户能够添加/编辑/删除规则。每个规则由用户定义,并有多个输入。

要添加规则,用户需要选择角色、post\\u类型、过期的\\u操作和天数限制。我想把这些输入存储在一个数组中,我该怎么做?

例如:

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
如何使用输入名称my html表单,以便在用户每次提交规则时将其保存在数组中?

这是我在插件选项页面中的html表单,用于添加规则:

<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>
我知道表单不工作,因为它没有来自register\\u设置的引用名称。它只是帮助你理解我在做什么。

同样,我的问题是:如何将这些输入值保存在数组中?

1 个回复
最合适的回答,由SO网友:MathSmath 整理而成

这是我喜欢处理表单输入集合的方式。详细说明见备注。

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)

}
这只是一种通用方法。您可以通过为字段创建一个默认值数组,并使用wp_parse_args(). 如果您将此与extract($arr_store_me), 这是一种很好的预填充表单字段的方法,同时避免了未设置变量的警告。

结束