add_option

Добавляет настройку (название и значение опции) в Базу Данных. Ничего не делает, если опция уже существует.

Если данные нужно сериализовать, для хранение в БД, то они будут автоматически сериализованы перед добавлением опции. Так, в настройках можно хранить массивы.

Можно создавать опции с пустым значением и добавлять значение позже.

Хуки из функции:
added_option
add_option
add_option_(option)
default_option_(option)
Возвращает

true – если удалось добавить настройку и false – если нет.

Использование

<?php add_option( $name, $value, $deprecated, $autoload ); ?>
$name(строка) (обязательный)
Название опции, которую будем добавлять. Для названий используйте подчеркивание _ для разделения слов и не используйте буквы в ВЕРХНЕМ РЕГИСТРЕ.
По умолчанию: нет
$value(строка/массив/число/объект/логический)
Значение опции. Ограничение 232 байта.
По умолчанию: ”
$deprecated(строка)
Запрещен с версии 2.3.
По умолчанию: ”
$autoload(строка)
Автозагрузка (загрузка опции в кэш). Нужно ли загружать эту опцию функцией wp_load_alloptions() (добавляет опцию в массив опций, при генерации страницы, затем опция берется из массива). Может быть yes или no.
По умолчанию: ‘yes’

Примеры

#1 Пример добавления опции

Добавим настройку my_option со значением 255. Опция будет подгружаться автоматически со всеми остальными, т.е. будет включена автозагрузка:

<?php add_option( 'my_option', '255' ); ?>

Код из


wp-includes/option.php

WP 4.7.3

<?php
function add_option( $option, $value = '', $deprecated = '', $autoload = 'yes' ) {
	global $wpdb;

	if ( !empty( $deprecated ) )
		_deprecated_argument( __FUNCTION__, '2.3.0' );

	$option = trim($option);
	if ( empty($option) )
		return false;

	wp_protect_special_option( $option );

	if ( is_object($value) )
		$value = clone $value;

	$value = sanitize_option( $option, $value );

	// Make sure the option doesn't already exist. We can check the 'notoptions' cache before we ask for a db query
	$notoptions = wp_cache_get( 'notoptions', 'options' );
	if ( !is_array( $notoptions ) || !isset( $notoptions[$option] ) )
		/** This filter is documented in wp-includes/option.php */
		if ( apply_filters( 'default_option_' . $option, false, $option, false ) !== get_option( $option ) )
			return false;

	$serialized_value = maybe_serialize( $value );
	$autoload = ( 'no' === $autoload || false === $autoload ) ? 'no' : 'yes';

	/**
	 * Fires before an option is added.
	 *
	 * @since 2.9.0
	 *
	 * @param string $option Name of the option to add.
	 * @param mixed  $value  Value of the option.
	 */
	do_action( 'add_option', $option, $value );

	$result = $wpdb->query( $wpdb->prepare( "INSERT INTO `$wpdb->options` (`option_name`, `option_value`, `autoload`) VALUES (%s, %s, %s) ON DUPLICATE KEY UPDATE `option_name` = VALUES(`option_name`), `option_value` = VALUES(`option_value`), `autoload` = VALUES(`autoload`)", $option, $serialized_value, $autoload ) );
	if ( ! $result )
		return false;

	if ( ! wp_installing() ) {
		if ( 'yes' == $autoload ) {
			$alloptions = wp_load_alloptions();
			$alloptions[ $option ] = $serialized_value;
			wp_cache_set( 'alloptions', $alloptions, 'options' );
		} else {
			wp_cache_set( $option, $serialized_value, 'options' );
		}
	}

	// This option exists now
	$notoptions = wp_cache_get( 'notoptions', 'options' ); // yes, again... we need it to be fresh
	if ( is_array( $notoptions ) && isset( $notoptions[$option] ) ) {
		unset( $notoptions[$option] );
		wp_cache_set( 'notoptions', $notoptions, 'options' );
	}

	/**
	 * Fires after a specific option has been added.
	 *
	 * The dynamic portion of the hook name, `$option`, refers to the option name.
	 *
	 * @since 2.5.0 As "add_option_{$name}"
	 * @since 3.0.0
	 *
	 * @param string $option Name of the option to add.
	 * @param mixed  $value  Value of the option.
	 */
	do_action( "add_option_{$option}", $option, $value );

	/**
	 * Fires after an option has been added.
	 *
	 * @since 2.9.0
	 *
	 * @param string $option Name of the added option.
	 * @param mixed  $value  Value of the option.
	 */
	do_action( 'added_option', $option, $value );
	return true;
}

Комментарии:


Оставить комментарий

Your email address will not be published. Required fields are marked *