get_network_option

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

Если вызывать эту функцию не 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. Именно отсюда и получают данные функции network_option и site_option. get_network_option() это фундаментальная функций, ей можно указать ID сети (главного сайта) для которой мы хотим получить опции, а get_site_option() – это обертка и в ней мы не может указать ID сети – там ID всегда смотрит на текущую сеть. Вообще, в мультисайт сборке, как правило используется всего один основной сайт (сеть), а значит опции get_network_option() равна get_site_option().

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

Хуки из функции:
default_site_option_(option)
pre_site_option_(option)
site_option_(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

Код из


wp-includes/option.php

WP 4.7.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 );
}

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


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

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