Как сохранять опции с синтаксисом a:n:{{}} в wp_options?

6 янв. 2011 г., 18:03:47
Просмотры: 5.88K
Голосов: 9

Я изучаю работу одного плагина и заметил, что он сохраняет свои данные для option_value в wp_options в таком формате массива...

a:2:{i:20;a:2:{s:8:"original";s:15:"20.original.jpg";s:9:"thumbnail";s:12:"20.thumb.jpg";}i:8;a:2:{s:8:"original";s:14:"8.original.png";s:9:"thumbnail";s:11:"8.thumb.png";}}

Мне нравится этот метод, так как он использует только одну строку для хранения моих пользовательских данных, а очистка при удалении проста. Есть ли стандартный способ выполнять операции get/set для пользовательского поля, который приводит к такому синтаксису?

Обновление: Спасибо Денису и другим, кто добавил ответы.

Вот отличный учебник по этому методу, если у кого-то ещё возникнет такой вопрос > http://striderweb.com/nerdaphernalia/2008/07/consolidate-options-with-arrays/

0
Все ответы на вопрос 3
5

Просто передайте массив при обновлении вашей опции. Он будет автоматически сериализован.

6 янв. 2011 г. 18:05:53
Комментарии

Спасибо, Денис. Вот отличный учебник по этому методу, если у кого-то еще возникнет такой вопрос > http://striderweb.com/nerdaphernalia/2008/07/consolidate-options-with-arrays/

Scott B Scott B
6 янв. 2011 г. 18:36:33

Вау - не знал. Я все время пытался сериализовать их вручную.

Don Gilbert Don Gilbert
6 янв. 2011 г. 21:20:26

Этот формат специфичен для WordPress?

trusktr trusktr
28 мая 2012 г. 23:13:12

Примечание: Вы также можете передать объект (например, stdClass). Когда вы используете get_option, вы получите тот же самый объект обратно :)

Brian Brian
19 мар. 2015 г. 21:32:41

@Brian: На самом деле, это не stdClass например. Это только stdClass, иначе WordPress упадёт при загрузке, если класс не существует, опция установлена на автозагрузку, и автозагрузчик классов не может найти соответствующий класс.

Denis de Bernardy Denis de Bernardy
19 мар. 2015 г. 22:09:19
0

Сериализация выполняется автоматически, но если вы хотите узнать, как сделать это вручную, функция, на которую следует обратить внимание, называется serialize()

6 янв. 2011 г. 18:09:30
0

Как упоминалось в других ответах, (де)сериализация выполняется автоматически для более сложных форматов данных (массивы, объекты) при сохранении или извлечении настроек. Это также применяется к транзиентам (transients) и другим функциям.

Технически это реализовано через внутреннее использование функций maybe_serialize() и maybe_unserialize(), которые определяют, нужно ли обрабатывать данные или передавать их как есть.

6 янв. 2011 г. 18:26:14