Current Path : /storage/v11800/affypharma/public_html/wp-includes/

Linux v11800 5.3.0-1023-aws #25~18.04.1-Ubuntu SMP Fri Jun 5 15:19:18 UTC 2020 aarch64

Upload File :
Current File : /storage/v11800/affypharma/public_html/wp-includes/ms-blogs.php
<?php

/**
 * Site/blog functions that work with the blogs table and related data.
 *
 * @package WordPress
 * @subpackage Multisite
 * @since MU (3.0.0)
 */

require_once ABSPATH . WPINC . '/ms-site.php';
require_once ABSPATH . WPINC . '/ms-network.php';

/**
 * Updates the last_updated field for the current site.
 *
 * @since MU (3.0.0)
 */
function wpmu_update_blogs_date() {
	$site_id = get_current_blog_id();

	update_blog_details( $site_id, array( 'last_updated' => current_time( 'mysql', true ) ) );
	/**
	 * Fires after the blog details are updated.
	 *
	 * @since MU (3.0.0)
	 *
	 * @param int $blog_id Site ID.
	 */
	do_action( 'wpmu_blog_updated', $site_id );
}

/**
 * Gets a full site URL, given a site ID.
 *
 * @since MU (3.0.0)
 *
 * @param int $blog_id Site ID.
 * @return string Full site URL if found. Empty string if not.
 */
function get_blogaddress_by_id( $blog_id ) {
	$bloginfo = get_site( (int) $blog_id );

	if ( empty( $bloginfo ) ) {
		return '';
	}

	$scheme = parse_url( $bloginfo->home, PHP_URL_SCHEME );
	$scheme = empty( $scheme ) ? 'http' : $scheme;

	return esc_url( $scheme . '://' . $bloginfo->domain . $bloginfo->path );
}

/**
 * Gets a full site URL, given a site name.
 *
 * @since MU (3.0.0)
 *
 * @param string $blogname Name of the subdomain or directory.
 * @return string
 */
function get_blogaddress_by_name( $blogname ) {
	if ( is_subdomain_install() ) {
		if ( 'main' === $blogname ) {
			$blogname = 'www';
		}
		$url = rtrim( network_home_url(), '/' );
		if ( ! empty( $blogname ) ) {
			$url = preg_replace( '|^([^\.]+://)|', '${1}' . $blogname . '.', $url );
		}
	} else {
		$url = network_home_url( $blogname );
	}
	return esc_url( $url . '/' );
}

/**
 * Retrieves a site's ID given its (subdomain or directory) slug.
 *
 * @since MU (3.0.0)
 * @since 4.7.0 Converted to use `get_sites()`.
 *
 * @param string $slug A site's slug.
 * @return int|null The site ID, or null if no site is found for the given slug.
 */
function get_id_from_blogname( $slug ) {
	$current_network = get_network();
	$slug            = trim( $slug, '/' );

	if ( is_subdomain_install() ) {
		$domain = $slug . '.' . preg_replace( '|^www\.|', '', $current_network->domain );
		$path   = $current_network->path;
	} else {
		$domain = $current_network->domain;
		$path   = $current_network->path . $slug . '/';
	}

	$site_ids = get_sites(
		array(
			'number'                 => 1,
			'fields'                 => 'ids',
			'domain'                 => $domain,
			'path'                   => $path,
			'update_site_meta_cache' => false,
		)
	);

	if ( empty( $site_ids ) ) {
		return null;
	}

	return array_shift( $site_ids );
}

/**
 * Retrieves the details for a blog from the blogs table and blog options.
 *
 * @since MU (3.0.0)
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param int|string|array $fields  Optional. A blog ID, a blog slug, or an array of fields to query against.
 *                                  Defaults to the current blog ID.
 * @param bool             $get_all Whether to retrieve all details or only the details in the blogs table.
 *                                  Default is true.
 * @return WP_Site|false Blog details on success. False on failure.
 */
