私はPHPが得意ではありません。 WordPressの管理者用オプションページを作成したところ、問題なく動作します。
// Admin Menu
add_action('admin_menu', 'my_cool_plugin_create_menu');
function my_cool_plugin_create_menu() {
$parent_slug = 'test-slug';
$capability = 'administrator';
// sub menus
add_submenu_page( $parent_slug, 'Test', 'Test', $capability, 'test', 'hp_settings_page');
//call register settings function
add_action( 'admin_init', 'cm_register_settings' );
}
function cm_register_settings() {
// title
register_setting(
'mytheme_group', // Option group
'mytheme_title', // Option name
'admin_options_sanitize_text_1' //sanitize callback
);
// IDs
register_setting(
'mytheme_group',
'mytheme_ids',
'admin_options_sanitize_text_2'
);
}
// Admin Page
function hp_settings_page() { ?>
<div class="wrap">
<h2>Test</h2>
<form method="post" action="options.php">
<?php settings_fields( 'mytheme_group' ); ?>
<?php do_settings_sections( 'mytheme_group' ); ?>
<table class="form-table">
<tr>
<th scope="row">Title</th>
<td>
<textarea name="mytheme_title" rows="10" cols="100"><?php echo get_option('mytheme_title'); ?></textarea>
</td>
</tr>
<tr>
<th scope="row">IDs</th>
<td>
<textarea name="mytheme_ids" rows="10" cols="100"><?php echo get_option('mytheme_ids'); ?></textarea>
</td>
</tr>
</table>
<?php submit_button(); ?>
</form>
</div><?php
}
// sanitize 1
function admin_options_sanitize_text_1($input) {
$new_input = sanitize_text_field( $input );
return $new_input;
}
// sanitize 2
function admin_options_sanitize_text_2($input) {
$new_input = preg_replace("/[^0-9\,]/", "", $input );
return $new_input;
}
これでデータベースに2つの行が作成され、次のように値を表示できます。
echo get_option('mytheme_ids');
echo get_option('mytheme_title');
データベース内の1行に配列として保存するために、このコードにどのような変更を加える必要がありますか?それで、値を次のように表示することができます。
$options = get_option('mytheme_options');
echo = $options['ids'];
echo = $options['title'];
任意の助けをいただければ幸いです。
1つの設定を登録してから、フォーム入力を変更して値を配列に保存するだけです。設定を登録する例です。
register_setting(
'mytheme_settings',
'mytheme_settings',
'admin_options_sanitize'
);
$mytheme_settings = get_option( 'mytheme_settings' );
そしてフィールドマークアップ:
<textarea name="mytheme_settings[title]">
<?php echo esc_textarea( $mytheme_settings['title'] ); ?>
</textarea>
サニタイズ関数を組み合わせて、新しい配列の値で機能するように変更する必要もあります。