WordPress как на ладони
wordpress jino

get_network_option() WP 4.4.0

Получает значение указанной опции сети (основного сайта в сети мультисайт).

Если вызывать эту функцию не в MU сборке то управление передается get_option().

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

При установке Multisite структура опций сайтов расширяется, но не сильно.

В WordPress есть четыре похожие функции:

  1. get_network_option()
  2. get_site_option()
  3. get_blog_option()
  4. get_option()

Эти функции можно собрать в группы:

get_network_option() равно get_site_option()
get_blog_option() равно get_option()

«Сайты» в MU

Это основные сайты (которые по совместительству тоже блоги). Обычно такой основной сайт всего одни. У него есть все те же данные что и у любого блога (своя таблица wp_options). Однако у него также есть свои опции, которые находятся в таблице wp_sitemeta. Именно из wp_sitemeta получают данные функции *_network_option() и *_site_option().

get_network_option() - это фундаментальная функция, ей можно указать ID сети (главного сайта) для которой мы хотим получить опции, а get_site_option() - это её обертка и в ней мы не может указать ID сети - там всегда используется текущая сеть.

Повторюсь, в мультисайт сборке, как правило используется всего один основной сайт (сеть), это значит что в 99% случаев опция get_network_option() равна get_site_option().

«Блоги» в MU

Это сайты, которые находятся под управлением основного сайта (сети). У каждого из таких блогов есть отдельная таблица *_options. get_blog_option() получает данные из этой таблицы. По сути это обертка для функции get_option(), только получает она опции указанного блога, а не текущего.

Хуки из функции:
Возвращает

Разное. Значение опции, если его удалось получить. Если указанной опции нет, то вернет false или указанное в 3-м параметре дефолтное значение.

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

get_network_option( $network_id, $option, $default );
$network_id(число) (обязательный)
ID сети (основного сайта, блога). Можно указать null, тогда будет использоваться ID текущей сети.
$option(строка) (обязательный)
Название опции, которую нужно получить. Ожидает «грязную» для SQL запроса строку.
$default(смешанный)
Значение, которое нужно вернуть, если опции не существует.
По умолчанию: false

Примеры

#1 Получим email администратора сети сайтов

$admin_email = get_network_option( null, 'admin_email' );

Эту строку можно заменить на:

$admin_email = get_site_option( 'admin_email' );

Список некоторых опций сайта сети:

Название опции Значение
site_name Мультисайт
admin_email foo@bk.ru
admin_user_id 1
registration user
upload_filetypes jpg jpeg png gif mov avi mpg 3gp 3g2 midi mid pdf doc ppt odt pptx docx pps ppsx xls xlsx key mp3 ogg wma m4a wav mp4 m4v webm ogv wmv flv
blog_upload_space 100
fileupload_maxk 1500
site_admins a:1:{i:0;s:4:"nick";}
allowedthemes a:1:{s:19:"twentysixteen-child";b:1;}
wpmu_upgrade_site 37965
welcome_email Привет, USERNAME! Ваш новый сайт в сети «SITE_NAME» успешно создан по адресу: ....
first_post Добро пожаловать на сайт %s. Это ваша первая запись. Отредактируйте или удалите её, затем пишите!
siteurl http://multisite.ru/wp/
add_new_users 1
upload_space_check_disabled 1
subdomain_install 1
global_terms_enabled 0
ms_files_rewriting 0
initial_db_version 36686
active_sitewide_plugins a:1:{s:33:"user-switching/user-switching.php";i:1473022930;}
WPLANG ru_RU
user_count 4
blog_count 3
can_compress_scripts 1
recently_activated a:1:{s:28:"democracy-poll/democracy.php";i:1473020642;}
registrationnotification yes
welcome_user_email Привет, USERNAME! Ваша учётная запись настроена. ....
menu_items a:0:{}
first_page ''
first_comment ''
first_comment_url ''
first_comment_author ''
limited_email_domains ''
banned_email_domains ''
first_comment_email ''

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

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

	if ( $network_id && ! is_numeric( $network_id ) ) {
		return false;
	}

	$network_id = (int) $network_id;

	// Fallback to the current network if a network ID is not specified.
	if ( ! $network_id ) {
		$network_id = get_current_network_id();
	}

	/**
	 * Filters an existing network 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 effectively short-circuit retrieval,
	 * returning the passed value instead.
	 *
	 * @since 2.9.0 As 'pre_site_option_' . $key
	 * @since 3.0.0
	 * @since 4.4.0 The `$option` parameter was added.
	 * @since 4.7.0 The `$network_id` parameter was added.
	 *
	 * @param mixed  $pre_option The default value to return if the option does not exist.
	 * @param string $option     Option name.
	 * @param int    $network_id ID of the network.
	 */
	$pre = apply_filters( "pre_site_option_{$option}", false, $option, $network_id );

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

	// prevent non-existent options from triggering multiple queries
	$notoptions_key = "$network_id:notoptions";
	$notoptions = wp_cache_get( $notoptions_key, 'site-options' );

	if ( isset( $notoptions[ $option ] ) ) {

		/**
		 * Filters a specific default network 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 `$network_id` parameter was added.
		 *
		 * @param mixed  $default    The value to return if the site option does not exist
		 *                           in the database.
		 * @param string $option     Option name.
		 * @param int    $network_id ID of the network.
		 */
		return apply_filters( "default_site_option_{$option}", $default, $option, $network_id );
	}

	if ( ! is_multisite() ) {
		/** This filter is documented in wp-includes/option.php */
		$default = apply_filters( 'default_site_option_' . $option, $default, $option, $network_id );
		$value = get_option( $option, $default );
	} else {
		$cache_key = "$network_id:$option";
		$value = wp_cache_get( $cache_key, 'site-options' );

		if ( ! isset( $value ) || false === $value ) {
			$row = $wpdb->get_row( $wpdb->prepare( "SELECT meta_value FROM $wpdb->sitemeta WHERE meta_key = %s AND site_id = %d", $option, $network_id ) );

			// Has to be get_row instead of get_var because of funkiness with 0, false, null values
			if ( is_object( $row ) ) {
				$value = $row->meta_value;
				$value = maybe_unserialize( $value );
				wp_cache_set( $cache_key, $value, 'site-options' );
			} else {
				if ( ! is_array( $notoptions ) ) {
					$notoptions = array();
				}
				$notoptions[ $option ] = true;
				wp_cache_set( $notoptions_key, $notoptions, 'site-options' );

				/** This filter is documented in wp-includes/option.php */
				$value = apply_filters( 'default_site_option_' . $option, $default, $option, $network_id );
			}
		}
	}

	/**
	 * Filters the value of an existing network option.
	 *
	 * The dynamic portion of the hook name, `$option`, refers to the option name.
	 *
	 * @since 2.9.0 As 'site_option_' . $key
	 * @since 3.0.0
	 * @since 4.4.0 The `$option` parameter was added.
	 * @since 4.7.0 The `$network_id` parameter was added.
	 *
	 * @param mixed  $value      Value of network option.
	 * @param string $option     Option name.
	 * @param int    $network_id ID of the network.
	 */
	return apply_filters( "site_option_{$option}", $value, $option, $network_id );
}

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

Из раздела: Мультисайт

get_network_option Комментариев нет

Здравствуйте, !

Ваш комментарий