: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in
function get_site_url( $blog_id = null, $path = '', $scheme = null ) {
if ( empty( $blog_id ) || ! is_multisite() ) {
$url = get_option( 'siteurl' );
switch_to_blog( $blog_id );
$url = get_option( 'siteurl' );
$url = set_url_scheme( $url, $scheme );
if ( $path && is_string( $path ) ) {
$url .= '/' . ltrim( $path, '/' );
* @param string $url The complete site URL including scheme and path.
* @param string $path Path relative to the site URL. Blank string if no path is specified.
* @param string|null $scheme Scheme to give the site URL context. Accepts 'http', 'https', 'login',
* 'login_post', 'admin', 'relative' or null.
* @param int|null $blog_id Site ID, or null for the current site.
return apply_filters( 'site_url', $url, $path, $scheme, $blog_id );
* Retrieves the URL to the admin area for the current site.
* @param string $path Optional. Path relative to the admin URL. Default empty.
* @param string $scheme The scheme to use. Default is 'admin', which obeys force_ssl_admin() and is_ssl().
* 'http' or 'https' can be passed to force those schemes.
* @return string Admin URL link with optional path appended.
function admin_url( $path = '', $scheme = 'admin' ) {
return get_admin_url( null, $path, $scheme );
* Retrieves the URL to the admin area for a given site.
* @param int|null $blog_id Optional. Site ID. Default null (current site).
* @param string $path Optional. Path relative to the admin URL. Default empty.
* @param string $scheme Optional. The scheme to use. Accepts 'http' or 'https',
* to force those schemes. Default 'admin', which obeys
* force_ssl_admin() and is_ssl().
* @return string Admin URL link with optional path appended.
function get_admin_url( $blog_id = null, $path = '', $scheme = 'admin' ) {
$url = get_site_url( $blog_id, 'wp-admin/', $scheme );
if ( $path && is_string( $path ) ) {
$url .= ltrim( $path, '/' );
* Filters the admin area URL.
* @since 5.8.0 The `$scheme` parameter was added.
* @param string $url The complete admin area URL including scheme and path.
* @param string $path Path relative to the admin area URL. Blank string if no path is specified.
* @param int|null $blog_id Site ID, or null for the current site.
* @param string|null $scheme The scheme to use. Accepts 'http', 'https',
* 'admin', or null. Default 'admin', which obeys force_ssl_admin() and is_ssl().
return apply_filters( 'admin_url', $url, $path, $blog_id, $scheme );
* Retrieves the URL to the includes directory.
* @param string $path Optional. Path relative to the includes URL. Default empty.
* @param string|null $scheme Optional. Scheme to give the includes URL context. Accepts
* 'http', 'https', or 'relative'. Default null.
* @return string Includes URL link with optional path appended.
function includes_url( $path = '', $scheme = null ) {
$url = site_url( '/' . WPINC . '/', $scheme );
if ( $path && is_string( $path ) ) {
$url .= ltrim( $path, '/' );
* Filters the URL to the includes directory.
* @since 5.8.0 The `$scheme` parameter was added.
* @param string $url The complete URL to the includes directory including scheme and path.
* @param string $path Path relative to the URL to the wp-includes directory. Blank string
* if no path is specified.
* @param string|null $scheme Scheme to give the includes URL context. Accepts
* 'http', 'https', 'relative', or null. Default null.
return apply_filters( 'includes_url', $url, $path, $scheme );
* Retrieves the URL to the content directory.
* @param string $path Optional. Path relative to the content URL. Default empty.
* @return string Content URL link with optional path appended.
function content_url( $path = '' ) {
$url = set_url_scheme( WP_CONTENT_URL );
if ( $path && is_string( $path ) ) {
$url .= '/' . ltrim( $path, '/' );
* Filters the URL to the content directory.
* @param string $url The complete URL to the content directory including scheme and path.
* @param string $path Path relative to the URL to the content directory. Blank string
* if no path is specified.
return apply_filters( 'content_url', $url, $path );
* Retrieves a URL within the plugins or mu-plugins directory.
* Defaults to the plugins directory URL if no arguments are supplied.
* @param string $path Optional. Extra path appended to the end of the URL, including
* the relative directory if $plugin is supplied. Default empty.
* @param string $plugin Optional. A full path to a file inside a plugin or mu-plugin.
* The URL will be relative to its directory. Default empty.
* Typically this is done by passing `__FILE__` as the argument.
* @return string Plugins URL link with optional paths appended.
function plugins_url( $path = '', $plugin = '' ) {
$path = wp_normalize_path( $path );
$plugin = wp_normalize_path( $plugin );
$mu_plugin_dir = wp_normalize_path( WPMU_PLUGIN_DIR );
if ( ! empty( $plugin ) && str_starts_with( $plugin, $mu_plugin_dir ) ) {
$url = set_url_scheme( $url );
if ( ! empty( $plugin ) && is_string( $plugin ) ) {
$folder = dirname( plugin_basename( $plugin ) );
$url .= '/' . ltrim( $folder, '/' );
if ( $path && is_string( $path ) ) {
$url .= '/' . ltrim( $path, '/' );
* Filters the URL to the plugins directory.
* @param string $url The complete URL to the plugins directory including scheme and path.
* @param string $path Path relative to the URL to the plugins directory. Blank string
* if no path is specified.
* @param string $plugin The plugin file path to be relative to. Blank string if no plugin
return apply_filters( 'plugins_url', $url, $path, $plugin );
* Retrieves the site URL for the current network.
* Returns the site URL with the appropriate protocol, 'https' if
* is_ssl() and 'http' otherwise. If $scheme is 'http' or 'https', is_ssl() is
* @param string $path Optional. Path relative to the site URL. Default empty.
* @param string|null $scheme Optional. Scheme to give the site URL context. Accepts
* 'http', 'https', or 'relative'. Default null.
* @return string Site URL link with optional path appended.
function network_site_url( $path = '', $scheme = null ) {
if ( ! is_multisite() ) {
return site_url( $path, $scheme );
$current_network = get_network();
if ( 'relative' === $scheme ) {
$url = $current_network->path;
$url = set_url_scheme( 'http://' . $current_network->domain . $current_network->path, $scheme );
if ( $path && is_string( $path ) ) {
$url .= ltrim( $path, '/' );
* Filters the network site URL.
* @param string $url The complete network site URL including scheme and path.
* @param string $path Path relative to the network site URL. Blank string if
* @param string|null $scheme Scheme to give the URL context. Accepts 'http', 'https',
return apply_filters( 'network_site_url', $url, $path, $scheme );
* Retrieves the home URL for the current network.
* Returns the home URL with the appropriate protocol, 'https' is_ssl()
* and 'http' otherwise. If `$scheme` is 'http' or 'https', `is_ssl()` is
* @param string $path Optional. Path relative to the home URL. Default empty.
* @param string|null $scheme Optional. Scheme to give the home URL context. Accepts
* 'http', 'https', or 'relative'. Default null.
* @return string Home URL link with optional path appended.
function network_home_url( $path = '', $scheme = null ) {
if ( ! is_multisite() ) {
return home_url( $path, $scheme );
$current_network = get_network();
if ( ! in_array( $scheme, array( 'http', 'https', 'relative' ), true ) ) {
$scheme = is_ssl() ? 'https' : 'http';
if ( 'relative' === $scheme ) {
$url = $current_network->path;
$url = set_url_scheme( 'http://' . $current_network->domain . $current_network->path, $scheme );
if ( $path && is_string( $path ) ) {
$url .= ltrim( $path, '/' );
* Filters the network home URL.
* @param string $url The complete network home URL including scheme and path.
* @param string $path Path relative to the network home URL. Blank string
* if no path is specified.
* @param string|null $orig_scheme Scheme to give the URL context. Accepts 'http', 'https',
return apply_filters( 'network_home_url', $url, $path, $orig_scheme );
* Retrieves the URL to the admin area for the network.
* @param string $path Optional path relative to the admin URL. Default empty.
* @param string $scheme Optional. The scheme to use. Default is 'admin', which obeys force_ssl_admin()
* and is_ssl(). 'http' or 'https' can be passed to force those schemes.
* @return string Admin URL link with optional path appended.
function network_admin_url( $path = '', $scheme = 'admin' ) {
if ( ! is_multisite() ) {
return admin_url( $path, $scheme );
$url = network_site_url( 'wp-admin/network/', $scheme );
if ( $path && is_string( $path ) ) {
$url .= ltrim( $path, '/' );
* Filters the network admin URL.
* @since 5.8.0 The `$scheme` parameter was added.
* @param string $url The complete network admin URL including scheme and path.
* @param string $path Path relative to the network admin URL. Blank string if
* @param string|null $scheme The scheme to use. Accepts 'http', 'https',
* 'admin', or null. Default is 'admin', which obeys force_ssl_admin() and is_ssl().
return apply_filters( 'network_admin_url', $url, $path, $scheme );
* Retrieves the URL to the admin area for the current user.
* @param string $path Optional. Path relative to the admin URL. Default empty.
* @param string $scheme Optional. The scheme to use. Default is 'admin', which obeys force_ssl_admin()
* and is_ssl(). 'http' or 'https' can be passed to force those schemes.
* @return string Admin URL link with optional path appended.
function user_admin_url( $path = '', $scheme = 'admin' ) {
$url = network_site_url( 'wp-admin/user/', $scheme );
if ( $path && is_string( $path ) ) {
$url .= ltrim( $path, '/' );
* Filters the user admin URL for the current user.
* @since 5.8.0 The `$scheme` parameter was added.
* @param string $url The complete URL including scheme and path.
* @param string $path Path relative to the URL. Blank string if
* @param string|null $scheme The scheme to use. Accepts 'http', 'https',
* 'admin', or null. Default is 'admin', which obeys force_ssl_admin() and is_ssl().
return apply_filters( 'user_admin_url', $url, $path, $scheme );
* Retrieves the URL to the admin area for either the current site or the network depending on context.
* @param string $path Optional. Path relative to the admin URL. Default empty.
* @param string $scheme Optional. The scheme to use. Default is 'admin', which obeys force_ssl_admin()
* and is_ssl(). 'http' or 'https' can be passed to force those schemes.
* @return string Admin URL link with optional path appended.
function self_admin_url( $path = '', $scheme = 'admin' ) {
if ( is_network_admin() ) {
$url = network_admin_url( $path, $scheme );
} elseif ( is_user_admin() ) {
$url = user_admin_url( $path, $scheme );
$url = admin_url( $path, $scheme );
* Filters the admin URL for the current site or network depending on context.
* @param string $url The complete URL including scheme and path.
* @param string $path Path relative to the URL. Blank string if no path is specified.
* @param string $scheme The scheme to use.
return apply_filters( 'self_admin_url', $url, $path, $scheme );
* Sets the scheme for a URL.
* @since 4.4.0 The 'rest' scheme was added.
* @param string $url Absolute URL that includes a scheme
* @param string|null $scheme Optional. Scheme to give $url. Currently 'http', 'https', 'login',
* 'login_post', 'admin', 'relative', 'rest', 'rpc', or null. Default null.
* @return string URL with chosen scheme.
function set_url_scheme( $url, $scheme = null ) {
$scheme = is_ssl() ? 'https' : 'http';
} elseif ( 'admin' === $scheme || 'login' === $scheme || 'login_post' === $scheme || 'rpc' === $scheme ) {
$scheme = is_ssl() || force_ssl_admin() ? 'https' : 'http';
} elseif ( 'http' !== $scheme && 'https' !== $scheme && 'relative' !== $scheme ) {
$scheme = is_ssl() ? 'https' : 'http';
if ( str_starts_with( $url, '//' ) ) {
if ( 'relative' === $scheme ) {
$url = ltrim( preg_replace( '#^\w+://[^/]*#', '', $url ) );
if ( '' !== $url && '/' === $url[0] ) {
$url = '/' . ltrim( $url, "/ \t\n\r\0\x0B" );
$url = preg_replace( '#^\w+://#', $scheme . '://', $url );
* Filters the resulting URL after setting the scheme.
* @param string $url The complete URL including scheme and path.
* @param string $scheme Scheme applied to the URL. One of 'http', 'https', or 'relative'.
* @param string|null $orig_scheme Scheme requested for the URL. One of 'http', 'https', 'login',
* 'login_post', 'admin', 'relative', 'rest', 'rpc', or null.
return apply_filters( 'set_url_scheme', $url, $scheme, $orig_scheme );
* Retrieves the URL to the user's dashboard.
* If a user does not belong to any site, the global user dashboard is used. If the user
* belongs to the current site, the dashboard for the current site is returned. If the user
* cannot edit the current site, the dashboard to the user's primary site is returned.
* @param int $user_id Optional. User ID. Defaults to current user.
* @param string $path Optional path relative to the dashboard. Use only paths known to
* both site and user admins. Default empty.
* @param string $scheme The scheme to use. Default is 'admin', which obeys force_ssl_admin()
* and is_ssl(). 'http' or 'https' can be passed to force those schemes.
* @return string Dashboard URL link with optional path appended.
function get_dashboard_url( $user_id = 0, $path = '', $scheme = 'admin' ) {
$user_id = $user_id ? (int) $user_id : get_current_user_id();
$blogs = get_blogs_of_user( $user_id );
if ( is_multisite() && ! user_can( $user_id, 'manage_network' ) && empty( $blogs ) ) {
$url = user_admin_url( $path, $scheme );
} elseif ( ! is_multisite() ) {
$url = admin_url( $path, $scheme );
$current_blog = get_current_blog_id();
if ( $current_blog && ( user_can( $user_id, 'manage_network' ) || in_array( $current_blog, array_keys( $blogs ), true ) ) ) {
$url = admin_url( $path, $scheme );
$active = get_active_blog_for_user( $user_id );
$url = get_admin_url( $active->blog_id, $path, $scheme );
$url = user_admin_url( $path, $scheme );
* Filters the dashboard URL for a user.
* @param string $url The complete URL including scheme and path.
* @param int $user_id The user ID.
* @param string $path Path relative to the URL. Blank string if no path is specified.
* @param string $scheme Scheme to give the URL context. Accepts 'http', 'https', 'login',
* 'login_post', 'admin', 'relative' or null.
return apply_filters( 'user_dashboard_url', $url, $user_id, $path, $scheme );
* Retrieves the URL to the user's profile editor.
* @param int $user_id Optional. User ID. Defaults to current user.
* @param string $scheme Optional. The scheme to use. Default is 'admin', which obeys force_ssl_admin()
* and is_ssl(). 'http' or 'https' can be passed to force those schemes.
* @return string Dashboard URL link with optional path appended.
function get_edit_profile_url( $user_id = 0, $scheme = 'admin' ) {