function get_blog_details( $fields = null, $get_all = true ) {
	global $wpdb;

	if ( is_array( $fields ) ) {
		if ( isset( $fields['blog_id'] ) ) {
			$blog_id = $fields['blog_id'];
		} elseif ( isset( $fields['domain'] ) && isset( $fields['path'] ) ) {
			$key  = md5( $fields['domain'] . $fields['path'] );
			$blog = wp_cache_get( $key, 'blog-lookup' );
			if ( false !== $blog ) {
				return $blog;
			}
			if ( str_starts_with( $fields['domain'], 'www.' ) ) {
				$nowww = substr( $fields['domain'], 4 );
				$blog  = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->blogs WHERE domain IN (%s,%s) AND path = %s ORDER BY CHAR_LENGTH(domain) DESC", $nowww, $fields['domain'], $fields['path'] ) );
			} else {
				$blog = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->blogs WHERE domain = %s AND path = %s", $fields['domain'], $fields['path'] ) );
			}
			if ( $blog ) {
				wp_cache_set( $blog->blog_id . 'short', $blog, 'blog-details' );
				$blog_id = $blog->blog_id;
			} else {
				return false;
			}
		} elseif ( isset( $fields['domain'] ) && is_subdomain_install() ) {
			$key  = md5( $fields['domain'] );
			$blog = wp_cache_get( $key, 'blog-lookup' );
			if ( false !== $blog ) {
				return $blog;
			}
			if ( str_starts_with( $fields['domain'], 'www.' ) ) {
				$nowww = substr( $fields['domain'], 4 );
				$blog  = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->blogs WHERE domain IN (%s,%s) ORDER BY CHAR_LENGTH(domain) DESC", $nowww, $fields['domain'] ) );
			} else {
				$blog = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM $wpdb->blogs WHERE domain = %s", $fields['domain'] ) );
			}
			if ( $blog ) {
				wp_cache_set( $blog->blog_id . 'short', $blog, 'blog-details' );
				$blog_id = $blog->blog_id;
			} else {
				return false;
			}
		} else {
			return false;
		}
	} else {
		if ( ! $fields ) {
			$blog_id = get_current_blog_id();
		} elseif ( ! is_numeric( $fields ) ) {
			$blog_id = get_id_from_blogname( $fields );
		} else {
			$blog_id = $fields;
		}
	}

	$blog_id = (int) $blog_id;

	$all     = $get_all ? '' : 'short';
	$details = wp_cache_get( $blog_id . $all, 'blog-details' );

	if ( $details ) {
		if ( ! is_object( $details ) ) {
			if ( -1 == $details ) {
				return false;
			} else {
				// Clear old pre-serialized objects. Cache clients do better with that.
				wp_cache_delete( $blog_id . $all, 'blog-details' );
				unset( $details );
			}
		} else {
			return $details;
		}
	}

	// Try the other cache.
	if ( $get_all ) {
		$details = wp_cache_get( $blog_id . 'short', 'blog-details' );
	} else {
		$details = wp_cache_get( $blog_id, 'blog-details' );
		// If short was requested and full cache is set, we can return.
		if ( $details ) {
			if ( ! is_object( $details ) ) {
				if ( -1 == $details ) {
					return false;
				} else {
					// Clear old pre-serialized objects. Cache clients do better with that.
					wp_cache_delete( $blog_id, 'blog-details' );
					unset( $details );
				}
			} else {
				return $details;
			}
		}
	}

	if ( empty( $details ) ) {
		$details = WP_Site::get_instance( $blog_id );
		if ( ! $details ) {
			// Set the full cache.
			wp_cache_set( $blog_id, -1, 'blog-details' );
			return false;
		}
	}

	if ( ! $details instanceof WP_Site ) {
		$details = new WP_Site( $details );
	}

	if ( ! $get_all ) {
		wp_cache_set( $blog_id . $all, $details, 'blog-details' );
		return $details;
	}

	$switched_blog = false;

	if ( get_current_blog_id() !== $blog_id ) {
		switch_to_blog( $blog_id );
		$switched_blog = true;
	}

	$details->blogname   = get_option( 'blogname' );
	$details->siteurl    = get_option( 'siteurl' );
	$details->post_count = get_option( 'post_count' );
	$details->home       = get_option( 'home' );

	if ( $switched_blog ) {
		restore_current_blog();
	}

	/**
	 * Filters a blog's details.
	 *
	 * @since MU (3.0.0)
	 * @deprecated 4.7.0 Use {@see 'site_details'} instead.
	 *
	 * @param WP_Site $details The blog details.
	 */
	$details = apply_filters_deprecated( 'blog_details', array( $details ), '4.7.0', 'site_details' );

	wp_cache_set( $blog_id . $all, $details, 'blog-details' );

	$key = md5( $details->domain . $details->path );
	wp_cache_set( $key, $details, 'blog-lookup' );

	return $details;
}

/**
 * Clears the blog details cache.
 *
 * @since MU (3.0.0)
 *
 * @param int $blog_id Optional. Blog ID. Defaults to current blog.
 */
function refresh_blog_details( $blog_id = 0 ) {
	$blog_id = (int) $blog_id;
	if ( ! $blog_id ) {
		$blog_id = get_current_blog_id();
	}

	clean_blog_cache( $blog_id );
}

/**
 * Updates the details for a blog and the blogs table for a given blog ID.
 *
 * @since MU (3.0.0)
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param int   $blog_id Blog ID.
 * @param array $details Array of details keyed by blogs table field names.
 * @return bool True if update succeeds, false otherwise.
 */
function update_blog_details( $blog_id, $details = array() ) {
	global $wpdb;

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

	if ( is_object( $details ) ) {
		$details = get_object_vars( $details );
	}

	$site = wp_update_site( $blog_id, $details );

	if ( is_wp_error( $site ) ) {
		return false;
	}

	return true;
}

/**
 * Cleans the site details cache for a site.
 *
 * @since 4.7.4
 *
 * @param int $site_id Optional. Site ID. Default is the current site ID.
 */
function clean_site_details_cache( $site_id = 0 ) {
	$site_id = (int) $site_id;
	if ( ! $site_id ) {
		$site_id = get_current_blog_id();
	}

	wp_cache_delete( $site_id, 'site-details' );
	wp_cache_delete( $site_id, 'blog-details' );
}

/**
 * Retrieves option value for a given blog id based on name of option.
 *
 * If the option does not exist or does not have a value, then the return value
 * will be false. This is useful to check whether you need to install an option
 * and is commonly used during installation of plugin options and to test
 * whether upgrading is required.
 *
 * If the option was serialized then it will be unserialized when it is returned.
 *
 * @since MU (3.0.0)
 *
 * @param int    $id            A blog ID. Can be null to refer to the current blog.
 * @param string $option        Name of option to retrieve. Expected to not be SQL-escaped.
 * @param mixed  $default_value Optional. Default value to return if the option does not exist.
 * @return mixed Value set for the option.
 */
function get_blog_option( $id, $option, $default_value = false ) {
	$id = (int) $id;

	if ( empty( $id ) ) {
		$id = get_current_blog_id();
	}

	if ( get_current_blog_id() == $id ) {
		return get_option( $option, $default_value );
	}

	switch_to_blog( $id );
	$value = get_option( $option, $default_value );
	restore_current_blog();

	/**
	 * Filters a blog option value.
	 *
	 * The dynamic portion of the hook name, `$option`, refers to the blog option name.
	 *
	 * @since 3.5.0
	 *
	 * @param string  $value The option value.
	 * @param int     $id    Blog ID.
	 */
	return apply_filters( "blog_option_{$option}", $value, $id );
}

/**
 * Adds a new option for a given blog ID.
 *
 * You do not need to serialize values. If the value needs to be serialized, then
 * it will be serialized before it is inserted into the database. Remember,
 * resources can not be serialized or added as an option.
 *
 * You can create options without values and then update the values later.
 * Existing options will not be updated and checks are performed to ensure that you
 * aren't adding a protected WordPress option. Care should be taken to not name
 * options the same as the ones which are protected.
 *
 * @since MU (3.0.0)
 *
 * @param int    $id     A blog ID. Can be null to refer to the current blog.
 * @param string $option Name of option to add. Expected to not be SQL-escaped.
 * @param mixed  $value  Option value, can be anything. Expected to not be SQL-escaped.
 * @return bool True if the option was added, false otherwise.
 */
