Getting, saving and deleting values - korobochkin/wp-kit GitHub Wiki

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

Три значения, а не одно

Самое главное, что следует запомнить, это то, что каждый объект обрабатывает три значения.

  1. Значение сохраненное в WordPress (или объектном кэше).
  2. Локальное значение (которое вы получили от пользователя но еще не сохраняли).
  3. Значение по умолчанию (будет использоваться, если в 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);
⚠️ **GitHub.com Fallback** ⚠️