Друзья, не пойму что за баг. Может я что-то упустил или не знаю в PHP? Нужна помощь.
Есть кастомная страничка настроек в админке, с множеством чекбоксов:
Но проблема в том, что если все чекбоксы не отмечены как unchecked (без галочки) то при сохранении вылезает Warning ошибка.
Illegal string offset
Выглядит это так:
Прикладываю весь PHP код функций вывода этой страницы настроек. Может увидите ошибку.
<?php
//Настройки панели администрирования
//Регистрация функции настроек
function theme_settings_init(){
register_setting( 'theme_settings', 'theme_settings' );
}
// Добавление настроек в меню страницы
function add_settings_page() {
add_menu_page( __( 'Опции темы' ), __( 'Опции темы' ), 'manage_options', 'settings', 'theme_settings_page');
}
//Добавление действий
add_action( 'admin_init', 'theme_settings_init' );
add_action( 'admin_menu', 'add_settings_page' );
//Сохранение настроек
function theme_settings_page() {
global $select_options; if ( ! isset( $_REQUEST['settings-updated'] ) ) $_REQUEST['settings-updated'] = false;
?>
<div>
<h2 id="title">Настройка темы</h2>
<?php if ( false !== $_REQUEST['settings-updated'] ) : ?>
<div id="message" class="updated">
<p><strong>Настройки сохранены</strong></p>
</div>
<?php endif; ?>
<form method="post" action="options.php">
<?php settings_fields( 'theme_settings' ); ?>
<?php $options = get_option( 'theme_settings' ); ?>
<table>
<tr valign="top">
<td>Чекбокс 1:</td>
<td><input type="checkbox" name="theme_settings[show_block_1]" id="theme_settings[show_block_1]" value="1"<?php if($options[show_block_1]=='1') echo ' checked="checked"';?> /></td>
</tr>
<tr valign="top">
<td>Чекбокс 2:</td>
<td><input type="checkbox" name="theme_settings[show_block_2]" id="theme_settings[show_block_2]" value="1"<?php if($options[show_block_2]=='1') echo ' checked="checked"';?> /></td>
</tr>
<tr valign="top">
<td>Чекбокс 3:</td>
<td><input type="checkbox" name="theme_settings[show_block_3]" id="theme_settings[show_block_3]" value="1"<?php if($options[show_block_3]=='1') echo ' checked="checked"';?> /></td>
</tr>
<tr valign="top">
<td>Чекбокс 4:</td>
<td><input type="checkbox" name="theme_settings[show_block_4]" id="theme_settings[show_block_4]" value="1"<?php if($options[show_block_4]=='1') echo ' checked="checked"';?> /></td>
</tr>
</table>
<p><input name="submit" id="submit" class="button button-primary" value="Сохранить" type="submit"></p>
</form>
</div>
<?php } ?>
Может что то не так с базой данных? Где хранятся эти настройки? Но вроде как потестил уже на разных wp сайтах, везде всё тоже самое...
Что здесь не так?