WordPress: обновление отдельных элементов в сериализованном наборе параметров - PullRequest
1 голос
/ 09 ноября 2010

В WordPress 3.0 мне нужно обновить отдельные параметры, хранящиеся в таблице wp_options, как сериализованные данные.(для пользовательского интерфейса ajax)

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

Я не смог найти встроенную функцию WP для этого, поэтому я делаю это с помощью функции ниже, и она прекрасно работает.

Мой вопрос: Это лучший способ или для этого есть функция-обертка WP - или, альтернативно, - нужно ли писать класс, расширяющий существующий класс WP?

/**
  * Function to fetch, modify and store a serialized options string 
  * Used for updating an individual key-value pair within a larger data set
  * 
  * $opt_group is the name if the option in the wp_options table
  * it contains serialized data representing an array of individual oprions relating
  * to an 'options-group of a theme framework
  */

function alt_update_option($opt_key,$opt_val,$opt_group){   
    // get options-data as it exists before update
    $options = get_option($opt_group);
    // update it
    $options[$opt_key] = $value;
    // store updated data
    update_option($opt_group,$options);
}

1 Ответ

0 голосов
/ 09 ноября 2010

AFAIK нет способа обновить один элемент сериализованной опции, вам нужно извлечь и отправить всю группу.

Возможно, вы могли бы разделить ваши опции на разные wp_options в базе данных, чтобы сократить некоторые изиз-за размера данных, но в любом случае вы все равно будете обращаться к базе данных при каждом запросе, что, вероятно, будет самой дорогой операцией.

В основном, если вы хотите изменить только один элемент для повышения производительностиПричины, я бы не беспокоился об этом.Wordpress делает много вещей за кулисами, которые, вероятно, сокрушат любую оптимизацию, которой вам удастся достичь.Если вы просто хотели это сделать, извините, я думаю, что это не пойдет.

...