Понятия не имею, что должен делать ваш код, но, основываясь на том, что вы опубликовали, попробуйте ... (очевидно, заменяя только часть цикла foreach в вашем коде) ..
foreach ($options as $value) {
if( !isset( $value['id'] ) )
continue;
if( !isset( $_REQUEST[$value['id']] ) ) {
$settings[$value['id']] = '';
continue;
}
if( $value['type'] === "checkbox" || $value['type'] === "multiselect" ) {
// No isset check here, the top conditional catches non-set items
if( is_array( $_REQUEST[$value['id']] ) )
$_REQUEST[$value['id']] = implode( ',', $_REQUEST[$value['id']] );
}
$settings[$value['id']] = $_REQUEST[$value['id']];
}
Должен действовать точно так же, как и раньше, за исключением того, что сначала устанавливаются переменные, при этом также следует устанавливать значение в массиве $ settings в пустую строку, когда не задано соответствующее переменное $ _REQUEST .. (при условии, что я ' следуя тому, что код делает правильно, то есть) ..
РЕДАКТИРОВАТЬ: После обсуждения в комментариях я обновил код выше, что должно исправить уведомление в строке 1957. Имеет смысл, чтобы этот ключ не был установлен для вашего кода, не все элементы массива в $options
на самом деле являются параметрами, некоторые ссылаются на заголовки / вкладки (что угодно), которые выводятся на страницу параметров вашей темы (поэтому имеет смысл пропустить их в цикле выше).
Я думаю, что это решит вашу проблему, но, сказав, что я считаю важным отметить, что код в этой функции не идеален, весь механизм сохранения выглядит не очень хорошо очищенным в целом. Я был бы склонен предложить установить для этой страницы требуемую возможность manage_options
, поэтому она ограничена администраторами, по крайней мере, до тех пор, пока не будет произведена замена (предложения, по которым должен быть отдельный вопрос, и в идеале *) 1014 * ПРМЭ ).