function add_blog_option( $id, $option, $value ) {
	$id = (int) $id;

	if ( empty( $id ) ) {
		$id = get_current_blog_id();
	}

	if ( get_current_blog_id() == $id ) {
		return add_option( $option, $value );
	}

	switch_to_blog( $id );
	$return = add_option( $option, $value );
	restore_current_blog();

	return $return;
}

/**
 * Removes an option by name for a given blog ID. Prevents removal of protected WordPress options.
 *
 * @since MU (3.0.0)
 *
 * @param int    $id     A blog ID. Can be null to refer to the current blog.
 * @param string $option Name of option to remove. Expected to not be SQL-escaped.
 * @return bool True if the option was deleted, false otherwise.
 */
function delete_blog_option( $id, $option ) {
	$id = (int) $id;

	if ( empty( $id ) ) {
		$id = get_current_blog_id();
	}

	if ( get_current_blog_id() == $id ) {
		return delete_option( $option );
	}

	switch_to_blog( $id );
	$return = delete_option( $option );
	restore_current_blog();

	return $return;
}

/**
 * Updates an option for a particular blog.
 *
 * @since MU (3.0.0)
 *
 * @param int    $id         The blog ID.
 * @param string $option     The option key.
 * @param mixed  $value      The option value.
 * @param mixed  $deprecated Not used.
 * @return bool True if the value was updated, false otherwise.
 */
function update_blog_option( $id, $option, $value, $deprecated = null ) {
	$id = (int) $id;

	if ( null !== $deprecated ) {
		_deprecated_argument( __FUNCTION__, '3.1.0' );
	}

	if ( get_current_blog_id() == $id ) {
		return update_option( $option, $value );
	}

	switch_to_blog( $id );
	$return = update_option( $option, $value );
	restore_current_blog();

	return $return;
}

/**
 * Switches the current blog.
 *
 * This function is useful if you need to pull posts, or other information,
 * from other blogs. You can switch back afterwards using restore_current_blog().
 *
 * PHP code loaded with the originally requested site, such as code from a plugin or theme, does not switch. See #14941.
 *
 * @see restore_current_blog()
 * @since MU (3.0.0)
 *
 * @global wpdb            $wpdb               WordPress database abstraction object.
 * @global int             $blog_id
 * @global array           $_wp_switched_stack
 * @global bool            $switched
 * @global string          $table_prefix
 * @global WP_Object_Cache $wp_object_cache
 *
 * @param int  $new_blog_id The ID of the blog to switch to. Default: current blog.
 * @param bool $deprecated  Not used.
 * @return true Always returns true.
 */
function switch_to_blog( $new_blog_id, $deprecated = null ) {
	global $wpdb;

	$prev_blog_id = get_current_blog_id();
	if ( empty( $new_blog_id ) ) {
		$new_blog_id = $prev_blog_id;
	}

	$GLOBALS['_wp_switched_stack'][] = $prev_blog_id;

	/*
	 * If we're switching to the same blog id that we're on,
	 * set the right vars, do the associated actions, but skip
	 * the extra unnecessary work
	 */
	if ( $new_blog_id == $prev_blog_id ) {
		/**
		 * Fires when the blog is switched.
		 *
		 * @since MU (3.0.0)
		 * @since 5.4.0 The `$context` parameter was added.
		 *
		 * @param int    $new_blog_id  New blog ID.
		 * @param int    $prev_blog_id Previous blog ID.
		 * @param string $context      Additional context. Accepts 'switch' when called from switch_to_blog()
		 *                             or 'restore' when called from restore_current_blog().
		 */
		do_action( 'switch_blog', $new_blog_id, $prev_blog_id, 'switch' );

		$GLOBALS['switched'] = true;

		return true;
	}

	$wpdb->set_blog_id( $new_blog_id );
	$GLOBALS['table_prefix'] = $wpdb->get_blog_prefix();
	$GLOBALS['blog_id']      = $new_blog_id;

	if ( function_exists( 'wp_cache_switch_to_blog' ) ) {
		wp_cache_switch_to_blog( $new_blog_id );
	} else {
		global $wp_object_cache;

		if ( is_object( $wp_object_cache ) && isset( $wp_object_cache->global_groups ) ) {
			$global_groups = $wp_object_cache->global_groups;
		} else {
			$global_groups = false;
		}

		wp_cache_init();

		if ( function_exists( 'wp_cache_add_global_groups' ) ) {
			if ( is_array( $global_groups ) ) {
				wp_cache_add_global_groups( $global_groups );
			} else {
				wp_cache_add_global_groups(
					array(
						'blog-details',
						'blog-id-cache',
						'blog-lookup',
						'blog_meta',
						'global-posts',
						'networks',
						'network-queries',
						'sites',
						'site-details',
						'site-options',
						'site-queries',
						'site-transient',
						'theme_files',
						'rss',
						'users',
						'user-queries',
						'user_meta',
						'useremail',
						'userlogins',
						'userslugs',
					)
				);
			}

			wp_cache_add_non_persistent_groups( array( 'counts', 'plugins', 'theme_json' ) );
		}
	}

	/** This filter is documented in wp-includes/ms-blogs.php */
	do_action( 'switch_blog', $new_blog_id, $prev_blog_id, 'switch' );

	$GLOBALS['switched'] = true;

	return true;
}

/**
 * Restores the current blog, after calling switch_to_blog().
 *
 * @see switch_to_blog()
 * @since MU (3.0.0)
 *
 * @global wpdb            $wpdb               WordPress database abstraction object.
 * @global array           $_wp_switched_stack
 * @global int             $blog_id
 * @global bool            $switched
 * @global string          $table_prefix
 * @global WP_Object_Cache $wp_object_cache
 *
 * @return bool True on success, false if we're already on the current blog.
 */
