*
* @since 0.71
*
+ * @global WP_Locale $wp_locale
+ *
* @param string $dateformatstring Format to display the date.
* @param bool|int $unixtimestamp Optional. Unix timestamp. Default false.
* @param bool $gmt Optional. Whether to use GMT timezone. Default false.
*
* @since 2.3.0
*
+ * @global WP_Locale $wp_locale
+ *
* @param int $number The number to convert based on locale.
* @param int $decimals Optional. Precision of the number of decimal places. Default 0.
* @return string Converted number in string format.
/**
* Convert number of bytes largest unit bytes will fit into.
*
- * It is easier to read 1kB than 1024 bytes and 1MB than 1048576 bytes. Converts
+ * It is easier to read 1 kB than 1024 bytes and 1 MB than 1048576 bytes. Converts
* number of bytes to human readable number by taking the number of that unit
* that the bytes will go into it. Supports TB value.
*
'GB' => 1073741824, // pow( 1024, 3)
'MB' => 1048576, // pow( 1024, 2)
'kB' => 1024, // pow( 1024, 1)
- 'B ' => 1, // pow( 1024, 0)
+ 'B' => 1, // pow( 1024, 0)
);
- foreach ( $quant as $unit => $mag )
- if ( doubleval($bytes) >= $mag )
+
+ foreach ( $quant as $unit => $mag ) {
+ if ( doubleval( $bytes ) >= $mag ) {
return number_format_i18n( $bytes / $mag, $decimals ) . ' ' . $unit;
+ }
+ }
return false;
}
// Double serialization is required for backward compatibility.
// See https://core.trac.wordpress.org/ticket/12930
+ // Also the world will end. See WP 3.6.1.
if ( is_serialized( $data, false ) )
return serialize( $data );
*
* @since 1.5.0
*
- * @see $wpdb
+ * @global wpdb $wpdb
*
* @param string $content Post Content.
- * @param int $post_ID Post ID.
+ * @param int $post_ID Post ID.
*/
function do_enclose( $content, $post_ID ) {
global $wpdb;
$k = $key . '%5B' . $k . '%5D';
if ( $v === null )
continue;
- elseif ( $v === FALSE )
+ elseif ( $v === false )
$v = '0';
if ( is_array($v) || is_object($v) )
wp_parse_str( $query, $qs );
$qs = urlencode_deep( $qs ); // this re-URL-encodes things that were already in the query string
if ( is_array( $args[0] ) ) {
- $kayvees = $args[0];
- $qs = array_merge( $qs, $kayvees );
+ foreach ( $args[0] as $k => $v ) {
+ $qs[ $k ] = $v;
+ }
} else {
$qs[ $args[0] ] = $args[1];
}
*
* @since 2.0.0
*
- * @param string $query_vars Default WP_Query arguments.
+ * @global WP $wp_locale
+ * @global WP_Query $wp_query
+ * @global WP_Query $wp_the_query
+ *
+ * @param string|array $query_vars Default WP_Query arguments.
*/
function wp( $query_vars = '' ) {
global $wp, $wp_query, $wp_the_query;
*
* @since 2.3.0
*
+ * @global array $wp_header_to_desc
+ *
* @param int $code HTTP status code.
* @return string Empty string if not found, or description if found.
*/
*
* @since 2.1.0
*
- * @uses $wp_query Used to tell if the use a comment feed.
+ * @global WP_Query $wp_query Used to tell if the use a comment feed.
*/
function do_feed() {
global $wp_query;
$ref = false;
if ( ! empty( $_REQUEST['_wp_http_referer'] ) )
$ref = wp_unslash( $_REQUEST['_wp_http_referer'] );
- else if ( ! empty( $_SERVER['HTTP_REFERER'] ) )
+ elseif ( ! empty( $_SERVER['HTTP_REFERER'] ) )
$ref = wp_unslash( $_SERVER['HTTP_REFERER'] );
if ( $ref && $ref !== wp_unslash( $_SERVER['REQUEST_URI'] ) )
$wrapper = null;
// Strip the protocol.
- if( wp_is_stream( $target ) ) {
+ if ( wp_is_stream( $target ) ) {
list( $wrapper, $target ) = explode( '://', $target, 2 );
}
$target = str_replace( '//', '/', $target );
// Put the wrapper back on the target.
- if( $wrapper !== null ) {
+ if ( $wrapper !== null ) {
$target = $wrapper . '://' . $target;
}
*/
if ( $dir_perms != ( $dir_perms & ~umask() ) ) {
$folder_parts = explode( '/', substr( $target, strlen( $target_parent ) + 1 ) );
- for ( $i = 1; $i <= count( $folder_parts ); $i++ ) {
+ for ( $i = 1, $c = count( $folder_parts ); $i <= $c; $i++ ) {
@chmod( $target_parent . '/' . implode( '/', array_slice( $folder_parts, 0, $i ) ), $dir_perms );
}
}
*
* @since 2.5.0
*
+ * @staticvar string $temp
+ *
* @return string Writable temporary directory.
*/
function get_temp_dir() {
- static $temp;
+ static $temp = '';
if ( defined('WP_TEMP_DIR') )
return trailingslashit(WP_TEMP_DIR);
if ( is_dir( $temp ) && wp_is_writable( $temp ) )
return $temp;
- $temp = '/tmp/';
- return $temp;
+ return '/tmp/';
}
/**
*/
function win_is_writable( $path ) {
- if ( $path[strlen( $path ) - 1] == '/' ) // if it looks like a directory, check a random file within the directory
+ if ( $path[strlen( $path ) - 1] == '/' ) { // if it looks like a directory, check a random file within the directory
return win_is_writable( $path . uniqid( mt_rand() ) . '.tmp');
- else if ( is_dir( $path ) ) // If it's a directory (and not a file) check a random file within the directory
+ } elseif ( is_dir( $path ) ) { // If it's a directory (and not a file) check a random file within the directory
return win_is_writable( $path . '/' . uniqid( mt_rand() ) . '.tmp' );
-
+ }
// check tmp file for read/write capabilities
$should_delete_tmp_file = !file_exists( $path );
$f = @fopen( $path, 'a' );
* @since 2.5.0
*
* @param string $ext The extension to search.
- * @return string|null The file type, example: audio, video, document, spreadsheet, etc.
- * Null if not found.
+ * @return string|void The file type, example: audio, video, document, spreadsheet, etc.
*/
function wp_ext2type( $ext ) {
$ext = strtolower( $ext );
'image' => array( 'jpg', 'jpeg', 'jpe', 'gif', 'png', 'bmp', 'tif', 'tiff', 'ico' ),
'audio' => array( 'aac', 'ac3', 'aif', 'aiff', 'm3a', 'm4a', 'm4b', 'mka', 'mp1', 'mp2', 'mp3', 'ogg', 'oga', 'ram', 'wav', 'wma' ),
'video' => array( '3g2', '3gp', '3gpp', 'asf', 'avi', 'divx', 'dv', 'flv', 'm4v', 'mkv', 'mov', 'mp4', 'mpeg', 'mpg', 'mpv', 'ogm', 'ogv', 'qt', 'rm', 'vob', 'wmv' ),
- 'document' => array( 'doc', 'docx', 'docm', 'dotm', 'odt', 'pages', 'pdf', 'xps', 'oxps', 'rtf', 'wp', 'wpd', 'psd' ),
+ 'document' => array( 'doc', 'docx', 'docm', 'dotm', 'odt', 'pages', 'pdf', 'xps', 'oxps', 'rtf', 'wp', 'wpd', 'psd', 'xcf' ),
'spreadsheet' => array( 'numbers', 'ods', 'xls', 'xlsx', 'xlsm', 'xlsb' ),
'interactive' => array( 'swf', 'key', 'ppt', 'pptx', 'pptm', 'pps', 'ppsx', 'ppsm', 'sldx', 'sldm', 'odp' ),
'text' => array( 'asc', 'csv', 'tsv', 'txt' ),
foreach ( $ext2type as $type => $exts )
if ( in_array( $ext, $exts ) )
return $type;
-
- return null;
}
/**
$ext = false;
foreach ( $mimes as $ext_preg => $mime_match ) {
- $ext_preg = '!\.(' . $ext_preg . ')(\?.*)?$!i';
+ $ext_preg = '!\.(' . $ext_preg . ')$!i';
if ( preg_match( $ext_preg, $filename, $ext_matches ) ) {
$type = $mime_match;
$ext = $ext_matches[1];
* if original $filename is valid.
*/
function wp_check_filetype_and_ext( $file, $filename, $mimes = null ) {
-
$proper_filename = false;
// Do basic extension validation and MIME mapping
* Retrieve list of mime types and file extensions.
*
* @since 3.5.0
+ * @since 4.2.0 Support was added for GIMP (xcf) files.
*
* @return array Array of mime types keyed by the file extension regex corresponding to those types.
*/
'gif' => 'image/gif',
'png' => 'image/png',
'bmp' => 'image/bmp',
- 'tif|tiff' => 'image/tiff',
+ 'tiff|tif' => 'image/tiff',
'ico' => 'image/x-icon',
// Video formats.
'asf|asx' => 'video/x-ms-asf',
'7z' => 'application/x-7z-compressed',
'exe' => 'application/x-msdownload',
'psd' => 'application/octet-stream',
+ 'xcf' => 'application/octet-stream',
// MS Office formats.
'doc' => 'application/msword',
'pot|pps|ppt' => 'application/vnd.ms-powerpoint',
<html xmlns="http://www.w3.org/1999/xhtml" <?php if ( function_exists( 'language_attributes' ) && function_exists( 'is_rtl' ) ) language_attributes(); else echo "dir='$text_direction'"; ?>>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+ <meta name="viewport" content="width=device-width">
<title><?php echo $title ?></title>
<style type="text/css">
html {
* @since 3.2.0
* @access private
*
+ * @global wp_xmlrpc_server $wp_xmlrpc_server
+ *
* @param string $message Error message.
* @param string $title Optional. Error title. Default empty.
* @param string|array $args Optional. Arguments to control behavior. Default empty array.
* @param int $options Optional. Options to be passed to json_encode(). Default 0.
* @param int $depth Optional. Maximum depth to walk through $data. Must be
* greater than 0. Default 512.
- * @return bool|string The JSON encoded string, or false if it cannot be encoded.
+ * @return string|false The JSON encoded string, or false if it cannot be encoded.
*/
function wp_json_encode( $data, $options = 0, $depth = 512 ) {
/*
/**
* Perform sanity checks on data that shall be encoded to JSON.
*
- * @see wp_json_encode()
- *
+ * @ignore
* @since 4.1.0
* @access private
- * @internal
+ *
+ * @see wp_json_encode()
*
* @param mixed $data Variable (usually an array or object) to encode as JSON.
* @param int $depth Maximum depth to walk through $data. Must be greater than 0.
/**
* Convert a string to UTF-8, so that it can be safely encoded to JSON.
*
- * @see _wp_json_sanity_check()
- *
+ * @ignore
* @since 4.1.0
* @access private
- * @internal
+ *
+ * @see _wp_json_sanity_check()
+ *
+ * @staticvar bool $use_mb
*
* @param string $string The string which is to be converted.
* @return string The checked string.
function _mce_set_direction( $input ) {
if ( is_rtl() ) {
$input['directionality'] = 'rtl';
- $input['plugins'] .= ',directionality';
- $input['toolbar1'] .= ',ltr';
+
+ if ( ! empty( $input['plugins'] ) && strpos( $input['plugins'], 'directionality' ) === false ) {
+ $input['plugins'] .= ',directionality';
+ }
+
+ if ( ! empty( $input['toolbar1'] ) && ! preg_match( '/\bltr\b/', $input['toolbar1'] ) ) {
+ $input['toolbar1'] .= ',ltr';
+ }
}
return $input;
if ( !isset( $wpsmiliestrans ) ) {
$wpsmiliestrans = array(
- ':mrgreen:' => 'icon_mrgreen.gif',
- ':neutral:' => 'icon_neutral.gif',
- ':twisted:' => 'icon_twisted.gif',
- ':arrow:' => 'icon_arrow.gif',
- ':shock:' => 'icon_eek.gif',
- ':smile:' => 'icon_smile.gif',
- ':???:' => 'icon_confused.gif',
- ':cool:' => 'icon_cool.gif',
- ':evil:' => 'icon_evil.gif',
- ':grin:' => 'icon_biggrin.gif',
- ':idea:' => 'icon_idea.gif',
- ':oops:' => 'icon_redface.gif',
- ':razz:' => 'icon_razz.gif',
- ':roll:' => 'icon_rolleyes.gif',
- ':wink:' => 'icon_wink.gif',
- ':cry:' => 'icon_cry.gif',
- ':eek:' => 'icon_surprised.gif',
- ':lol:' => 'icon_lol.gif',
- ':mad:' => 'icon_mad.gif',
- ':sad:' => 'icon_sad.gif',
- '8-)' => 'icon_cool.gif',
- '8-O' => 'icon_eek.gif',
- ':-(' => 'icon_sad.gif',
- ':-)' => 'icon_smile.gif',
- ':-?' => 'icon_confused.gif',
- ':-D' => 'icon_biggrin.gif',
- ':-P' => 'icon_razz.gif',
- ':-o' => 'icon_surprised.gif',
- ':-x' => 'icon_mad.gif',
- ':-|' => 'icon_neutral.gif',
- ';-)' => 'icon_wink.gif',
+ ':mrgreen:' => 'mrgreen.png',
+ ':neutral:' => "\xf0\x9f\x98\x90",
+ ':twisted:' => "\xf0\x9f\x98\x88",
+ ':arrow:' => "\xe2\x9e\xa1",
+ ':shock:' => "\xf0\x9f\x98\xaf",
+ ':smile:' => 'simple-smile.png',
+ ':???:' => "\xf0\x9f\x98\x95",
+ ':cool:' => "\xf0\x9f\x98\x8e",
+ ':evil:' => "\xf0\x9f\x91\xbf",
+ ':grin:' => "\xf0\x9f\x98\x80",
+ ':idea:' => "\xf0\x9f\x92\xa1",
+ ':oops:' => "\xf0\x9f\x98\xb3",
+ ':razz:' => "\xf0\x9f\x98\x9b",
+ ':roll:' => 'rolleyes.png',
+ ':wink:' => "\xf0\x9f\x98\x89",
+ ':cry:' => "\xf0\x9f\x98\xa5",
+ ':eek:' => "\xf0\x9f\x98\xae",
+ ':lol:' => "\xf0\x9f\x98\x86",
+ ':mad:' => "\xf0\x9f\x98\xa1",
+ ':sad:' => 'frownie.png',
+ '8-)' => "\xf0\x9f\x98\x8e",
+ '8-O' => "\xf0\x9f\x98\xaf",
+ ':-(' => 'frownie.png',
+ ':-)' => 'simple-smile.png',
+ ':-?' => "\xf0\x9f\x98\x95",
+ ':-D' => "\xf0\x9f\x98\x80",
+ ':-P' => "\xf0\x9f\x98\x9b",
+ ':-o' => "\xf0\x9f\x98\xae",
+ ':-x' => "\xf0\x9f\x98\xa1",
+ ':-|' => "\xf0\x9f\x98\x90",
+ ';-)' => "\xf0\x9f\x98\x89",
// This one transformation breaks regular text with frequency.
- // '8)' => 'icon_cool.gif',
- '8O' => 'icon_eek.gif',
- ':(' => 'icon_sad.gif',
- ':)' => 'icon_smile.gif',
- ':?' => 'icon_confused.gif',
- ':D' => 'icon_biggrin.gif',
- ':P' => 'icon_razz.gif',
- ':o' => 'icon_surprised.gif',
- ':x' => 'icon_mad.gif',
- ':|' => 'icon_neutral.gif',
- ';)' => 'icon_wink.gif',
- ':!:' => 'icon_exclaim.gif',
- ':?:' => 'icon_question.gif',
+ // '8)' => "\xf0\x9f\x98\x8e",
+ '8O' => "\xf0\x9f\x98\xaf",
+ ':(' => 'frownie.png',
+ ':)' => 'simple-smile.png',
+ ':?' => "\xf0\x9f\x98\x95",
+ ':D' => "\xf0\x9f\x98\x80",
+ ':P' => "\xf0\x9f\x98\x9b",
+ ':o' => "\xf0\x9f\x98\xae",
+ ':x' => "\xf0\x9f\x98\xa1",
+ ':|' => "\xf0\x9f\x98\x90",
+ ';)' => "\xf0\x9f\x98\x89",
+ ':!:' => "\xe2\x9d\x97",
+ ':?:' => "\xe2\x9d\x93",
);
}
* @param int|string $field Field from the object to place instead of the entire object
* @param int|string $index_key Optional. Field from the object to use as keys for the new array.
* Default null.
- * @return array Array of found values. If $index_key is set, an array of found values with keys
- * corresponding to $index_key.
+ * @return array Array of found values. If `$index_key` is set, an array of found values with keys
+ * corresponding to `$index_key`. If `$index_key` is null, array keys from the original
+ * `$list` will be preserved in the results.
*/
function wp_list_pluck( $list, $field, $index_key = null ) {
if ( ! $index_key ) {
* Append the Widgets menu to the themes main menu.
*
* @since 2.2.0
+ *
+ * @global array $submenu
*/
function wp_widgets_add_menu() {
global $submenu;
}
}
+/**
+ * Marks a constructor as deprecated and informs when it has been used.
+ *
+ * Similar to _deprecated_function(), but with different strings. Used to
+ * remove PHP4 style constructors.
+ *
+ * The current behavior is to trigger a user error if `WP_DEBUG` is true.
+ *
+ * This function is to be used in every PHP4 style constructor method that is deprecated.
+ *
+ * @since 4.3.0
+ * @access private
+ *
+ * @param string $class The class containing the deprecated constructor.
+ * @param string $version The version of WordPress that deprecated the function.
+ */
+function _deprecated_constructor( $class, $version ) {
+
+ /**
+ * Fires when a deprecated constructor is called.
+ *
+ * @since 4.3.0
+ *
+ * @param string $class The class containing the deprecated constructor.
+ * @param string $version The version of WordPress that deprecated the function.
+ */
+ do_action( 'deprecated_constructor_run', $class, $version );
+
+ /**
+ * Filter whether to trigger an error for deprecated functions.
+ *
+ * `WP_DEBUG` must be true in addition to the filter evaluating to true.
+ *
+ * @since 4.3.0
+ *
+ * @param bool $trigger Whether to trigger the error for deprecated functions. Default true.
+ */
+ if ( WP_DEBUG && apply_filters( 'deprecated_constructor_trigger_error', true ) ) {
+ if ( function_exists( '__' ) ) {
+ trigger_error( sprintf( __( 'The called constructor method for %1$s is <strong>deprecated</strong> since version %2$s! Use %3$s instead.' ), $class, $version, '<pre>__construct()</pre>' ) );
+ } else {
+ trigger_error( sprintf( 'The called constructor method for %1$s is <strong>deprecated</strong> since version %2$s! Use %3$s instead.', $class, $version, '<pre>__construct()</pre>' ) );
+ }
+ }
+
+}
+
/**
* Mark a file as deprecated and inform when it has been used.
*
if ( WP_DEBUG && apply_filters( 'doing_it_wrong_trigger_error', true ) ) {
if ( function_exists( '__' ) ) {
$version = is_null( $version ) ? '' : sprintf( __( '(This message was added in version %s.)' ), $version );
- $message .= ' ' . __( 'Please see <a href="http://codex.wordpress.org/Debugging_in_WordPress">Debugging in WordPress</a> for more information.' );
+ $message .= ' ' . __( 'Please see <a href="https://codex.wordpress.org/Debugging_in_WordPress">Debugging in WordPress</a> for more information.' );
trigger_error( sprintf( __( '%1$s was called <strong>incorrectly</strong>. %2$s %3$s' ), $function, $message, $version ) );
} else {
$version = is_null( $version ) ? '' : sprintf( '(This message was added in version %s.)', $version );
- $message .= ' Please see <a href="http://codex.wordpress.org/Debugging_in_WordPress">Debugging in WordPress</a> for more information.';
+ $message .= ' Please see <a href="https://codex.wordpress.org/Debugging_in_WordPress">Debugging in WordPress</a> for more information.';
trigger_error( sprintf( '%1$s was called <strong>incorrectly</strong>. %2$s %3$s', $function, $message, $version ) );
}
}
*
* @since 2.5.0
*
+ * @global bool $is_apache
+ *
* @param string $mod The module, e.g. mod_rewrite.
* @param bool $default Optional. The default return value if the module is not found. Default false.
* @return bool Whether the specified module is loaded.
*
* @since 2.8.0
*
+ * @global bool $is_iis7
+ *
* @return bool Whether IIS7 supports permalinks.
*/
function iis7_supports_permalinks() {
* Lastly we make sure that PHP is running via FastCGI. This is important because if it runs
* via ISAPI then pretty permalinks will not work.
*/
- $supports_permalinks = class_exists('DOMDocument') && isset($_SERVER['IIS_UrlRewriteModule']) && ( php_sapi_name() == 'cgi-fcgi' );
+ $supports_permalinks = class_exists('DOMDocument') && isset($_SERVER['IIS_UrlRewriteModule']) && ( PHP_SAPI == 'cgi-fcgi' );
}
/**
* @since 1.2.0
*
* @param string $file File path.
- * @param array $allowed_files List of allowed files.
+ * @param array $allowed_files List of allowed files.
* @return int 0 means nothing is wrong, greater than 0 means something was wrong.
*/
function validate_file( $file, $allowed_files = '' ) {
*
* @since 2.6.0
*
+ * @staticvar bool $forced
+ *
* @param string|bool $force Optional. Whether to force SSL in admin screens. Default null.
* @return bool True if forced, false if not forced.
*/
if ( false !== strpos( $_SERVER['SCRIPT_FILENAME'], $abspath_fix ) ) {
// Request is hitting a file inside ABSPATH
$directory = str_replace( ABSPATH, '', $script_filename_dir );
- // Strip off the sub directory, and any file/query paramss
+ // Strip off the sub directory, and any file/query params
$path = preg_replace( '#/' . preg_quote( $directory, '#' ) . '/[^/]*$#i', '' , $_SERVER['REQUEST_URI'] );
} elseif ( false !== strpos( $abspath_fix, $script_filename_dir ) ) {
// Request is hitting a file above ABSPATH
*
* @since 3.3.0
*
+ * @staticvar bool $_suspend
+ *
* @param bool $suspend Optional. Suspends additions if true, re-enables them if false.
* @return bool The current suspend setting
*/
*
* @since 2.7.0
*
+ * @global bool $_wp_suspend_cache_invalidation
+ *
* @param bool $suspend Optional. Whether to suspend or enable cache invalidation. Default true.
* @return bool The current suspend setting.
*/
*
* @since 3.0.0
*
+ * @global object $current_site
+ *
* @param int $site_id Optional. Site ID to test. Defaults to current site.
* Defaults to current site.
* @return bool True if $site_id is the main site of the network, or if not
* @return bool True if $network_id is the main network, or if not running Multisite.
*/
function is_main_network( $network_id = null ) {
- global $wpdb;
-
- if ( ! is_multisite() )
+ if ( ! is_multisite() ) {
return true;
+ }
$current_network_id = (int) get_current_site()->id;
- if ( ! $network_id )
+ if ( null === $network_id ) {
$network_id = $current_network_id;
+ }
+
$network_id = (int) $network_id;
- if ( defined( 'PRIMARY_NETWORK_ID' ) )
- return $network_id === (int) PRIMARY_NETWORK_ID;
+ return ( $network_id === get_main_network_id() );
+}
- if ( 1 === $current_network_id )
- return $network_id === $current_network_id;
+/**
+ * Get the main network ID.
+ *
+ * @since 4.3.0
+ *
+ * @global wpdb $wpdb WordPress database abstraction object.
+ *
+ * @return int The ID of the main network.
+ */
+function get_main_network_id() {
+ global $wpdb;
- $primary_network_id = (int) wp_cache_get( 'primary_network_id', 'site-options' );
+ if ( ! is_multisite() ) {
+ return 1;
+ }
- if ( $primary_network_id )
- return $network_id === $primary_network_id;
+ if ( defined( 'PRIMARY_NETWORK_ID' ) ) {
+ $main_network_id = PRIMARY_NETWORK_ID;
+ } elseif ( 1 === (int) get_current_site()->id ) {
+ // If the current network has an ID of 1, assume it is the main network.
+ $main_network_id = 1;
+ } else {
+ $main_network_id = wp_cache_get( 'primary_network_id', 'site-options' );
- $primary_network_id = (int) $wpdb->get_var( "SELECT id FROM $wpdb->site ORDER BY id LIMIT 1" );
- wp_cache_add( 'primary_network_id', $primary_network_id, 'site-options' );
+ if ( false === $main_network_id ) {
+ $main_network_id = (int) $wpdb->get_var( "SELECT id FROM {$wpdb->site} ORDER BY id LIMIT 1" );
+ wp_cache_add( 'primary_network_id', $main_network_id, 'site-options' );
+ }
+ }
- return $network_id === $primary_network_id;
+ /**
+ * Filter the main network ID.
+ *
+ * @since 4.3.0
+ *
+ * @param int $main_network_id The ID of the main network.
+ */
+ return (int) apply_filters( 'get_main_network_id', $main_network_id );
}
/**
*
* @since 3.0.0
*
+ * @staticvar bool $global_terms
+ *
* @return bool True if multisite and global terms enabled.
*/
function global_terms_enabled() {
*
* @since 3.0.0
*
- * @param null $anbled Whether global terms are enabled.
+ * @param null $enabled Whether global terms are enabled.
*/
$filter = apply_filters( 'global_terms_enabled', null );
if ( ! is_null( $filter ) )
*
* @since 2.8.0
*
- * @return float|bool Timezone GMT offset, false otherwise.
+ * @return float|false Timezone GMT offset, false otherwise.
*/
function wp_timezone_override_offset() {
if ( !$timezone_string = get_option( 'timezone_string' ) ) {
*
* @since 2.9.0
*
+ * @staticvar bool $mo_loaded
+ *
* @param string $selected_zone Selected timezone.
* @return string
*/
}
/**
- * Permanently delete posts, pages, attachments, and comments which have been
- * in the trash for EMPTY_TRASH_DAYS.
+ * Permanently delete comments or posts of any type that have held a status
+ * of 'trash' for the number of days defined in EMPTY_TRASH_DAYS.
+ *
+ * The default value of `EMPTY_TRASH_DAYS` is 30 (days).
*
* @since 2.9.0
+ *
+ * @global wpdb $wpdb
*/
function wp_scheduled_delete() {
global $wpdb;
* If the file data is not within that first 8kiB, then the author should correct
* their plugin file and move the data headers to the top.
*
- * @link http://codex.wordpress.org/File_Header
+ * @link https://codex.wordpress.org/File_Header
*
* @since 2.9.0
*
*
* @see __return_false()
*
- * @return bool True.
+ * @return true True.
*/
function __return_true() {
return true;
*
* @see __return_true()
*
- * @return bool False.
+ * @return false False.
*/
function __return_false() {
return false;
/**
* Return a MySQL expression for selecting the week number based on the start_of_week option.
*
- * @internal
+ * @ignore
* @since 3.0.0
*
* @param string $column Database column.
* Retrieve a list of protocols to allow in HTML attributes.
*
* @since 3.3.0
+ * @since 4.3.0 Added 'webcal' to the protocols array.
*
* @see wp_kses()
* @see esc_url()
*
- * @return array Array of allowed protocols.
+ * @staticvar array $protocols
+ *
+ * @return array Array of allowed protocols. Defaults to an array containing 'http', 'https',
+ * 'ftp', 'ftps', 'mailto', 'news', 'irc', 'gopher', 'nntp', 'feed', 'telnet',
+ * 'mms', 'rtsp', 'svn', 'tel', 'fax', 'xmpp', and 'webcal'.
*/
function wp_allowed_protocols() {
- static $protocols;
+ static $protocols = array();
if ( empty( $protocols ) ) {
- $protocols = array( 'http', 'https', 'ftp', 'ftps', 'mailto', 'news', 'irc', 'gopher', 'nntp', 'feed', 'telnet', 'mms', 'rtsp', 'svn', 'tel', 'fax', 'xmpp' );
+ $protocols = array( 'http', 'https', 'ftp', 'ftps', 'mailto', 'news', 'irc', 'gopher', 'nntp', 'feed', 'telnet', 'mms', 'rtsp', 'svn', 'tel', 'fax', 'xmpp', 'webcal' );
/**
* Filter the list of protocols allowed in HTML attributes.
* @since 3.4.0
* @access private
*
- * @return bool true|false Whether the device is able to upload files.
+ * @return bool Whether the device is able to upload files.
*/
function _device_can_upload() {
if ( ! wp_is_mobile() )
*
* @since 3.6.0
*
- * @param array|object $response The Heartbeat response object or array.
- * @return array|object $response The Heartbeat response object or array with 'wp-auth-check'
- * value set.
+ * @global int $login_grace_period
+ *
+ * @param array $response The Heartbeat response.
+ * @return array $response The Heartbeat response with 'wp-auth-check' value set.
*/
function wp_auth_check( $response ) {
$response['wp-auth-check'] = is_user_logged_in() && empty( $GLOBALS['login_grace_period'] );
*
* @see reset_mbstring_encoding()
*
+ * @staticvar array $encodings
+ * @staticvar bool $overloaded
+ *
* @param bool $reset Optional. Whether to reset the encoding back to a previously-set encoding.
* Default false.
*/
return (bool) $var;
}
+
+/**
+ * Delete a file
+ *
+ * @since 4.2.0
+ *
+ * @param string $file The path to the file to delete.
+ */
+function wp_delete_file( $file ) {
+ /**
+ * Filter the path of the file to delete.
+ *
+ * @since 2.1.0
+ *
+ * @param string $medium Path to the file to delete.
+ */
+ $delete = apply_filters( 'wp_delete_file', $file );
+ if ( ! empty( $delete ) ) {
+ @unlink( $delete );
+ }
+}
+
+/**
+ * Outputs a small JS snippet on preview tabs/windows to remove `window.name` on unload.
+ *
+ * This prevents reusing the same tab for a preview when the user has navigated away.
+ *
+ * @since 4.3.0
+ */
+function wp_post_preview_js() {
+ global $post;
+
+ if ( ! is_preview() || empty( $post ) ) {
+ return;
+ }
+
+ // Has to match the window name used in post_submit_meta_box()
+ $name = 'wp-preview-' . (int) $post->ID;
+
+ ?>
+ <script>
+ ( function() {
+ var query = document.location.search;
+
+ if ( query && query.indexOf( 'preview=true' ) !== -1 ) {
+ window.name = '<?php echo $name; ?>';
+ }
+
+ if ( window.addEventListener ) {
+ window.addEventListener( 'unload', function() { window.name = ''; }, false );
+ }
+ }());
+ </script>
+ <?php
+}