get_option()WP 1.5.0

Получает значение указанной настройки (опции).

Функция кэширует данные и при повторных вызовах данные будут браться из кэша а не из БД.

Если опция хранится как сериализованная строка, то она при получении автоматически будет раскодирована.

Любые скалярные значения (true, 0, null) будут возвращены в виде строк.

Возвращаемое значение можно отфильтровать через хук option_(option).

Используйте get_site_option(), чтобы получить опцию сети (в мультисайте), а не текущего сайта (блога).

1 раз — 0.0025661 сек (очень медленно) | 50000 раз — 0.20 сек (очень быстро) | PHP 7.4.33, WP 6.4.1

Возвращает

Разное.

  • строка/массив — значение опции.
  • false — когда указанной опции не существует или не удалось получить её значение.
  • Любой тип — когда опции нет и указано значение по умолчанию (во втором параметре), то вренется указанное дефолтное значение.
  • Любой тип — когда на фильтре pre_option_(option), default_option_(option) или option_(option) висит коллбэк.

Тип возвращаемого значения может отличаться:

  • Сложные типы (массивы, объекты) сериализуются и возвращаются как есть.
  • Простые значения (true, 0, null) чаще всего возвращаются как строки.

Исключения:

  • Если задан $default_value, он вернётся. Если нет — false.
  • Фильтры pre_option_*, default_option_*, option_* могут изменить результат.
  • Сразу после add_option() возвращается оригинальный тип, а не строка.

Например:

add_option( 'opt', 'val' );  // Сохранено
get_option( 'opt' );         // Получено

/*
Сохранено → Получено:

false  → ""  (string)
true   → "1" (string)
0      → "0" (string)
1      → "1" (string)
null   → ""  (string)
[ false, 'str', null ] → [ false, 'str', null ] (тот же массив)
*/

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

get_option( $option, $default_value );
$option(строка) (обязательный)

Название опции, значение которой нужно получить. Некоторые из доступных опций:

  • admin_email - E-mail администратора блога.
  • blogname - название блога. Устанавливается в настройках.
  • blogdescription - описание блога. Устанавливается в настройках.
  • blog_charset - Кодировка блога. Устанавливается в настройках.
  • date_format - формат даты. Устанавливается в настройках.
  • default_category - категория постов по умолчанию. Устанавливается в настройках.
  • home - Адрес домашней страницы блога. Устанавливается в основных настройках.
  • siteurl - Адрес WordPress. Устанавливается в основных настройках.

    Заметка: siteurl отличается от get_bloginfo('siteurl') (который возвращает url домашней страницы блога). И не отличается от get_bloginfo('wpurl').

  • template - название текущей темы.
  • start_of_week - день с которого начинается неделя. Устанавливается в основных настройках.
  • upload_path - каталог загрузки по умолчанию. Устанавливается в настройках.
  • posts_per_page - максимальное число постов на странице. Устанавливается в настройках чтения.
  • posts_per_rss - максимальное число постов выводимых в фид. Устанавливается в настройках чтения.

Полный список опций смотрите здесь.

$default_value(строка/число/логический)
Значение по умолчанию, которое нужно вернуть, если опции в БД не существует.
По умолчанию: false

Примеры

1

#1 Выведем кодировку блога:

<p>Текущая кодировка: <?php echo get_option('blog_charset'); ?> </p>
0

#2 Выведем название блога в теге H1:

<h1><?php echo get_option('blogname'); ?></h1>

OR short variant:

<h1><?= get_option('blogname'); ?></h1>
0

#3 Получим email администратора сайта в переменную $admin_email:

$admin_email = get_option('admin_email');

Заметки

  • Global. wpdb. $wpdb WordPress database abstraction object.

Список изменений

С версии 1.5.0 Введена.

Код get_option() WP 6.9.1

