Wordpress设置页面选项不更新后端

时间:2017-04-14 17:33:37

标签: php wordpress settings admin options

我正在开发Wordpress插件,而且我的管理页面开发基于Codex的自定义设置页面example。我无法让它更新wp_options数据库中的设置,我似乎无法找到关于我做错了什么的好解释。当我点击“保存设置”时,页面会刷新并在顶部弹出一个栏,说明设置已正确保存,但wp_options中没有显示任何内容,并且文本输入框未填充更新后的价值。

以下是我所拥有的:

Admin init部分:

function secg_settings_init() {
    register_setting( 'secg', 'secg_options' );
    add_settings_section(
        'secg_section_developers',
        __( 'API Keys.', 'secg' ),
        'secg_section_developers_cb',
        'secg'
    );
    add_settings_field(
        'secg_field_test_secret_key', 
        __( 'test-secret-key', 'secg' ),
        'secg_field_test_secret_key_cb',
        'secg',
        'secg_section_developers',
        [
            'label_for' => 'secg_field_test_secret_key',
            'id' => 'test-secret-key'
        ]
    );
}
add_action( 'admin_init', 'secg_settings_init' );

部分和字段回调:

function secg_section_developers_cb( $args ) {
    ?>
    <p id="<?php echo esc_attr( $args['id'] ); ?>"><?php esc_html_e( 'Section Developers Cb.', 'secg' ); ?></p>
    <?php
}

function secg_field_test_secret_key_cb( $args ) {
    $options = secg_option();
    ?>
    <input type="text" 
           name="secg_options[<?php echo esc_attr( $args['label_for'] ); ?>]" 
           id="<?php echo esc_attr( $args['label_for'] ); ?>" 
           value="<?php $options[ $args['label_for'] ] ?>" />
    <?php
}

添加页面:

function secg_options_page() {
    add_menu_page(
    'My Plugin',
    'Plugin Options',
    'manage_options',
    'secg',
    'secg_options_page_html'
    );
}
add_action( 'admin_menu', 'secg_options_page' );

用于设置默认值的处理程序:

function secg_option() {
    $default = array(
        'secg_field_test_secret_key' => 'test secret key'
    );
    return get_option('secg_options', $default);
}

最后,页面本身:

function secg_options_page_html() {
   if ( ! current_user_can( 'manage_options' ) ) {
      return;
   }

   if ( isset( $_GET['settings-updated'] ) ) {
       add_settings_error( 'secg_messages', 'secg_message', __( 'Settings Saved', 'secg' ), 'updated' );
   }

   settings_errors( 'secg_messages' );
   ?>
   <div class="wrap">
       <h1><?php echo esc_html( get_admin_page_title() ); ?></h1>
       <form action="options.php" method="post">
           <?php
           settings_fields( 'secg' );
           do_settings_sections( 'secg' );
           submit_button( 'Save Settings' );
           ?>
       </form>
   </div>
   <?php
}

谢谢!

0 个答案:

没有答案