Intereting Posts
как перенаправить на другой пост без получения заголовков уже отправленных ошибок? Новое сообщение отображается как комментарий к странице Изменить постоянную ссылку на приложение Возможно ли заблокировать пользователей подписчиков на смену пароля? OrderBy сообщение Просмотров Заполнение веб-шрифтов Google без разметки символов в URL-адресе Пользовательская позиция постконтактного метаболизма Опубликовать миниатюру для добавления содержимого сообщения через событие ajax click Pull Youtube Ссылка со второго WP_Editor Необходимо добавить правило перезаписи, которое добавляет дополнительную информацию о сообщении для URL-адреса Меню профиля пользователя BuddyPress Отображать сообщение администратора только на главной странице панели мониторинга Случайная запись, страница внутри проблемы с конвейером Правильный и безопасный способ включения php-контента на мою страницу Возможность создания CSS-сайта на нескольких сайтах

Настройки плагина сохраняются, но поля

Я следую руководству @ Otto по настройке 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; }*/ 

Вопросы, которые я принял и проверил, следующие:

  1. Я использую add_submenu_page() где Отто использовал add_options_page()
  2. Я добавил дополнительную порцию:

     if( false == get_option( 'plugin_settings' ) ) { add_option( 'plugin_settings' ); } 
  3. Где я использовал значение, выделенное подчеркиванием: do_settings_sections('plugin_settings') , Otto использовал одиночное значение do_settings_sections('plugin')

  4. Я использую флажок, где Отто использовал текстовое поле

Мои подходы к вышеупомянутым ситуациям:

  1. Не найдено никакой реальной разницы, кроме родительской пули, поэтому она не вызывает проблемы
  2. Без этого блока я ничего не мог сэкономить в db, поэтому я добавил это
  3. Это не вызывает проблем, поскольку я могу поместить данные в db даже с моей стоимостью
  4. Параметр name="" одинаковый, поэтому сохранение не будет затронуто

И вот текущее состояние db, option_value пусто: таблица опций для настроек плагина

Что вызывает у меня боль?

Solutions Collecting From Web of "Настройки плагина сохраняются, но поля"

Вы видите, что функция проверки закомментирована. Попробуйте это только для тестирования:

 // WARNING THIS IS HORRIBLY UNSAFE DO NOT USE IN LIVE SITES function plugin_options_validate($input) { return $input; } 

Теперь ваши варианты сохраняются?

Функции проверки не являются необязательными. Они берут настройки, проверяют их и возвращают действительные. Если у вас нет функции проверки, настройки не будут возвращены из нее и, следовательно, не будут сохранены.

Функция, которую я только что дала, ужасно опасна, потому что она не проверяет. Вам нужно иметь код здесь, чтобы проверить входящие настройки, убедиться, что они действительны, и затем вернуть действительные. Без этого настройки не могут быть сохранены.