Intereting Posts
Выдержка – добавьте последние несколько слов сообщений в Поиск пользователей с настраиваемыми метаданными Как я могу сделать капитальные буквы (верхний регистр) постоянными? Многопользовательский виджет WordPress Скрыть элементы управления TinyMCE в TinyMCE 4 (WordPress 3.9) Файл дескриптора WordPress – fopen, fwrite не работает с $ .ajax или $ .post JQuery Получить идентификатор страницы, содержащей вторичный цикл в контенте как отключить кнопку при нажатии три раза Количество сообщений пользователя по идентификатору пользователя, типу сообщения и статусу сообщения Добавить метабокс с загрузчиком мультимедиа в пользовательский тип сообщения как изменить количество сообщений, возвращаемых в конкретном цикле, не делая их глобальными? Фильтрующая строка, подобная слипу Запросить сообщения по пользовательской таксономии и сортировать по post_modified Постоянная ссылка не изменится – она ​​хочет иметь -2 slug как установить из адреса в соответствии с адресом ввода формы для wp_mail ()?

Почему API-интерфейс настроек не сохраняет мой массив параметров

Я пишу набор классов, чтобы легко создавать страницы параметров, доступные через подменю стандартных меню WordPress, и способ легко создавать параметры для указанных меню. То, как я подключаю его, – это класс настроек, с которым вы передаете настройки, и я намереваюсь, чтобы он работал вместе с классом подменю, чтобы создать меню, страницу настроек и аккуратно сохранить параметры в одном варианте. Опция создается в базе данных, но ничего не сохраняется в опции. Может ли кто-нибудь привести меня в правильном направлении? Вот мой код:

Класс настроек

class settings_page { public function __construct($args){ foreach($args['sections'] as $section){ $section_name = $section['section_name']; $section_id = $section['section_id']; if( false == get_option( $section_id ) ) { add_option( $section_id ); } $options = get_option($section_id); $section_text = $section['section_text']; $page = $section['page']; add_settings_section($section_id, $section_name, function(){return $section_text;}, $page); foreach($section['items'] as $item) { $type = $item['type']; $id = $item['id']; $description = $item['description']; $title = $item['title']; $choices = $item['choices']; if ($description) $title = $title . '<br /><small class="italic">' . $description . '</small>'; switch($type){ case "checkbox": add_settings_field($id, $title, function ($section) use ($options) { $id = $section[0]; $html = '<input type="checkbox" id="' . $id . '" name="' . $id . '" value="1" ' . checked(1, $options[$id], false) . '/>'; echo $html; }, $page, $section_id, array($id)); break; case "text": add_settings_field($id, $title, function ($section) use ($options) { $id = $section[0]; unset($html); $html .= '<input type="text" id="' . $id . '" name="' . $id . '" value="' . $options[$id] . '" />'; echo $html; }, $page, $section_id, array($id)); break; case "textarea": add_settings_field($id, $title, function ($section) use ($options) { $id = $section[0]; unset($html); $html .= '<textarea class="large-text" cols="50" rows="10" type="text" id="' . $id . '" name="' . $id . '">' . $options[$id] . '</textarea>'; echo $html; }, $page, $section_id, array($id)); break; case "pulldown": add_settings_field($id, $title, function ($section) use ($options) { $id = $section[0]; $choices = $section[1]; $value = $options[$id]; unset($html); $html = '<select id="' . $id . '" name="' . $id . '">'; $html .= '<option value=""> - Select - </option>'; foreach($choices as $key=>$val){ $selected = ''; if ($value== $key) $selected = ' selected="selected" '; $html .= '<option value="' . $key . '"' . $selected . '>'.$val.'</option>'; } $html .= '</select>'; echo $html; }, $page, $section_id, array($id, $choices)); break; } } register_setting($page, $section_id); } new submenu(array( "parent" => $args['parent'], "title"=>$args['title'], "text"=>$args['text'], "capability"=>$args['capability'], "slug"=>$args['slug'] )); } } 

Класс подменю

 <?php class submenu { function __construct($args=""){ $parent = strtolower($args['parent']); $title = $args['title']; $text = $args['text']; $capability = $args['capability']; $slug = $args['slug']; switch($parent){ case 'dashboard': $name = "index.php"; break; case 'posts': $name = 'edit.php'; break; case 'media': $name='upload.php'; break; case 'links': $name='link-manager.php'; break; case 'pages': $name='edit.php?post_type=page'; break; case 'comments': $name='edit-comments.php'; break; case 'appearance': $name='themes.php'; break; case 'plugins': $name='plugins.php'; break; case 'users': $name='users.php'; break; case 'tools': $name='tools.php'; break; case 'settings': $name='options-general.php'; break; default: $name='options-general.php'; break; } add_action('admin_menu', function() use ($name, $title, $text, $capability, $slug) { add_submenu_page( $name, $title, $text, $capability, $slug, function() use ($name, $title, $text, $capability, $slug) { ?> <div class="wrap"> <div id="icon-themes" class="icon32"></div> <h2><?php echo $title; ?></h2> <form method="post" action="options.php"> <?php settings_fields( $slug ); ?> <?php do_settings_sections( $slug );?> <?php submit_button(); ?> </form> </div> <?php } ); } ); } } 

Вот где я на самом деле называю классы / методы

 add_action('admin_menu', function() { $options['parent'] = "settings"; $options['title'] = "My Settings"; $options['text'] = "My Settings"; $options['capability'] = "manage_options"; $options['slug'] = "my_settings"; $settings['section_name'] = "General Section"; $settings['section_id'] = "general_section"; $settings['section_text'] = "This be General Section Test"; $settings['page'] = "my_settings"; $settings['items'] = array( array( 'type' => 'checkbox', 'id' => 'show_header', 'title' => 'The title, to show header', 'description' => 'show the header now please', ), array( 'type' => 'textarea', 'id' => 'show_footer', 'title' => 'The title, to show footer', 'description' => 'show the footer now please', ), array( 'type' => 'text', 'id' => 'text_item', 'title' => 'Enter anything here', 'description' => '', ), array( 'type' => 'pulldown', 'id' => 'which_one', 'title'=>'Who\'s on First?', 'description'=>'', 'choices'=>array( '1'=>'Who', '2'=>'What', '3'=>'Why', ) ), ); $settings2['section_name'] = "Second Section"; $settings2['section_id'] = "second_section"; $settings2['section_text'] = "More Settings"; $settings2['page'] = "my_settings"; $settings2['items'] = array( array( 'type' => 'checkbox', 'id' => 'show_header_2', 'description' => 'Show Second Header', 'title' => 'Show the Second Header?', ), array( 'type' => 'textarea', 'id' => 'show_footer_2', 'description' => 'Tell me a story', 'title' => 'It can be about anything!', ), ); $options['sections'][] = $settings; $options['sections'][] = $settings2; new settings_page($options); }, 1); 

Что работает:

Он работает, если я меняю $ options [$ id] на get_option ($ id), но это сохраняет каждый отдельный параметр в его собственной индивидуальной настройке в базе данных, которая крайне неэффективна. У меня error_logged $ page, $ section_id прямо перед вызовом register_setting, и все так, как должно быть, это оставляет меня озадаченным.

Что не работает: сохранение этих настроек в сериализованном массиве 🙂

Я рад предоставить что-нибудь еще, что поможет вам помочь.

Благодарю.

Solutions Collecting From Web of "Почему API-интерфейс настроек не сохраняет мой массив параметров"