私は自分自身の最初のプラグインを作成しようとしていますが、私は初心者をコーディングしていますので正しい方向に案内してください。
このプラグインは、ユーザーの役割に基づいて投稿有効期限を設定するためのものです。今、私はデータの保存段階に行き詰まっています。
入力用に新しいデータベーステーブルを作成したくないので。設定APIを使用して作業を行い、データをwp_optionsテーブルに保存します。
私のプラグイン設定ページで、ユーザーがルールを追加/編集/削除できるようにしたいです。各ルールは、複数の入力を使用してユーザーによって定義されます。
ルールを追加するには、ロール、post_type、expired_action、およびday_limitsを選択します。これらの入力を配列に格納したいのですが、どうすればよいでしょうか。
例えば :
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
ユーザーがルールを送信するたびに配列に保存できるように、入力フォームの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_settingsからの参照名がないため、フォームが機能していないことを私は知っています。私が何をしようとしているのかを理解するのに役立ちます。
繰り返しますが、私の質問です。これらの入力値を配列に保存する方法を教えてください。
これは私がフォーム入力のコレクションを処理するのが好きな方法です。詳細な説明はコメントにあります。
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() を使用してそれをあなたの "arr_store_me"配列と比較することでこれを改善できます。これを extract($ arr_store_me) と組み合わせると、設定されていない変数に対する警告を避けながらフォームフィールドを事前入力するのに最適な方法になります。