我在跟踪@Otto\'s tutorial 在设置API上。我设法将插件设置保存到options
表,但无论如何都无法保存任何字段。
<?php
/**
* Add Settings SubMenu
* Thanks to: Otto
* Following: http://ottopress.com/2009/wordpress-settings-api-tutorial/
*/
function plugins_settings_page() {
add_submenu_page(
\'my-page-slug\', //$parent_slug
\'Plugin Settings\', //$page_title
\'Plugin Settings\', //$menu_title
\'manage_options\', //$capability
\'plugin-settings\', //$menu_slug
\'plugins_settings_page_callback\' // callback function
);
}
add_action(\'admin_menu\', \'plugins_settings_page\');
function plugins_settings_page_callback() {
?>
<div class="wrap">
<h2>Plugin Settings</h2>
<?php settings_errors(); ?>
<form action="options.php" method="post">
<?php settings_fields(\'plugin_options\'); ?>
<?php do_settings_sections(\'plugin_settings\'); ?>
<p class="submit">
<?php submit_button(); ?>
</p>
</form>
</div> <!-- .wrap -->
<?php
}
function plugin_options_init(){
if( false == get_option( \'plugin_settings\' ) ) {
add_option( \'plugin_settings\' );
}
register_setting(
\'plugin_options\', // Option group*
\'plugin_options\', // Option Name*
\'plugin_options_validate\' // Sanitize Callback Function
);
add_settings_section(
\'plugin_general\', // ID/Slug*
\'General Settings\', // Name*
\'plugin_section_callback\', // Callback*
\'plugin_settings\' // Page on which to add this section of options*
);
add_settings_field(
\'plugin_function_activation\', // ID*
\'Activate Plugin Function\', // Title*
\'plugin_setting_field\', // Callback Function*
\'plugin_settings\', // Page (Plugin)*
\'plugin_general\' // Section
);
}
// add the admin settings and such
add_action( \'admin_init\', \'plugin_options_init\' );
function plugin_section_callback() {
//echo \'<p>Main description of this section here.</p>\';
}
function plugin_setting_field() {
$options = get_option(\'plugin_options\');
echo "<input name=\'plugin_options[plugin_settings_field]\' id=\'plugin_function_activation\' type=\'checkbox\' value=\'1\' ".checked( 1, $options[\'plugin_settings_field\'], false ) . " />";
}
/*// validate our options
function plugin_options_validate($input) {
$options = get_option(\'plugin_options\');
$options[\'text_string\'] = trim($input[\'text_string\']);
if(!preg_match(\'/^[a-z0-9]{32}$/i\', $options[\'text_string\'])) {
$options[\'text_string\'] = \'\';
}
return $options;
}*/
我假设和检查的问题包括:
我正在使用add_submenu_page()
奥托使用的地方add_options_page()
我额外添加了以下部分:
if( false == get_option( \'plugin_settings\' ) ) {
add_option( \'plugin_settings\' );
}
我使用下划线分隔值的地方:
do_settings_sections(\'plugin_settings\')
, Otto使用单一值
do_settings_sections(\'plugin\')
我使用了一个复选框,奥托使用了一个文本框,我处理上述情况:
除了父slug之外,没有发现任何真正的差异,因此它不会导致问题,没有该块,我无法将任何内容保存到db中,因此我添加了这个,因为我可以将数据放入db中,即使使用我的值name=""
参数都是相同的,因此保存不会受到影响,下面是db的当前状态,option_value
为空:
是什么让我感到疼痛?