Поддержка → Проблемы и решения → Incorrect work stripslashes_deep() please fix in net release
Incorrect work stripslashes_deep() please fix in net release
-
I have a problem with stripslashes_deep() function.
function stripslashes_deep($value) { if ( is_array($value) ) { $value = array_map('stripslashes_deep', $value); } elseif ( is_object($value) ) { $vars = get_object_vars( $value ); foreach ($vars as $key=>$data) { $value->{$key} = stripslashes_deep( $data ); } } else { // If variable has type bool or int, after taht //type string // need add check type variable if( is_string($value) ) { $value = stripslashes($value); } } return $value; }
I check wp_capabilities
older
a:1:{s:13:"administrator";b:1;}
newer
a:1:{s:13:"administrator";s:1:"1";}
This a big problem, variable can’t change type, afteb save to DB.
-
Could you please be more specific? (You can write in Russian if you want.)
Я вижу проблему в том, что при сохранении данных в базу данных, тип данных теряется.
Например есть массив
{ [‘administrator’] => bool(true) }
Когда я пользовался функциями создания пользователей, я получал wp_capabilities в таком виде
a:1:{s:13:»administrator»;b:1;}
после апгрейда PHP на сервере до версии 5.3, запись стала другой
a:1:{s:13:»administrator»;s:1:»1″;}
Я выяснил, что преобразование типа получилось после обработки функции
stripslashes_deep(), и данные стали иметь вид:
{ [‘administrator’] => string»1″ }
Мне кажется что необходимо сохранять тип данных так как для некоторых задач это может быть важным.Разработчики рекомендуют использовать API WordPress вместо прямых SQL-запросов, т.к. нет гарантии, что в будущих версиях не поменяется что-нибудь ещё в способах хранения информации.
В самом WordPress тип данных (
boolean
илиstring
) в этом массиве не важен. Почему он важен для вас?Если вы всё же считаете, что это баг, напишите в багтрекер:
http://core.trac.wordpress.org/На самом деле это пример наглядный и только. Я очень часто создаю кастомные поля в профайле юзера, и очень важно сохранять типы данных.
Что касается данного поля то пришлось прибегнуть к выполнению запроса такого рода
…. WHERE wp_capabilities LIKE(‘%a:1:{s:13:»administrator»;b:1;}%’)
соответственно при создании новых юзеров у которых поле стало иметь значеине a:1:{s:13:»administrator»;s:1:»1″;} запрос не отработал.
Так как я стараюсь не модифицировать сам вордпресс, то решил запостить этот вопрос.http://core.trac.wordpress.org/ticket/18026
WHERE wp_capabilities LIKE(‘%a:1:{s:13:»administrator»;b:1;}%’)
А почему не просто
WHERE wp_capabilities LIKE('%administrator%')
?я стараюсь не модифицировать сам вордпресс
Это хорошо 🙂
- Тема «Incorrect work stripslashes_deep() please fix in net release» закрыта для новых ответов.