WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru

get_option() WP 1.5.0

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

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

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

Любые скалярные значения будут возвращены в виде строк.

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

✈ 1 раз = 0.001619с = очень медленно | 50000 раз = 1.89с = быстро | PHP 7.0.32, WP 5.1.1
Возвращает

Разное/false. Значение опции или false, если указанной опции не существует или не удалось получить её значение.

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

get_option( $option, $default );
$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(строка/число/логический)
Значение по умолчанию, которое нужно вернуть, если опции в БД не существует.
По умолчанию: false

Примеры

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

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

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

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

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

$admin_email = get_option('admin_email');

Заметки

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

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

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

Код get option: wp-includes/option.php WP 5.2.4

<?php
function get_option( $option, $default = false ) {
	global $wpdb;

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

	/**
	 * Filters the value of an existing option before it is retrieved.
	 *
	 * The dynamic portion of the hook name, `$option`, refers to the option name.
	 *
	 * Passing a truthy value to the filter will short-circuit retrieving
	 * the option value, returning the passed value instead.
	 *
	 * @since 1.5.0
	 * @since 4.4.0 The `$option` parameter was added.
	 * @since 4.9.0 The `$default` parameter was added.
	 *
	 * @param bool|mixed $pre_option The value to return instead of the option value. This differs from
	 *                               `$default`, 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    The fallback value to return if the option does not exist.
	 *                               Default is false.
	 */
	$pre = apply_filters( "pre_option_{$option}", false, $option, $default );

	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() ) {
		// prevent non-existent options from triggering multiple queries
		$notoptions = wp_cache_get( '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 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, $option, $passed_default );
		}

		$alloptions = wp_load_alloptions();

		if ( isset( $alloptions[ $option ] ) ) {
			$value = $alloptions[ $option ];
		} else {
			$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
					if ( ! is_array( $notoptions ) ) {
						$notoptions = array();
					}
					$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, $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, $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' ) ) ) {
		$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 );
}

Cвязанные функции

Из метки: API опций (параметров)

Еще из раздела: Опции сайта (настройки)

10 комментов
  • art

    мультисайт wordpress

    Подскажи пожалуйста, какая функция выводит наименование сайта/подсайта – те сам суффикс (site1) Например, есть multisite.ru/site1 Нужно вытянуть site1

    В результате я хотел использовать данную функцию в header.php – где для каждого подсайта (site1) в шапке выгружалась картинка (site1.jpg) из папки upload – те картинка с аналогичным названием подсайта

    вывод картики думаю как то так: src="/wp-content/upload/.jpg"

    Ответить8.3 лет назад #
    • Kama7629

      Можно регуляркой:

      $url = 'multisite.ru/asd/site1';
      $site = preg_replace('@.*/(.*?)@', '\1', $url);
      echo $site; // выведет site1
      Ответить8.3 лет назад #
      • art

        Kama - спасибо огромное!!

        <?php
        $url = get_option('home');  
        $site = preg_replace('@.*/(.*?)@', '\1', $url);  
        echo $site;
        ?>
        Ответить8.3 лет назад #
  • @ Николай

    А если в option массив?
    $data = array(1,2,3,4);
    В этом случае $opt = get_option('data'); в $opt что получим?

    Ответить7.3 лет назад #
    • Kama7629

      get_option автоматически сериализует массивы. Т.е. в $opt получим массив:

      $data = array(1,2,3,4);
      
      add_option('tmpppp', $data );
      
      $r = get_option( 'tmpppp' );
      
      var_dump( $r );
      
      /*
      array(4) {
        [0]=>
        int(1)
        [1]=>
        int(2)
        [2]=>
        int(3)
        [3]=>
        int(4)
      }
      */
      1
      Ответить7.3 лет назад #
  • Александр

    Привет, Тимур!
    Столкнулся с проблемой вывода массива опции темы. Переносил сайт на другой хостинг, все хорошо, кроме опций темы - они стали по-умолчанию. Вручную вставляю в phpMyAdmin значение строки, отвечающей за опции темы, но после просмотра страницы сайта - значение в бд опять становится по-умолчанию. Полазил по функциям, нашел где вызывается вставка и обновление (insert, update). После $options = get_option('название темы') вывел значение option - там уже опции по-умолчанию. Но ведь get_option берет значение из БД. Тогда почему так. Или берется не из БД, а из кэша?
    Если поможете - буду очень рад! Заранее спасибо.

    Ответить5.2 лет назад #
    • Александр

      Все, понял в чем была проблема - когда менял старое название сайта на новое, не изменял значение s сериализованной строки. Поэтому и ставились настройки шаблона по-умолчанию.

      Ответить5.2 лет назад #
    • Kama7629

      Изначально берется из БД, один раз, затем берется из кэша буфера. Если есть кэширующий плагин, то берется из кэша, кэш может храниться в файлах, но это все временно. Обнулите кэши кэширующих плагинов. Руками в БД лазить не рекомендую. Меняйте тему в админке.

      Ответить5.2 лет назад #
  • Максим

    Здравствуйте.

    Подскажите, пожалуйста, можно ли убрать из кода?

    Вы вошли, как <a href="<?php echo get_option('siteurl'); ?>/wp-admin/profile.php"><?php echo $user_identity; ?></a>` запрос `<?php echo get_option('siteurl'); ?>

    И с ним, и без него переход осуществляется по нужному адресу, а если убрать этот запрос, по логике снизится кол-во обращений к БД... Но не до конца представляю, на что подобное действие может повлиять.

    Ответить3.1 года назад #
    • @ stepan1188 www.weblancer.net/users/stepanko/?affili...

      "запрос `" - запрос нагрузку на БД не делает.
      При таком вызове он берет данные из кеша, потому что некоторые данные из таблицы wp_options при первом обращение кешируются. И последующие вызовы уже идут к кешу, а не к БД.

      2
      Ответить3.1 года назад #
Здравствуйте, !     Войти . Зарегистрироваться