Отличия Unregister_setting() от Delete_option()
-
прочитал это https://truemisha.ru/blog/wordpress/option-pages.html
оформляем в плагин, добавляем register_deactivation_hook, подключаем
<?php /* Plugin Name: My New Plugin 2 Version: 0.1 */ $true_page = 'gutp2.php'; // это часть URL страницы, рекомендую использовать строковое значение, т.к. в данном случае не будет зависимости от того, в какой файл вы всё это вставите /* * Функция, добавляющая страницу в пункт меню Настройки */ function true_options() { global $true_page; add_options_page( 'Параметры1', 'Параметры2', 'manage_options', $true_page, 'true_option_page'); } add_action('admin_menu', 'true_options'); /** * Возвратная функция (Callback) */ function true_option_page(){ global $true_page; ?><div class="wrap"> <h2>Дополнительные параметры сайта</h2> <form method="post" enctype="multipart/form-data" action="options.php"> <?php settings_fields('true_options'); // меняем под себя только здесь (название настроек) do_settings_sections($true_page); ?> <p class="submit"> <input type="submit" class="button-primary" value="<?php _e('Save Changes') ?>" /> </p> </form> </div><?php } function untrue_option() { unregister_setting( 'true_options', 'true_options'); // delete_option( 'true_options' ); // ОСНОВНОЙ ВОПРОС !!! } register_deactivation_hook( __FILE__ , 'untrue_option' ); /* * Регистрируем настройки * Мои настройки будут храниться в базе под названием true_options (это также видно в предыдущей функции) */ function true_option_settings() { global $true_page; // Присваиваем функцию валидации ( true_validate_settings() ). Вы найдете её ниже register_setting( 'true_options', 'true_options', 'true_validate_settings' ); // true_options // Добавляем секцию add_settings_section( 'true_section_1', 'Текстовые поля ввода', '', $true_page ); // Создадим текстовое поле в первой секции $true_field_params = array( 'type' => 'text', // тип 'id' => 'my_text', 'desc' => 'Пример обычного текстового поля.', // описание 'label_for' => 'my_text' // позволяет сделать название настройки лейблом (если не понимаете, что это, можете не использовать), по идее должно быть одинаковым с параметром id ); add_settings_field( 'my_text_field', 'Текстовое поле', 'true_option_display_settings', $true_page, 'true_section_1', $true_field_params ); // Создадим textarea в первой секции $true_field_params = array( 'type' => 'textarea', 'id' => 'my_textarea', 'desc' => 'Пример большого текстового поля.' ); add_settings_field( 'my_textarea_field', 'Большое текстовое поле', 'true_option_display_settings', $true_page, 'true_section_1', $true_field_params ); // Добавляем вторую секцию настроек add_settings_section( 'true_section_2', 'Другие поля ввода', '', $true_page ); // Создадим чекбокс $true_field_params = array( 'type' => 'checkbox', 'id' => 'my_checkbox', 'desc' => 'Пример чекбокса.' ); add_settings_field( 'my_checkbox_field', 'Чекбокс', 'true_option_display_settings', $true_page, 'true_section_2', $true_field_params ); // Создадим выпадающий список $true_field_params = array( 'type' => 'select', 'id' => 'my_select', 'desc' => 'Пример выпадающего списка.', 'vals' => array( 'val1' => 'Значение 1', 'val2' => 'Значение 2', 'val3' => 'Значение 3') ); add_settings_field( 'my_select_field', 'Выпадающий список', 'true_option_display_settings', $true_page, 'true_section_2', $true_field_params ); // Создадим радио-кнопку $true_field_params = array( 'type' => 'radio', 'id' => 'my_radio', 'vals' => array( 'val1' => 'Значение 1', 'val2' => 'Значение 2', 'val3' => 'Значение 3') ); add_settings_field( 'my_radio', 'Радио кнопки', 'true_option_display_settings', $true_page, 'true_section_2', $true_field_params ); } add_action( 'admin_init', 'true_option_settings' ); /* * Функция отображения полей ввода * Здесь задаётся HTML и PHP, выводящий поля */ function true_option_display_settings($args) { extract( $args ); $option_name = 'true_options'; $o = get_option( $option_name ); switch ( $type ) { case 'text': $o[$id] = esc_attr( stripslashes($o[$id]) ); echo "<input class='regular-text' type='text' id='$id' name='" . $option_name . "[$id]' value='$o[$id]' />"; echo ($desc != '') ? "<br /><span class='description'>$desc</span>" : ""; break; case 'textarea': $o[$id] = esc_attr( stripslashes($o[$id]) ); echo "<textarea class='code large-text' cols='50' rows='10' type='text' id='$id' name='" . $option_name . "[$id]'>$o[$id]</textarea>"; echo ($desc != '') ? "<br /><span class='description'>$desc</span>" : ""; break; case 'checkbox': $checked = ($o[$id] == 'on') ? " checked='checked'" : ''; echo "<label><input type='checkbox' id='$id' name='" . $option_name . "[$id]' $checked /> "; echo ($desc != '') ? $desc : ""; echo "</label>"; break; case 'select': echo "<select id='$id' name='" . $option_name . "[$id]'>"; foreach($vals as $v=>$l){ $selected = ($o[$id] == $v) ? "selected='selected'" : ''; echo "<option value='$v' $selected>$l</option>"; } echo ($desc != '') ? $desc : ""; echo "</select>"; break; case 'radio': echo "<fieldset>"; foreach($vals as $v=>$l){ $checked = ($o[$id] == $v) ? "checked='checked'" : ''; echo "<label><input type='radio' name='" . $option_name . "[$id]' value='$v' $checked />$l</label><br />"; } echo "</fieldset>"; break; } } /* * Функция проверки правильности вводимых полей */ function true_validate_settings($input) { foreach($input as $k => $v) { $valid_input[$k] = trim($v); /* Вы можете включить в эту функцию различные проверки значений, например if(! задаем условие ) { // если не выполняется $valid_input[$k] = ''; // тогда присваиваем значению пустую строку } */ } return $valid_input; }
Вопросы.
1. В чем отличия, в описании почти одно и тоже, только первая не работает. Тут http://onwp.ru/rabota-s-bazoj-dannyx/logika-raboty-s-tablicej-wp_options-v-wordpress.html прочитал что первая «вычеркивает», а вторая «удаляет». Не понятно назначение первой. В register_deactivation_hook в функции если вторая заремлена, то при деактивации плагина опция из настроек не удаляется.
Дополнительные.
2. Как на этапе формирования страницы опций воткнуть туда их дефолтные значения?
3. Можно ли на этой странице добавить в начале например краткое описание (текст добавить)?проглядел, нашел
4. Почему при добавлении опции используется хук add_action( ‘admin_init’, ‘true_option_settings’ );
а не при register_activation_hook (и не хотят добавляться, если заменить)?
5. Правильно ли, что все всамомделишные опции из этого примера записываются в одну (массив)? Доставать их потом по мере надобности (true_option_display_settings) довольно проблематично вижу. Есть ли более удобный\правильный способ?
6. Много почитал про формирование настроек страницы опций для плагина. Единого мнения нет. Но сейчас вижу что в новых версиях WP уже есть инструменты для этого. Некоторые настаивают, чтобы опции плагина были в отдельных таблицах в БД + желательно отдельно каждая. Что думаете Вы?Спасибо.
- Тема «Отличия Unregister_setting() от Delete_option()» закрыта для новых ответов.