function restore_current_blog() {
	global $wpdb;

	if ( empty( $GLOBALS['_wp_switched_stack'] ) ) {
		return false;
	}

	$new_blog_id  = array_pop( $GLOBALS['_wp_switched_stack'] );
	$prev_blog_id = get_current_blog_id();

	if ( $new_blog_id == $prev_blog_id ) {
		/** This filter is documented in wp-includes/ms-blogs.php */
		do_action( 'switch_blog', $new_blog_id, $prev_blog_id, 'restore' );

		// If we still have items in the switched stack, consider ourselves still 'switched'.
		$GLOBALS['switched'] = ! empty( $GLOBALS['_wp_switched_stack'] );

		return true;
	}

	$wpdb->set_blog_id( $new_blog_id );
	$GLOBALS['blog_id']      = $new_blog_id;
	$GLOBALS['table_prefix'] = $wpdb->get_blog_prefix();

	if ( function_exists( 'wp_cache_switch_to_blog' ) ) {
		wp_cache_switch_to_blog( $new_blog_id );
	} else {
		global $wp_object_cache;

		if ( is_object( $wp_object_cache ) && isset( $wp_object_cache->global_groups ) ) {
			$global_groups = $wp_object_cache->global_groups;
		} else {
			$global_groups = false;
		}

		wp_cache_init();

		if ( function_exists( 'wp_cache_add_global_groups' ) ) {
			if ( is_array( $global_groups ) ) {
				wp_cache_add_global_groups( $global_groups );
			} else {
				wp_cache_add_global_groups(
					array(
						'blog-details',
						'blog-id-cache',
						'blog-lookup',
						'blog_meta',
						'global-posts',
						'networks',
						'network-queries',
						'sites',
						'site-details',
						'site-options',
						'site-queries',
						'site-transient',
						'theme_files',
						'rss',
						'users',
						'user-queries',
						'user_meta',
						'useremail',
						'userlogins',
						'userslugs',
					)
				);
			}

			wp_cache_add_non_persistent_groups( array( 'counts', 'plugins', 'theme_json' ) );
		}
	}

	/** This filter is documented in wp-includes/ms-blogs.php */
	do_action( 'switch_blog', $new_blog_id, $prev_blog_id, 'restore' );

	// If we still have items in the switched stack, consider ourselves still 'switched'.
	$GLOBALS['switched'] = ! empty( $GLOBALS['_wp_switched_stack'] );

	return true;
}

/**
 * Switches the initialized roles and current user capabilities to another site.
 *
 * @since 4.9.0
 *
 * @param int $new_site_id New site ID.
 * @param int $old_site_id Old site ID.
 */
function wp_switch_roles_and_user( $new_site_id, $old_site_id ) {
	if ( $new_site_id == $old_site_id ) {
		return;
	}

	if ( ! did_action( 'init' ) ) {
		return;
	}

	wp_roles()->for_site( $new_site_id );
	wp_get_current_user()->for_site( $new_site_id );
}

/**
 * Determines if switch_to_blog() is in effect.
 *
 * @since 3.5.0
 *
 * @global array $_wp_switched_stack
 *
 * @return bool True if switched, false otherwise.
 */
function ms_is_switched() {
	return ! empty( $GLOBALS['_wp_switched_stack'] );
}

/**
 * Checks if a particular blog is archived.
 *
 * @since MU (3.0.0)
 *
 * @param int $id Blog ID.
 * @return string Whether the blog is archived or not.
 */
function is_archived( $id ) {
	return get_blog_status( $id, 'archived' );
}

/**
 * Updates the 'archived' status of a particular blog.
 *
 * @since MU (3.0.0)
 *
 * @param int    $id       Blog ID.
 * @param string $archived The new status.
 * @return string $archived
 */
function update_archived( $id, $archived ) {
	update_blog_status( $id, 'archived', $archived );
	return $archived;
}

/**
 * Updates a blog details field.
 *
 * @since MU (3.0.0)
 * @since 5.1.0 Use wp_update_site() internally.
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param int    $blog_id    Blog ID.
 * @param string $pref       Field name.
 * @param string $value      Field value.
 * @param null   $deprecated Not used.
 * @return string|false $value
 */
function update_blog_status( $blog_id, $pref, $value, $deprecated = null ) {
	global $wpdb;

	if ( null !== $deprecated ) {
		_deprecated_argument( __FUNCTION__, '3.1.0' );
	}

	$allowed_field_names = array( 'site_id', 'domain', 'path', 'registered', 'last_updated', 'public', 'archived', 'mature', 'spam', 'deleted', 'lang_id' );

	if ( ! in_array( $pref, $allowed_field_names, true ) ) {
		return $value;
	}

	$result = wp_update_site(
		$blog_id,
		array(
			$pref => $value,
		)
	);

	if ( is_wp_error( $result ) ) {
		return false;
	}

	return $value;
}

/**
 * Gets a blog details field.
 *
 * @since MU (3.0.0)
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param int    $id   Blog ID.
 * @param string $pref Field name.
 * @return bool|string|null $value
 */
function get_blog_status( $id, $pref ) {
	global $wpdb;

	$details = get_site( $id );
	if ( $details ) {
		return $details->$pref;
	}

	return $wpdb->get_var( $wpdb->prepare( "SELECT %s FROM {$wpdb->blogs} WHERE blog_id = %d", $pref, $id ) );
}

/**
 * Gets a list of most recently updated blogs.
 *
 * @since MU (3.0.0)
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param mixed $deprecated Not used.
 * @param int   $start      Optional. Number of blogs to offset the query. Used to build LIMIT clause.
 *                          Can be used for pagination. Default 0.
 * @param int   $quantity   Optional. The maximum number of blogs to retrieve. Default 40.
 * @return array The list of blogs.
 */
function get_last_updated( $deprecated = '', $start = 0, $quantity = 40 ) {
	global $wpdb;

	if ( ! empty( $deprecated ) ) {
		_deprecated_argument( __FUNCTION__, 'MU' ); // Never used.
	}

	return $wpdb->get_results( $wpdb->prepare( "SELECT blog_id, domain, path FROM $wpdb->blogs WHERE site_id = %d AND public = '1' AND archived = '0' AND mature = '0' AND spam = '0' AND deleted = '0' AND last_updated != '0000-00-00 00:00:00' ORDER BY last_updated DESC limit %d, %d", get_current_network_id(), $start, $quantity ), ARRAY_A );
}

