WordPress自定义选项未保存

我在为wordpress添加自定义设置页面时遇到问题, 更具体地说, 是要获取保存的选项。
由于不同的示例和不同的功能对同一事物的解释不同, 因此此文档似乎缺乏而且前后不一致。
WordPress Codex上的最新示例使用清理回调函数来保存选项。但是add_settings_field()文档说保存选项应该在幕后进行。似乎更愿意使用san回调进行保存。
我尝试了各种不同的方法, 但有一次我的代码设法保存了其中一个字段, 但不是全部。
【WordPress自定义选项未保存】我当前的代码:

class wwtkSettings { public function __construct() { if ( is_admin() ){ add_action( 'admin_menu', array( $this, 'add_plugin_page' ) ); add_action( 'admin_init', array( $this, 'page_init' ) ); } }public function add_plugin_page(){ add_options_page( 'WWTK Settings', 'WWTK settings', 'manage_options', 'wwtk-settings', array( $this, 'create_admin_page' ) ); }public function create_admin_page() { ?> < div class="wrap"> < ?php screen_icon(); ?> < h2> WWTK Settings< /h2> < form method="post" action="options.php"> < ?php settings_fields( 'wwtk-setting-group' ); do_settings_sections( 'wwtk-settings' ); ?> < ?php submit_button(); ?> < /form> < /div> < ?php }public function page_init() { register_setting( 'wwtk-setting-group', 'wwtk-setting-group', array( $this, 'wwtk_validate_options' ) ); add_settings_section( 'wwtk-settings-section', 'Categories and pages', array( $this, 'print_section_info' ), 'wwtk-settings' ); add_settings_field( 'frontpage', 'Frontpage category:', array( $this, 'create_category_field' ), 'wwtk-settings', 'wwtk-settings-section', 'frontpage' ); add_settings_field( 'category1', 'Category & page 1', array( $this, 'create_category_field' ), 'wwtk-settings', 'wwtk-settings-section', 'category1' ); add_settings_field( 'category2', 'Category & page 2', array( $this, 'create_category_field' ), 'wwtk-settings', 'wwtk-settings-section', 'category2' ); add_settings_field( 'category3', 'Category & page 3', array( $this, 'create_category_field' ), 'wwtk-settings', 'wwtk-settings-section', 'category3' ); }//TODO: check if category and page exist. and sanitize! public function wwtk_validate_options( $input ) { return $input; }public function print_section_info(){ print 'Enter the names of categories that should be displayed on the page with the same name(both must exist):'; }public function create_category_field($args){ ?> < input type="text" id="< ?php echo $args ?> " name="wwtk-setting-group" value="http://www.srcmini.com/< ?php echo get_option('wwtk-setting-group['.$args.']' ); ?> " /> < ?php } }

#1
/* code similar to your example */class MySettingsPage{ /** * Holds the values to be used in the fields callbacks */ private $options; /** * Start up */ public function __construct() { add_action( 'admin_menu', array( $this, 'add_plugin_page' ) ); add_action( 'admin_init', array( $this, 'page_init' ) ); }/** * Add options page */ public function add_plugin_page() { // This page will be under "Settings" add_options_page( 'Settings Admin', 'My Settings', 'manage_options', 'my-setting-admin', array( $this, 'create_admin_page' ) ); }/** * Options page callback */ public function create_admin_page() { // Set class property $this-> options = get_option( 'my_option_name' ); ?> < div class="wrap"> < ?php screen_icon(); ?> < h2> My Settings< /h2> < form method="post" action="options.php"> < ?php // This prints out all hidden setting fields settings_fields( 'my_option_group' ); do_settings_sections( 'my-setting-admin' ); submit_button(); ?> < /form> < /div> < ?php }/** * Register and add settings */ public function page_init() { register_setting( 'my_option_group', // Option group 'my_option_name', // Option name array( $this, 'sanitize' ) // Sanitize ); add_settings_section( 'setting_section_id', // ID 'My Custom Settings', // Title array( $this, 'print_section_info' ), // Callback 'my-setting-admin' // Page ); add_settings_field( 'id_number', // ID 'ID Number', // Title array( $this, 'id_number_callback' ), // Callback 'my-setting-admin', // Page 'setting_section_id' // Section ); add_settings_field( 'title', 'Title', array( $this, 'title_callback' ), 'my-setting-admin', 'setting_section_id' ); }/** * Sanitize each setting field as needed * * @param array $input Contains all settings fields as array keys */ public function sanitize( $input ) { if( !is_numeric( $input['id_number'] ) ) $input['id_number'] = ''; if( !empty( $input['title'] ) ) $input['title'] = sanitize_text_field( $input['title'] ); return $input; }/** * Print the Section text */ public function print_section_info() { print 'Enter your settings below:'; }/** * Get the settings option array and print one of its values */ public function id_number_callback() { printf( '< input type="text" id="id_number" name="my_option_name[id_number]" value="http://www.srcmini.com/%s" /> ', esc_attr( $this-> options['id_number']) ); }/** * Get the settings option array and print one of its values */ public function title_callback() { printf( '< input type="text" id="title" name="my_option_name[title]" value="http://www.srcmini.com/%s" /> ', esc_attr( $this-> options['title']) ); } }if( is_admin() ) $my_settings_page = new MySettingsPage();

    推荐阅读