function get_option( $option, $default_value = false ) {
	global $wpdb;

	if ( is_scalar( $option ) ) {
		$option = trim( $option );
	}

	if ( empty( $option ) ) {
		return false;
	}

	/*
	 * Until a proper _deprecated_option() function can be introduced,
	 * redirect requests to deprecated keys to the new, correct ones.
	 */
	$deprecated_keys = array(
		'blacklist_keys'    => 'disallowed_keys',
		'comment_whitelist' => 'comment_previously_approved',
	);

	if ( isset( $deprecated_keys[ $option ] ) && ! wp_installing() ) {
		_deprecated_argument(
			__FUNCTION__,
			'5.5.0',
			sprintf(
				/* translators: 1: Deprecated option key, 2: New option key. */
				__( 'The "%1$s" option key has been renamed to "%2$s".' ),
				$option,
				$deprecated_keys[ $option ]
			)
		);
		return get_option( $deprecated_keys[ $option ], $default_value );
	}

	/**
	 * Filters the value of an existing option before it is retrieved.
	 *
	 * The dynamic portion of the hook name, `$option`, refers to the option name.
	 *
	 * Returning a value other than false from the filter will short-circuit retrieval
	 * and return that value instead.
	 *
	 * @since 1.5.0
	 * @since 4.4.0 The `$option` parameter was added.
	 * @since 4.9.0 The `$default_value` parameter was added.
	 *
	 * @param mixed  $pre_option    The value to return instead of the option value. This differs from
	 *                              `$default_value`, which is used as the fallback value in the event
	 *                              the option doesn't exist elsewhere in get_option().
	 *                              Default false (to skip past the short-circuit).
	 * @param string $option        Option name.
	 * @param mixed  $default_value The fallback value to return if the option does not exist.
	 *                              Default false.
	 */
	$pre = apply_filters( "pre_option_{$option}", false, $option, $default_value );

	/**
	 * Filters the value of any existing option before it is retrieved.
	 *
	 * Returning a value other than false from the filter will short-circuit retrieval
	 * and return that value instead.
	 *
	 * @since 6.1.0
	 *
	 * @param mixed  $pre_option    The value to return instead of the option value. This differs from
	 *                              `$default_value`, which is used as the fallback value in the event
	 *                              the option doesn't exist elsewhere in get_option().
	 *                              Default false (to skip past the short-circuit).
	 * @param string $option        Name of the option.
	 * @param mixed  $default_value The fallback value to return if the option does not exist.
	 *                              Default false.
	 */
	$pre = apply_filters( 'pre_option', $pre, $option, $default_value );

	if ( false !== $pre ) {
		return $pre;
	}

	if ( defined( 'WP_SETUP_CONFIG' ) ) {
		return false;
	}

	// Distinguish between `false` as a default, and not passing one.
	$passed_default = func_num_args() > 1;

	if ( ! wp_installing() ) {
		$alloptions = wp_load_alloptions();
		/*
		 * When getting an option value, we check in the following order for performance:
		 *
		 * 1. Check the 'alloptions' cache first to prioritize existing loaded options.
		 * 2. Check the 'notoptions' cache before a cache lookup or DB hit.
		 * 3. Check the 'options' cache prior to a DB hit.
		 * 4. Check the DB for the option and cache it in either the 'options' or 'notoptions' cache.
		 */
		if ( isset( $alloptions[ $option ] ) ) {
			$value = $alloptions[ $option ];
		} else {
			// Check for non-existent options first to avoid unnecessary object cache lookups and DB hits.
			$notoptions = wp_cache_get( 'notoptions', 'options' );

			if ( ! is_array( $notoptions ) ) {
				$notoptions = array();
				wp_cache_set( 'notoptions', $notoptions, 'options' );
			}

			if ( isset( $notoptions[ $option ] ) ) {
				/**
				 * Filters the default value for an option.
				 *
				 * The dynamic portion of the hook name, `$option`, refers to the option name.
				 *
				 * @since 3.4.0
				 * @since 4.4.0 The `$option` parameter was added.
				 * @since 4.7.0 The `$passed_default` parameter was added to distinguish between a `false` value and the default parameter value.
				 *
				 * @param mixed  $default_value  The default value to return if the option does not exist
				 *                               in the database.
				 * @param string $option         Option name.
				 * @param bool   $passed_default Was `get_option()` passed a default value?
				 */
				return apply_filters( "default_option_{$option}", $default_value, $option, $passed_default );
			}

			$value = wp_cache_get( $option, 'options' );

			if ( false === $value ) {

				$row = $wpdb->get_row( $wpdb->prepare( "SELECT option_value FROM $wpdb->options WHERE option_name = %s LIMIT 1", $option ) );

				// Has to be get_row() instead of get_var() because of funkiness with 0, false, null values.
				if ( is_object( $row ) ) {
					$value = $row->option_value;
					wp_cache_add( $option, $value, 'options' );
				} else { // Option does not exist, so we must cache its non-existence.
					$notoptions[ $option ] = true;
					wp_cache_set( 'notoptions', $notoptions, 'options' );

					/** This filter is documented in wp-includes/option.php */
					return apply_filters( "default_option_{$option}", $default_value, $option, $passed_default );
				}
			}
		}
	} else {
		$suppress = $wpdb->suppress_errors();
		$row      = $wpdb->get_row( $wpdb->prepare( "SELECT option_value FROM $wpdb->options WHERE option_name = %s LIMIT 1", $option ) );
		$wpdb->suppress_errors( $suppress );

		if ( is_object( $row ) ) {
			$value = $row->option_value;
		} else {
			/** This filter is documented in wp-includes/option.php */
			return apply_filters( "default_option_{$option}", $default_value, $option, $passed_default );
		}
	}

	// If home is not set, use siteurl.
	if ( 'home' === $option && '' === $value ) {
		return get_option( 'siteurl' );
	}

	if ( in_array( $option, array( 'siteurl', 'home', 'category_base', 'tag_base' ), true ) ) {
		$value = untrailingslashit( $value );
	}

	/**
	 * Filters the value of an existing option.
	 *
	 * The dynamic portion of the hook name, `$option`, refers to the option name.
	 *
	 * @since 1.5.0 As 'option_' . $setting
	 * @since 3.0.0
	 * @since 4.4.0 The `$option` parameter was added.
	 *
	 * @param mixed  $value  Value of the option. If stored serialized, it will be
	 *                       unserialized prior to being returned.
	 * @param string $option Option name.
	 */
	return apply_filters( "option_{$option}", maybe_unserialize( $value ), $option );
}
10 комментариев