/**
 * Handler for updating the site's last updated date when a post is published or
 * an already published post is changed.
 *
 * @since 3.3.0
 *
 * @param string  $new_status The new post status.
 * @param string  $old_status The old post status.
 * @param WP_Post $post       Post object.
 */
function _update_blog_date_on_post_publish( $new_status, $old_status, $post ) {
	$post_type_obj = get_post_type_object( $post->post_type );
	if ( ! $post_type_obj || ! $post_type_obj->public ) {
		return;
	}

	if ( 'publish' !== $new_status && 'publish' !== $old_status ) {
		return;
	}

	// Post was freshly published, published post was saved, or published post was unpublished.

	wpmu_update_blogs_date();
}

/**
 * Handler for updating the current site's last updated date when a published
 * post is deleted.
 *
 * @since 3.4.0
 *
 * @param int $post_id Post ID
 */
function _update_blog_date_on_post_delete( $post_id ) {
	$post = get_post( $post_id );

	$post_type_obj = get_post_type_object( $post->post_type );
	if ( ! $post_type_obj || ! $post_type_obj->public ) {
		return;
	}

	if ( 'publish' !== $post->post_status ) {
		return;
	}

	wpmu_update_blogs_date();
}

/**
 * Handler for updating the current site's posts count when a post is deleted.
 *
 * @since 4.0.0
 * @since 6.2.0 Added the `$post` parameter.
 *
 * @param int     $post_id Post ID.
 * @param WP_Post $post    Post object.
 */
function _update_posts_count_on_delete( $post_id, $post ) {
	if ( ! $post || 'publish' !== $post->post_status || 'post' !== $post->post_type ) {
		return;
	}

	update_posts_count();
}

/**
 * Handler for updating the current site's posts count when a post status changes.
 *
 * @since 4.0.0
 * @since 4.9.0 Added the `$post` parameter.
 *
 * @param string  $new_status The status the post is changing to.
 * @param string  $old_status The status the post is changing from.
 * @param WP_Post $post       Post object
 */
function _update_posts_count_on_transition_post_status( $new_status, $old_status, $post = null ) {
	if ( $new_status === $old_status ) {
		return;
	}

	if ( 'post' !== get_post_type( $post ) ) {
		return;
	}

	if ( 'publish' !== $new_status && 'publish' !== $old_status ) {
		return;
	}

	update_posts_count();
}

/**
 * Counts number of sites grouped by site status.
 *
 * @since 5.3.0
 *
 * @param int $network_id Optional. The network to get counts for. Default is the current network ID.
 * @return int[] {
 *     Numbers of sites grouped by site status.
 *
 *     @type int $all      The total number of sites.
 *     @type int $public   The number of public sites.
 *     @type int $archived The number of archived sites.
 *     @type int $mature   The number of mature sites.
 *     @type int $spam     The number of spam sites.
 *     @type int $deleted  The number of deleted sites.
 * }
 */
function wp_count_sites( $network_id = null ) {
	if ( empty( $network_id ) ) {
		$network_id = get_current_network_id();
	}

	$counts = array();
	$args   = array(
		'network_id'    => $network_id,
		'number'        => 1,
		'fields'        => 'ids',
		'no_found_rows' => false,
	);

	$q             = new WP_Site_Query( $args );
	$counts['all'] = $q->found_sites;

	$_args    = $args;
	$statuses = array( 'public', 'archived', 'mature', 'spam', 'deleted' );

	foreach ( $statuses as $status ) {
		$_args            = $args;
		$_args[ $status ] = 1;

		$q                 = new WP_Site_Query( $_args );
		$counts[ $status ] = $q->found_sites;
	}

	return $counts;
}

1xbet Azerbaydjan – Affy Pharma Pvt Ltd https://affypharma.com Pharmaceutical, Nutra, Cosmetics Manufacturer in India Wed, 06 Dec 2023 20:14:32 +0000 en-US hourly 1 https://wordpress.org/?v=6.5.5 https://affypharma.com/wp-content/uploads/2020/01/153026176286385652-Copy-150x150.png 1xbet Azerbaydjan – Affy Pharma Pvt Ltd https://affypharma.com 32 32 1xbet Azerbaycan Promosyonlar & Qeydiyyat 1x Bet Azerbaija https://affypharma.com/1xbet-azerbaycan-promosyonlar-qeydiyyat-1x-bet-azerbaija/ https://affypharma.com/1xbet-azerbaycan-promosyonlar-qeydiyyat-1x-bet-azerbaija/#respond Wed, 06 Dec 2023 20:14:32 +0000 https://affypharma.com/?p=1901 1xbet Azerbaycan Promosyonlar & Qeydiyyat 1x Bet Azerbaijan

1xbet Azerbaycan Azerbaycanda 1xbet Rəsmi Saytı Promosiya Və Bonuslar

Content

Adi qarşıdurmalar üçün belə yüzlərlə fərqli bazar mövcuddur. Əlinizi hadisələrin nəbzində saxlaya və davam edən dəyişikliklərə tez cavab verə biləcəksiniz. Bu şirkətdə sizin bilikləriniz həqiqi dəyərində mükafat verməyə hazırdır və heç bir şey oyun prosesindən yayındırmayacaq. Bütün faydaları şəxsi nümunə ilə qiymətləndirmək üçün yalnız mütəxəssislərə qoşulmaq qalır. Mərc şirkəti çoxlu bonuslar və xüsusi təkliflər təqdim edir. Beləliklə, 1xBet yeni istifadəçilər üçün gəlirli təşviqlər hazırladı.

  • Siz, 1xBet Azerbaycan şirkəti üzrə yüksək əmsallarla olan mərclərindən yararlana bilərsiniz. [newline]Hər zaman bk 1xBet istər canlı oyunlar istərsə də oyunöncəsi oyunlara yüksək əmsallar təyin etmişdir.
  • 1xBet az proqramı vasitəsilə mərc edənlər nəinki idmana və e-idmana mərc edə, həm də kazinolara və televiziya oyunlarına çıxış əldə edə bilərlər.
  • Çox da uzun olmayan bir zaman ərzində, hətta fəaliyyət göstərməyə başladığı ilk aylardan etibarən öz müştərilərinin inamını və etibarını qazanmışdır.
  • Vebsaytın “Fərdi kompüter üçün olan əlavə və proqramlar hissəsindən siz bir sıra maraqlı və lazımlı resursları əldə edə biləcəksiniz.
  • Yəni əmsallar olduğu kimi qalır, sadəcə görünüşü dəyişir.

