我正在开发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
}
谢谢!