Getting, saving and deleting values - korobochkin/wp-kit GitHub Wiki
Получение и сохранение данных осуществляется достаточно просто и имеет несколько преимуществ по сравнению с использованием обычных функций типа update_option()
. Эта страница научит вас производить любые операции с данными.
Самое главное, что следует запомнить, это то, что каждый объект обрабатывает три значения.
- Значение сохраненное в WordPress (или объектном кэше).
- Локальное значение (которое вы получили от пользователя но еще не сохраняли).
- Значение по умолчанию (будет использоваться, если в WordPress значения еще нет).
Ранее вам нужно было создавать три меренных — но с Data Components вы можете хранить их внутри объекта. Более подробно о каждом значении рассказано ниже.
// Traditional usage with variables
$valueFromWP = get_option('my_option');
$localValue = 'user inputted value';
$defaultValue = '123';
// Advanced usage with Data Components
$myOption = new MyOption();
$myOption->getValueFromWordPress();
$myOption->set('user inputted value');
$myOption->getDefaultValue();
Для получения данных следует использовать get()
. Этот метод всегда возвращает значение в отличие от get_option()
, get_transient()
или get_post_meta()
, которые могут возвращать false
в случае отсутствия сохраненных данных и работают по разному (get_post_meta()
может отдавать не одно значения, а сразу все).
$myOption->get();
Логика работы get()
достаточно проста и ее всегда можно посмотреть в исходном коде.
public function get() {
// If object have local value return it.
if($this->hasLocalValue())
return $this->getLocalValue();
// Get value from WP via get_option-like functions.
$raw = $this->getValueFromWordPress();
// If it exists try to transform it.
if($raw !== false) {
$transformer = $this->getDataTransformer();
if($transformer) {
return $transformer->reverseTransform($raw);
}
return $raw;
}
// Return default value
return $this->getDefaultValue();
}
Метод get()
используется в других функциях, например во время проверки данных с помощью validate()
.
Иногда может понадобится получить определнные данные не используя логику и магию get()
. Для каждого из трех значений есть свой метод.
$myOption->getLocalValue();
$myOption->getValueFromWordPress();
$myOption->getDefaultValue();
Одним из преимуществ использования WP Kit является то, что один объект имеет несколько значений и вам не нужно снова и снова создавать переменные с длинными именами. Например, при сохранении значения вы можете сохранить его локально, проверить и произвести любые другие действия и лишь потом решить сохранять его или нет.
$myOption->set('new value for option');
Метод set()
на самом деле является сокращением для setLocalValue()
и по сути лишь сохраняет ваше значение в переменную внутри объекта.
$myOption->set('new value for option');
// Get value back
$myOption->get();
Для того чтобы сохранить значение локально, но не сохранять его внутри WordPress можно использовать такой код.
$violations = $myOption
->set('new value for option')
->isValid();
if(0 !== count($violations)) {
// There are errors, now you can show them
foreach ($violations as $violation) {
echo $violation->getMessage() . '<br>';
}
} else {
// We can save value into WordPress
$myOption->flush();
}
Как вы могли заметить в примере выше для сохранения данных используется метод flush()
.
$myOption
->set('new value for option')
->flush();
Но если вы хотите сразу сохранить значение можно использовать updateValue()
.
$myOption
->updateValue('new value for option');
Данный метод может принимать дополнительные аргументы. Они отличаются в зависимости от типа объекта.
$myOption
->updateValue('new value', boolean $autoload);
$myTransient
->updateValue('new value', int $expiration);
Чтобы удалить все значения за исключением default достаточно вызвать метод delete()
. Он удалит значение из WordPress и в случае успеха удалит и локальное.
$myOption
// Удаляет значение из WordPress и локальное
->delete()
// Удаляет значение только из WordPress
->deleteFromWP()
// In case if you want reset only local value
->setLocalValue(null)
// Resetting default value
->setDefaultValue(null);