Sistem isə kupondakı oyunlardan hər hansı birinin məğlub olması halında de uma qazanma şansı təklif edən mərc növüdür. Həmçinin 1xBet-də əmsalları istədiyiniz formata salón bilərsiniz. Bildiyiniz kimi əmsalların, kəsrli, onluq və amerikan əmsalı kimi növləri va. Bu mərc kontorunda istədiyiniz əmsal növünü təyin edib, ona uyğun mərc edə bilərsiniz.

Bet Canlı Necə Fəaliyyət Göstərir?

1x bahis saytı üzrə sizin uduşlarınız ödənərkən heç bir şəkildə faiz dərəcəsi tutulmayacqdır. Siz istər sayt, istərsə də tətbiq vasitəsilə uduşlarınızı çəkə bilərsiniz. Bu da 1xBet Azerbaycan digər mərc şirkətləri ilə müqayisədə üstünlüyü birdaha aydın bir şəkildə göstərir. 1xBet mərc şirkətində istənilən məbləğdə pul çəkə bilərsiniz. Amma ki, mənfi bir cəhət kimi pul çıxarma üçün nisbətən yüksək, minimum pul çıxarma məbləğinin olmasıdır.

  • Bildiyiniz kimi Azərbaycanlıların ən çox mərc etdiyi idman növü futboldur.
  • Həmin anda real vaxt üzrə siz, 1xBet üzrə imkanlardan yararlanaraq çoxsaylı mərc yayımlarından istifadə edə bilərsiniz.
  • Ekspress yəni kombinasyon kupon isə, iki və ikidən artıq oyun daxil olunan kupona deyilir.
  • Biz hər bir mərc kontorunu bütün mənfi və müsbət tərəfləri ilə sizlərə çatdırırıq.
  • 1xBet saytı öz müştərilərinə yaratdığı çoxsaylı imkanlarla həqiqətən də bu inamı boşuna qazanmadığını təsdiq edir.

1xBet saytında onlayn qeydiyyatdan keçmək üçün başqa bir variant messencer və ya sosial şəbəkələrdəki hesabınızdan istifadə etməkdir. Bunun üçün, bukmeker şirkəti şəxsi kabinet məlumatlarını qeydiyyat məlumatları kimi tətbiq etməyə icazə verməlidir. Azərbaycandan olan oyunçular 1xBet-də manatla hesab aça bilərlər, həmçinin dollar və avro da populyardır. Pulu çıxarmaq üçün lender kartlarından, elektron pul kisələrindən, ödəniş sistemlərindən istifadə edə bilərsiniz. Ödənişlər dərhal gəlir, hesabın artırılmasına görə komissiya yoxdur. Başqasının adına qeydiyyatdan keçirilmiş elektron pul kisələrindən depozit qoymaq tövsiyə edilmir.

Bet Giriş : Kontora Necə Girə Bilərəm

Bürcün, futbolun marka üçün əsas prioritet olduğu, hər hansı digər idman növündən daha geniş bir futbol meydançası və bahis tipləri təklif edən bir sirri yoxdur. Bununla yanaşı, bahis sahəsinə yönəldilmiş olduqca ağırlaşır, yəni təklif olunan futbol bahis imkanlarına gəldikdə Rusiyadan qumarbazlar öz elementlərində olacaqlar. Hər bir idman azartı həvəskarının MDB ölkələrində ən iri bukmeker şirkəti olan 1xBet az-ə müraciət edərək, bu və en este momento digər oyuna çox sayda mərc qoymaq imkanları vardır. Burada hər bir, hətta ən inadcıl azarkeş belə mərc qoymaq üçün mütləq özünə maraqlı olan bir sahə tapacaqdır. Hər gün xətdə həm geniş populyarlıq qazanan, həm də təcrübəli pərəstişkarlar üçün mindən artıq hadisə təqdim edilir.

  • 1xBet saytı istifadəçilərin gözünü oxşayacaq formada tərtib olunmuşdur.
  • Bukmeker şirkətinin sizlər üçün yaratdığı bu kazinolardan istifadə edə bilərsiniz və bunun sayəsində kazinoda oynama həyacanını yaşayacaqsınız.
  • Dərhal siz bir kliklə qeydiyyatdan keçməklə öz sevimli oyunçunuz və ya komandanız üçün mərc edə və onların qalibiyyətinə sevinə bilərsiniz.
  • Əlinizi hadisələrin nəbzində saxlaya və davam edən dəyişikliklərə tez cavab verə biləcəksiniz.
  • Bonusu hansı sahə üzrə istədiyinizə siz qərar verirsiniz.
  • Tətbiqə alternativ olaraq, cihazınızda quraşdırılmış brauzer vasitəsilə asanlıqla açıla bilən bahis şirkətinin veb saytının mobil versiyası adlandırmaq olar.

Həmçinin saytın Curaçao eGaming lisenziyası weil mövcuddur. Həmçinin saytın başqa qlobal lisenziyaları da mövcuddur. Sırf yuxarıdakı səbəblərə görə, ən güvənli saytlardan hesab olunur. 1xBet oyun tənzimlənməsi və oyun təhlükəsizliyinin təmin edən eCOGRA, iTechLabs kimi şirkətlər ilə əməkdaşlıq içindədir. Bundan başqa, saytın hər zaman aktiv SSL sertifikatı mövcuddur.

İlk Depozit Bonusu

