Default values - korobochkin/wp-kit GitHub Wiki

Без WP Kit это еще одна насущная проблема WordPress. Каждый раз, когда вы запрашиваете значение вы хотите получить его. Но что если оно не было сохранено и в ответ вернется false?

// Getting not existed in DB value.
$myValue = get_option('my_awesome_option');

// And each time you need write your check.
if(!$myValue) {
  // Replace false by your default value. 
  $myValue = ...
}

Функции типа get_option() позволяют вернуть значение по умолчанию, если его нет в WordPress.

$myValue = get_option('my_awesome_option', 'Your default value');

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

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

Решения, которые используются сейчас

Сегодня у разработчиков есть два пути.

Можно оздавать все настройки заранее в базе данных во время установки плагина. Но это неудобно тем, что при добавлении новых настроек и обновлении плагина вам нужно постоянно проверять и досохранять данные. Что если в новой версии плагина вы решили добавить несколько новых Options? Прийдется написать много дополнительной логики, которая будет производить некоторые действия и сверять список существующих настроек с желаемым.

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

Решение от WP Kit

WP Kit предоставляет хорошее решение этой проблемы. Каждый раз, когда вы создаете новый объект для очередного DataComponent вы можете задать значение по умолчанию прямо внутри констурктора этого объекта.

use Korobochkin\WPKit\Options\AbstractOption;

class MyAwesomeOption extends AbstractOption {

  public function __constructor() {
    $this
      ->setName('my_awesome_option')
      ->setDefaultValue('My default value');
  }
}

Теперь каждый раз вызывая get() вы можете быть уверены что получите значение, а не false, если оно отсутствует.

$myAwesomeOption = mew MyAwesomeOption();

// This will return 'My default value'.
$myValue = $myAwesomeOption->get();
⚠️ **GitHub.com Fallback** ⚠️