Я пытаюсь создать параметр, который должен быть массивом, даже если в нем есть только один элемент, и сохранить его в базе данных как JSON. По какой-то действительно странной причине, когда я передаю значение в wordpress для обработки, он добавляет дополнительные кавычки, квадратные скобки и экранирует исходные кавычки. Но действительно странная вещь заключается в том, что если я вручную создаю точный массив из одного элемента и преобразую его в JSON, используя тот же метод, он попадает в базу данных, как и предполагалось.
public function settings_callback($input)
{
$platforms = get_option('option_name') ? : json_encode([]);
$platforms = json_decode($platforms, true);
array_unshift($platforms, $input);
$platforms2 = ["Test"];
$platforms = json_encode($platforms);
$platforms2 = json_encode($platforms2);
// return $platforms;
var_dump($platforms);
var_dump($platforms2);
if ($platforms === $platforms2) echo 'wtf';
die();
}
Если я запустил приведенный выше код в функции обратного вызова для настройки и введу «Test» в качестве ввода, он действительно выдает «wtf». но если я верну $platforms
, я получу запись в базе данных:
["[\"Test\"]"]
В то время как возвращение $platforms2
дает мне ожидаемую запись в БД:
["Test"]
Есть какие-нибудь идеи относительно того, что могло бы вызвать это?
Очень похожая вещь случается, если я просто передаю $platforms
как массив для сериализации, фактический ввод получает меня a:1:{i:0;a:1:{i:0;s:4:"Test";}}
, где созданный вручную идентичный массив получает меня a:1:{i:0;s:4:"Test";}