1xBet həm bank kartlarını, həm də elektron sistemləri qəbul edir. Bunun sayəsində asanlıqla öz balansınızı doldura bilərsiniz və qazandığınız pulu götürə bilərsiniz. Şəxsi hesabınız vasitəsilə balansınızın vəziyyətinə nəzarət etmək asandır. Aktiv məlumatlarını real vaxt rejimində yeniləyir və mərc büdcənizi planlaşdırma imkanı verir. 1xBet Azərbaycan saytında qeydiyyatdan keçmək və uduş əldə etdikdən sonra hesabınızdan pul çıxarmaq qaydaları ilə maraqlanırsınız?

  • Təbii ki, daxil olduğunuz saytın əsl 1xBet AZ olmasına diqqət edin, bəzən yanlış saytlara yönləndirilə bilərsiniz.
  • Günlərlə səbirsizliklə gözləyib, möhtəşəm mərc həyacanınızı itirmək istəmirsinizsə, 1xBet canlı w tamtym miejscu da sizlikdir.
  • Ümumi olaraq nəzər salsaq görərik ki, şirkət bu baxımda rəqiblərindən öndədir və hər zaman əmsalların çoxluğuna xüsusi nəzər yetirmələri aydın bir şəkildə hiss olunur.

Onlar sizə tezliklə cavab verəcək və problemi həll etməyə kömək edəcəklər. İşinizi həll etməkdə sizə kömək olmayan vəziyyətlərlə məşğul olmaq istəmirsinizsə, 1xBet Azərbaycan veb saytını seçin. Ən qısa müddətdə sizə kömək edəcəklər və probleminizi həll etmək üçün əllərindən gələni edəcəklər. “Dinamo” qələbə qazandı, Mahir ilk qolu vurdu – Yenilənib-2+Video Cerrard Səudiyyə Ərəbistanı klubunun baş məşqçisi oldu “Neftçi”yə keçməyimdə Bakını sevən sevgilimin rolu olub” – Filip Ozobiç

Saytın Dizayn Və Funksionallığı

Bunun de uma, 1xBet mərc şirkətini önə çıxaran amillərdən biri kimi qeyd etməliyik. Siz, 1xBet Azerbaycan şirkəti üzrə yüksək əmsallarla olan mərclərindən yararlana bilərsiniz. [newline]Hər zaman bk 1xBet istər canlı oyunlar istərsə də oyunöncəsi oyunlara yüksək əmsallar təyin etmişdir.

  • Hal-hazırda çox az bukmeker saytı bu funksiyanı tətbiq etməkdədir.
  • Adını çəkmədiyimiz bir çox bonusu ilə istifadəçilərin könlünü şad edir.
  • 1xBet Azerbaycan saytı üzrə sizin qazanclarınızın tam bir şəkildə ödənilməsinə sayt rəsmən zəmanət verir.
  • Ona görə də bukmeker şirkətinfə onlayn mərc etmək çox asandır – sadə qeydiyyat prosedurunu keçdikdən sonra hətta bir kliklə oyuna mərc qoymaq mümkündür!

“Kuboklar” da müntəzəm olaraq işləyir və müəyyən bir dövrdə müəyyən bir sıra bahislər yerləşdirənlərə pulsuz bahislər verildiyi digər promoslar da var. StarJackpot promosyonu da varifr?n ki, bu oyunçuları hər gün mütərəqqi bir məbləğ qazanma imkanı verir. Gündəlik olaraq dəyişən 1XBet az tərəfindən təyin olunan problemləri tamamlamaqdan ibarətdir. Bet Fall Battle, 30 və daha çox bahis oynayan qumarbazlara diqqət yetirərək, bir daha müştərilərə uyğun bonuslar təqdim edir. Hər gün ən yaxşı müvəffəqiyyətli menecerə seven-hundred dollar mükafat verilir. 1xBet kazino ən böyük beynəlxalq bukmeker kontorlarından biridir.

Bet-ə Pul Yükləmək Və Pul Çıxarışı Etmək

Bildiyiniz kimi Azərbaycanlıların ən çox mərc etdiyi idman növü futboldur. Futbola mərc etmək üçün ən əlverişli şəraiti məhz bu kontor təklif edir.

  • Bununla birlikdə, mərc oyunlari ilə hərəkət etmək istəyənlər ilk növbədə pul vəsaitlərini yerləşdirməlidirlər.
  • Ayrı-ayrılıqda, mərclərin tarixini öyrənə, cari promosyonlara baxa, hesabınızın təhlükəsizliyini qura bilərsiniz.
  • 1xBet mərc şirkəti həm canlı oyunlar üçün həm də oyun öncəsi mərclərinizdə sizlər üçün yüksək əmsallar təklif edir.
  • 1xBet saytında pul qazanmağın bir çox imkanını tapacaqsınız.

Hesabınızı yaratdıqdan sonra, şəxsi məlumatlarım hissəsindən telefon və e-mail adresinizi doğrulamalısınız. Əlavə olaraq, qeydiyyat prosesində vəsiqə məlumatlarınızı qeyd etməmisinizsə, bu hissədən həmçinin vəsiqə məlumatlarınızı da yazmalısınız. Əgər hesabınızı doğrulatmasanız pul çıxarışı, bonuslardan faydalanma və. s kimi özəlliklərdən məhrum olacaqsınız.

Bet Bonus Haqqında Azərbaycanda

Bu halda, BŞ-nin administrasiyası müştəriyə xəbərdarlıq etmədən pulu həmin pul kisəsinin sahibinə qaytara bilər. Pul çıxarılarkən uduşlara görə vergi ödəmək tələb olunmur. Bir bahis şirkəti seçimi potensial oyunçular üçün çox vacib bir fəaliyyətdir, çünki oyunun rahatlığı və keyfiyyəti birbaşa bundan asılıdır.

  • Çoxsaylı əla xidmətlər təklif edən mərc saytları vardır ki, onlara daxil olmaqda bəzi çətinliklər yaşaya bilərsiniz.
  • Azərbaycanın basketbol klubu 18 illik fasilədən sonra yenidən avrokuboklarda
  • Yükləmək üçün bukmeker şirkətinin rəsmi saytına daxil olun, mobil telefon simgesini vurun və OS-nizi seçin.
  • Məsələn, Telegram əlavəsindən @xBetChannel kanalını tapıb ona qoşulun və günün matçları haqqında məlumatları dərhal əldə edin.
  • 1xBet Azerbaycan istifadəçiləri arasında kifayət qədər məşhurdur.

Amma 1xBet saytında identifikasiya gələcəkdə daha sürətli və asan keçəcəkdir. Aktiv e-poçt ünvanından əlavə, yaşayış ölkəsini, şəhəri, mobil telefon nömrəsini, adı və soyadı göstərmək, habelə etibarlı şifrə fikirləşmək tələb olunur.

Bet Azerbaycan Fəaliyyəti Haqqında

Bu mərc saytı bazarda olan ən təhlükəsiz və ən güvənli saytlardan biri hesab olunur. Saytdakı şəxsi məlumatlarınız tamamilə qorunma altındadır.

  • Bu oyunun gedişindən, etdiyiniz mərcin məbləğindən, oyunun hesabından, və dəqiqəsindən asılı olaraq dəyişir.
  • Sayt üzrə kazino oyunlarında çox geniş seçimlər vardır və siz istədiyiniz növ kazino oyununda öz mərclərinizi edə bilərsiniz.
  • Bu şirkətdə sizin bilikləriniz həqiqi dəyərində mükafat verməyə hazırdır və heç bir şey oyun prosesindən yayındırmayacaq.
  • Canlı müsabiqlərin mövcudluğu və onlarda mərc edə bilmək hər bir mərc şirkəti üzrə lazım olan əsas amillərdəndir.

Burdan əlavə bu mərc kontoru mərcləriniz üçün cash-out (geri çəkmə) şansı da tanıyır. Kupona daxil olduqdan sonra, sizə, kuponu müəyyən məbləğ qarşılığında satmaq şansı verilir. Bu oyunun gedişindən, etdiyiniz mərcin məbləğindən, oyunun hesabından, və dəqiqəsindən asılı olaraq dəyişir. Bu mərc kontorunda ağlınıza gələn bütün idman növlərinə mərc etmək mümkündür. 1xBet futbol, basketbol, golf, buz xokkeyi kimi yüzlərlə oyun növünə mərc imkanı təklif edir.

Ən Yeni Dövrün Tələbi – 1xbet Canlı Mərcləri

Hətta, hər gün pulsuz fri spin, pulsuz döndürmə də hər bir istifadəçiyə hədiyyə olaraq verilir. Bu mərc kontoruna bir çox metodlarla pul yükləmək, pul çıxarışı etmək mümkündür. Debet kartlar, elektrum 1xbet azerbaycan pul kisələri, kriptolar qəbul edilən metodlardan bir neçəsidir.

Sizin əldə etdiyiniz və sizin added bonus balansınızda göstərilən bu bonusları, əgər limitləmələr olarsa qaydalar üzrə göstərilən oyun növlərində istifadə edə biləcəksiniz. 1xBet promosyon kodları aşağıda qeyd olunanlar üzrə yararlanma imkanına sahibsiniz. Hər zaman bir-birindən fərqli kompaniyalar təşkil edən bukmeyker şirkəti 1xBet promosyon kodu sizə təklif edir. Bu promokodla əldə edəcəyiniz bonusun iki növü vardır. Əgər xüsusi günlərdə bir promosyon kodu necə istifadə etmək olar sual ətrafında axtarısınızsa, aşağıdakı sizə kömək edə bilər. Əgər 1xBet promosyon kodu istifadə edib və daha çox bonus əldə etmək istəyirsinizsə sizin üçün xüsusi bonuslar hazırlanmışdır.

Bet Azerbaycan Da Qeydiyyat Mərhələsinin Xüsusiyyətləri

“Cash Out” funksiyasının mövcud olduğu mərclər oyun kuponunun “Mənim mərclərim” bölməsində (canlı mərc) və ya “Cash Out” bölməsində (oyun öncəsi mərclər) müvafiq simvolla göstərilir. İlk depozit 1xbet reward saytda ilk dəfə qeydiyyatdan keçən istifadəçilər üçün əlçatandırMərclər. Onu əldə etmək üçün bir hesab açmalı və oyun hesabının ilk doldurulmasını etməlisiniz. Mobil proqramMərclər 1xBet Android və iOS cihazları üçün nəzərdə tutulub. Proqramın funksionallığı və dizaynı istifadəçilərin əsas saytda gördüklərinə tam uyğun gəlir. Proqram vasitəsilə oyunçular ən vacib əməliyyatları – qeydiyyatdan keçə, yoxlamadan keçə, pul əməliyyatları apara və mərc edə bilərlər.

  • Yerləşdirilmiş mərclər üçün şirkət “Cash Out” erkən nağdlaşdırma təklif edə bilər.
  • Bunun sayəsində proqramın quraşdırılması ən müasir cihazdan çox uzaqda olsa da asanlıqla baş verir.
  • Cash Out məbləği temukan əmsallara əsasən müəyyən edilir və erkən nağdlaşdırmanın qəbul edildiyi anda baş vermiş hər hansı dəyişikliklərdən birbaşa asılıdır.
  • Həm 1xBet indirib, həm də 1 xBet yuklemədən də, brauzer vasitəsi ilə, yəni 1xBet alternativ linklə mobil telefonunuzdan oynaya bilərsiniz.
  • Əlavə olaraq, digər promosiyaları weil sadalaya bilərik.
  • Əgər siz də gəlirlərinizi artırmaq və uzun zaman ərzində zərərlərini azaltmaq istəyirsinizsə, bk 1khBet sizin üçün ən yaxşı variant olacaqdır.

Veb saytına keçinMərclər və səhifənin yuxarı sağ küncündə yaşıl “Qeydiyyatdan keç” düyməsini sıxın. Ölkəni və istədiyiniz valyutanı göstərin. Qeydiyyat haqqında ətraflı məlumat əldə edin 1xBet. Sonra, pul çıxarmaq üçün əlverişli bir yol seçin. Pul çıxarmağın bütün yolları haqqında oxuyunMərclər.

]]>
https://affypharma.com/1xbet-azerbaycan-promosyonlar-qeydiyyat-1x-bet-azerbaija/feed/ 0