$j = @$datefunc( $dateformatstring, $i );
/**
- * Filter the date formatted based on the locale.
+ * Filters the date formatted based on the locale.
*
* @since 2.8.0
*
*/
if ( 'on' === _x( 'off', 'decline months names: on or off' ) ) {
// Match a format like 'j F Y' or 'j. F'
- if ( @preg_match( '#^\d{1,2}\.? \w+#u', $date ) ) {
- $months = $wp_locale->month;
+ if ( @preg_match( '#^\d{1,2}\.? [^\d ]+#u', $date ) ) {
+ $months = $wp_locale->month;
+ $months_genitive = $wp_locale->month_genitive;
foreach ( $months as $key => $month ) {
- $months[ $key ] = '#' . $month . '#';
+ $months[ $key ] = '# ' . $month . '( |$)#u';
}
- $date = preg_replace( $months, $wp_locale->month_genitive, $date );
+ foreach ( $months_genitive as $key => $month ) {
+ $months_genitive[ $key ] = ' ' . $month . '$1';
+ }
+
+ $date = preg_replace( $months, $months_genitive, $date );
}
}
}
/**
- * Filter the number formatted based on the locale.
+ * Filters the number formatted based on the locale.
*
* @since 2.8.0
*
/**
* Convert number of bytes largest unit bytes will fit into.
*
- * It is easier to read 1 kB than 1024 bytes and 1 MB 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.
*
'TB' => TB_IN_BYTES,
'GB' => GB_IN_BYTES,
'MB' => MB_IN_BYTES,
- 'kB' => KB_IN_BYTES,
+ 'KB' => KB_IN_BYTES,
'B' => 1,
);
+ if ( 0 === $bytes ) {
+ return number_format_i18n( 0, $decimals ) . ' B';
+ }
+
foreach ( $quant as $unit => $mag ) {
if ( doubleval( $bytes ) >= $mag ) {
return number_format_i18n( $bytes / $mag, $decimals ) . ' ' . $unit;
}
/**
- * Filter the list of enclosure links before querying the database.
+ * Filters the list of enclosure links before querying the database.
*
* Allows for the addition and/or removal of potential enclosures to save
* to postmeta before checking the database for existing enclosures.
*/
function wp_get_http_headers( $url, $deprecated = false ) {
if ( !empty( $deprecated ) )
- _deprecated_argument( __FUNCTION__, '2.7' );
+ _deprecated_argument( __FUNCTION__, '2.7.0' );
$response = wp_safe_remote_head( $url );
* @since 2.3.0
*
* @see _http_build_query() Used to build the query
- * @link http://us2.php.net/manual/en/function.http-build-query.php for more on what
+ * @link https://secure.php.net/manual/en/function.http-build-query.php for more on what
* http_build_query() does.
*
* @param array $data URL-encode key/value pairs.
* @since 3.2.0
* @access private
*
- * @see http://us1.php.net/manual/en/function.http-build-query.php
+ * @see https://secure.php.net/manual/en/function.http-build-query.php
*
* @param array|object $data An array or object of data. Converted to array.
* @param string $prefix Optional. Numeric index. If set, start parameter numbering with it.
'disabled',
'enabled',
'error',
+ 'hotkeys_highlight_first',
+ 'hotkeys_highlight_last',
'locked',
'message',
'same',
);
/**
- * Filter the list of query variables to remove.
+ * Filters the list of query variables to remove.
*
* @since 4.2.0
*
if ( function_exists( 'apply_filters' ) )
/**
- * Filter an HTTP status header.
+ * Filters an HTTP status header.
*
* @since 2.2.0
*
$headers = array(
'Expires' => 'Wed, 11 Jan 1984 05:00:00 GMT',
'Cache-Control' => 'no-cache, must-revalidate, max-age=0',
- 'Pragma' => 'no-cache',
);
if ( function_exists('apply_filters') ) {
/**
- * Filter the cache-controlling headers.
+ * Filters the cache-controlling headers.
*
* @since 2.8.0
*
*
* @type string $Expires Expires header.
* @type string $Cache-Control Cache-Control header.
- * @type string $Pragma Pragma header.
* }
*/
$headers = (array) apply_filters( 'nocache_headers', $headers );
}
/**
- * Filter the robots.txt output.
+ * Filters the robots.txt output.
*
* @since 3.0.0
*
/**
* Retrieves unvalidated referer from '_wp_http_referer' or HTTP referer.
*
- * Do not use for redirects, use {@see wp_get_referer()} instead.
+ * Do not use for redirects, use wp_get_referer() instead.
*
* @since 4.5.0
*
*
* @since 2.8.0
*
- * @see http://bugs.php.net/bug.php?id=27609
- * @see http://bugs.php.net/bug.php?id=30931
+ * @see https://bugs.php.net/bug.php?id=27609
+ * @see https://bugs.php.net/bug.php?id=30931
*
* @param string $path Windows path to check for write-ability.
* @return bool Whether the path is writable.
* @uses _wp_upload_dir()
*
* @param string $time Optional. Time formatted in 'yyyy/mm'. Default null.
- * @param bool $create_dir Optional. Whether to check and create the uploads directory. Default true (backwards compatible).
+ * @param bool $create_dir Optional. Whether to check and create the uploads directory.
+ * Default true for backward compatibility.
* @param bool $refresh_cache Optional. Whether to refresh the cache. Default false.
* @return array See above for description.
*/
function wp_upload_dir( $time = null, $create_dir = true, $refresh_cache = false ) {
- static $cache = array();
+ static $cache = array(), $tested_paths = array();
$key = sprintf( '%d-%s', get_current_blog_id(), (string) $time );
}
/**
- * Filter the uploads directory data.
+ * Filters the uploads directory data.
*
* @since 2.0.0
*
if ( $create_dir ) {
$path = $uploads['path'];
- $tested_paths = wp_cache_get( 'upload_dir_tested_paths' );
-
- if ( ! is_array( $tested_paths ) ) {
- $tested_paths = array();
- }
- if ( ! in_array( $path, $tested_paths, true ) ) {
+ if ( array_key_exists( $path, $tested_paths ) ) {
+ $uploads['error'] = $tested_paths[ $path ];
+ } else {
if ( ! wp_mkdir_p( $path ) ) {
if ( 0 === strpos( $uploads['basedir'], ABSPATH ) ) {
$error_path = str_replace( ABSPATH, '', $uploads['basedir'] ) . $uploads['subdir'];
}
$uploads['error'] = sprintf( __( 'Unable to create directory %s. Is its parent directory writable by the server?' ), esc_html( $error_path ) );
- } else {
- $tested_paths[] = $path;
- wp_cache_set( 'upload_dir_tested_paths', $tested_paths );
}
+
+ $tested_paths[ $path ] = $uploads['error'];
}
}
}
/**
- * Filter the result when generating a unique file name.
+ * Filters the result when generating a unique file name.
*
* @since 4.5.0
*
*/
function wp_upload_bits( $name, $deprecated, $bits, $time = null ) {
if ( !empty( $deprecated ) )
- _deprecated_argument( __FUNCTION__, '2.0' );
+ _deprecated_argument( __FUNCTION__, '2.0.0' );
if ( empty( $name ) )
return array( 'error' => __( 'Empty filename' ) );
return $upload;
/**
- * Filter whether to treat the upload bits as an error.
+ * Filters whether to treat the upload bits as an error.
*
* Passing a non-array to the filter will effectively short-circuit preparing
* the upload bits, returning that value instead.
function wp_ext2type( $ext ) {
$ext = strtolower( $ext );
- /**
- * Filter file type based on the extension name.
- *
- * @since 2.5.0
- *
- * @see wp_ext2type()
- *
- * @param array $ext2type Multi-dimensional array with extensions for a default set
- * of file types.
- */
- $ext2type = apply_filters( 'ext2type', array(
- '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', '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' ),
- 'archive' => array( 'bz2', 'cab', 'dmg', 'gz', 'rar', 'sea', 'sit', 'sqx', 'tar', 'tgz', 'zip', '7z' ),
- 'code' => array( 'css', 'htm', 'html', 'php', 'js' ),
- ) );
-
+ $ext2type = wp_get_ext_types();
foreach ( $ext2type as $type => $exts )
if ( in_array( $ext, $exts ) )
return $type;
// If getimagesize() knows what kind of image it really is and if the real MIME doesn't match the claimed MIME
if ( !empty($imgstats['mime']) && $imgstats['mime'] != $type ) {
/**
- * Filter the list mapping image mime types to their respective extensions.
+ * Filters the list mapping image mime types to their respective extensions.
*
* @since 3.0.0
*
}
/**
- * Filter the "real" file type of the given file.
+ * Filters the "real" file type of the given file.
*
* @since 3.0.0
*
*/
function wp_get_mime_types() {
/**
- * Filter the list of mime types and file extensions.
+ * Filters the list of mime types and file extensions.
*
* This filter should be used to add, not remove, mime types. To remove
- * mime types, use the 'upload_mimes' filter.
+ * mime types, use the {@see 'upload_mimes'} filter.
*
* @since 3.5.0
*
'pages' => 'application/vnd.apple.pages',
) );
}
+
+/**
+ * Retrieves the list of common file extensions and their types.
+ *
+ * @since 4.6.0
+ *
+ * @return array Array of file extensions types keyed by the type of file.
+ */
+function wp_get_ext_types() {
+
+ /**
+ * Filters file type based on the extension name.
+ *
+ * @since 2.5.0
+ *
+ * @see wp_ext2type()
+ *
+ * @param array $ext2type Multi-dimensional array with extensions for a default set
+ * of file types.
+ */
+ return apply_filters( 'ext2type', array(
+ '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', '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' ),
+ 'archive' => array( 'bz2', 'cab', 'dmg', 'gz', 'rar', 'sea', 'sit', 'sqx', 'tar', 'tgz', 'zip', '7z' ),
+ 'code' => array( 'css', 'htm', 'html', 'php', 'js' ),
+ ) );
+}
+
/**
* Retrieve list of allowed mime types and file extensions.
*
unset( $t['htm|html'] );
/**
- * Filter list of allowed mime types and file extensions.
+ * Filters list of allowed mime types and file extensions.
*
* @since 2.0.0
*
* @since 4.1.0 The `$title` and `$args` parameters were changed to optionally accept
* an integer to be used as the response code.
*
- * @param string|WP_Error $message Optional. Error message. If this is a {@see WP_Error} object,
+ * @param string|WP_Error $message Optional. Error message. If this is a WP_Error object,
* the error's messages are used. Default empty.
* @param string|int $title Optional. Error title. If `$message` is a `WP_Error` object,
* error data with the key 'title' may be used to specify the title.
* @type bool $back_link Whether to include a link to go back. Default false.
* @type string $text_direction The text direction. This is only useful internally, when WordPress
* is still loading and the site's locale is not set up yet. Accepts 'rtl'.
- * Default is the value of {@see is_rtl()}.
+ * Default is the value of is_rtl().
* }
*/
function wp_die( $message = '', $title = '', $args = array() ) {
if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) {
/**
- * Filter callback for killing WordPress execution for AJAX requests.
+ * Filters the callback for killing WordPress execution for Ajax requests.
*
* @since 3.4.0
*
$function = apply_filters( 'wp_die_ajax_handler', '_ajax_wp_die_handler' );
} elseif ( defined( 'XMLRPC_REQUEST' ) && XMLRPC_REQUEST ) {
/**
- * Filter callback for killing WordPress execution for XML-RPC requests.
+ * Filters the callback for killing WordPress execution for XML-RPC requests.
*
* @since 3.4.0
*
$function = apply_filters( 'wp_die_xmlrpc_handler', '_xmlrpc_wp_die_handler' );
} else {
/**
- * Filter callback for killing WordPress execution for all non-AJAX, non-XML-RPC requests.
+ * Filters the callback for killing WordPress execution for all non-Ajax, non-XML-RPC requests.
*
* @since 3.0.0
*
}
/**
- * Kill WordPress execution and display HTML message with error message.
+ * Kills WordPress execution and display HTML message with error message.
*
* This is the default handler for wp_die if you want a custom one for your
- * site then you can overload using the wp_die_handler filter in wp_die
+ * site then you can overload using the {@see 'wp_die_handler'} filter in wp_die().
*
* @since 3.0.0
* @access private
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="viewport" content="width=device-width">
+ <?php
+ if ( function_exists( 'wp_no_robots' ) ) {
+ wp_no_robots();
+ }
+ ?>
<title><?php echo $title ?></title>
<style type="text/css">
html {
body {
background: #fff;
color: #444;
- font-family: "Open Sans", sans-serif;
+ font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif;
margin: 2em auto;
padding: 1em 2em;
max-width: 700px;
border-bottom: 1px solid #dadada;
clear: both;
color: #666;
- font: 24px "Open Sans", sans-serif;
+ font-size: 24px;
margin: 30px 0 0 0;
padding: 0;
padding-bottom: 7px;
}
// Prepare the data for JSON serialization.
- $data = _wp_json_prepare_data( $data );
+ $args[0] = _wp_json_prepare_data( $data );
$json = @call_user_func_array( 'json_encode', $args );
/**
* Send a JSON response back to an Ajax request, indicating failure.
*
- * If the `$data` parameter is a {@see WP_Error} object, the errors
+ * If the `$data` parameter is a WP_Error object, the errors
* within the object are processed and output as an array of error
* codes and corresponding messages. All other types are output
* without further processing.
*
* @since 3.5.0
- * @since 4.1.0 The `$data` parameter is now processed if a {@see WP_Error}
- * object is passed in.
+ * @since 4.1.0 The `$data` parameter is now processed if a WP_Error object is passed in.
*
* @param mixed $data Data to encode as JSON, then print and die.
*/
wp_send_json( $response );
}
+/**
+ * Checks that a JSONP callback is a valid JavaScript callback.
+ *
+ * Only allows alphanumeric characters and the dot character in callback
+ * function names. This helps to mitigate XSS attacks caused by directly
+ * outputting user input.
+ *
+ * @since 4.6.0
+ *
+ * @param string $callback Supplied JSONP callback function.
+ * @return bool True if valid callback, otherwise false.
+ */
+function wp_check_jsonp_callback( $callback ) {
+ if ( ! is_string( $callback ) ) {
+ return false;
+ }
+
+ $jsonp_callback = preg_replace( '/[^\w\.]/', '', $callback, -1, $illegal_char_count );
+
+ return 0 === $illegal_char_count;
+}
+
/**
* Retrieve the WordPress home page URL.
*
* Fills in the 'directionality' setting, enables the 'directionality'
* plugin, and adds the 'ltr' button to 'toolbar1', formerly
* 'theme_advanced_buttons1' array keys. These keys are then returned
- * in the $input (TinyMCE settings) array.
+ * in the $mce_init (TinyMCE settings) array.
*
* @since 2.1.0
* @access private
*
- * @param array $input MCE settings array.
+ * @param array $mce_init MCE settings array.
* @return array Direction set for 'rtl', if needed by locale.
*/
-function _mce_set_direction( $input ) {
+function _mce_set_direction( $mce_init ) {
if ( is_rtl() ) {
- $input['directionality'] = 'rtl';
+ $mce_init['directionality'] = 'rtl';
+ $mce_init['rtl_ui'] = true;
- if ( ! empty( $input['plugins'] ) && strpos( $input['plugins'], 'directionality' ) === false ) {
- $input['plugins'] .= ',directionality';
+ if ( ! empty( $mce_init['plugins'] ) && strpos( $mce_init['plugins'], 'directionality' ) === false ) {
+ $mce_init['plugins'] .= ',directionality';
}
- if ( ! empty( $input['toolbar1'] ) && ! preg_match( '/\bltr\b/', $input['toolbar1'] ) ) {
- $input['toolbar1'] .= ',ltr';
+ if ( ! empty( $mce_init['toolbar1'] ) && ! preg_match( '/\bltr\b/', $mce_init['toolbar1'] ) ) {
+ $mce_init['toolbar1'] .= ',ltr';
}
}
- return $input;
+ return $mce_init;
}
':idea:' => "\xf0\x9f\x92\xa1",
':oops:' => "\xf0\x9f\x98\xb3",
':razz:' => "\xf0\x9f\x98\x9b",
- ':roll:' => 'rolleyes.png',
+ ':roll:' => "\xf0\x9f\x99\x84",
':wink:' => "\xf0\x9f\x98\x89",
':cry:' => "\xf0\x9f\x98\xa5",
':eek:' => "\xf0\x9f\x98\xae",
*/
function wp_maybe_load_widgets() {
/**
- * Filter whether to load the Widgets library.
+ * Filters whether to load the Widgets library.
*
* Passing a falsey value to the filter will effectively short-circuit
* the Widgets library from loading.
/**
* Mark a function as deprecated and inform when it has been used.
*
- * There is a hook deprecated_function_run that will be called that can be used
+ * There is a {@see 'hook deprecated_function_run'} that will be called that can be used
* to get the backtrace up to what file and function called the deprecated
* function.
*
- * The current behavior is to trigger a user error if WP_DEBUG is true.
+ * The current behavior is to trigger a user error if `WP_DEBUG` is true.
*
* This function is to be used in every function that is deprecated.
*
do_action( 'deprecated_function_run', $function, $replacement, $version );
/**
- * Filter whether to trigger an error for deprecated functions.
+ * Filters whether to trigger an error for deprecated functions.
*
* @since 2.5.0
*
do_action( 'deprecated_constructor_run', $class, $version, $parent_class );
/**
- * Filter whether to trigger an error for deprecated functions.
+ * Filters whether to trigger an error for deprecated functions.
*
* `WP_DEBUG` must be true in addition to the filter evaluating to true.
*
/**
* Mark a file as deprecated and inform when it has been used.
*
- * There is a hook deprecated_file_included that will be called that can be used
+ * There is a hook {@see 'deprecated_file_included'} that will be called that can be used
* to get the backtrace up to what file and function included the deprecated
* file.
*
- * The current behavior is to trigger a user error if WP_DEBUG is true.
+ * The current behavior is to trigger a user error if `WP_DEBUG` is true.
*
* This function is to be used in every file that is deprecated.
*
do_action( 'deprecated_file_included', $file, $replacement, $version, $message );
/**
- * Filter whether to trigger an error for deprecated files.
+ * Filters whether to trigger an error for deprecated files.
*
* @since 2.5.0
*
* For example:
*
* if ( ! empty( $deprecated ) ) {
- * _deprecated_argument( __FUNCTION__, '3.0' );
+ * _deprecated_argument( __FUNCTION__, '3.0.0' );
* }
*
*
do_action( 'deprecated_argument_run', $function, $message, $version );
/**
- * Filter whether to trigger an error for deprecated arguments.
+ * Filters whether to trigger an error for deprecated arguments.
*
* @since 3.0.0
*
}
}
+/**
+ * Marks a deprecated action or filter hook as deprecated and throws a notice.
+ *
+ * Use the {@see 'deprecated_hook_run'} action to get the backtrace describing where
+ * the deprecated hook was called.
+ *
+ * Default behavior is to trigger a user error if `WP_DEBUG` is true.
+ *
+ * This function is called by the do_action_deprecated() and apply_filters_deprecated()
+ * functions, and so generally does not need to be called directly.
+ *
+ * @since 4.6.0
+ * @access private
+ *
+ * @param string $hook The hook that was used.
+ * @param string $version The version of WordPress that deprecated the hook.
+ * @param string $replacement Optional. The hook that should have been used.
+ * @param string $message Optional. A message regarding the change.
+ */
+function _deprecated_hook( $hook, $version, $replacement = null, $message = null ) {
+ /**
+ * Fires when a deprecated hook is called.
+ *
+ * @since 4.6.0
+ *
+ * @param string $hook The hook that was called.
+ * @param string $replacement The hook that should be used as a replacement.
+ * @param string $version The version of WordPress that deprecated the argument used.
+ * @param string $message A message regarding the change.
+ */
+ do_action( 'deprecated_hook_run', $hook, $replacement, $version, $message );
+
+ /**
+ * Filters whether to trigger deprecated hook errors.
+ *
+ * @since 4.6.0
+ *
+ * @param bool $trigger Whether to trigger deprecated hook errors. Requires
+ * `WP_DEBUG` to be defined true.
+ */
+ if ( WP_DEBUG && apply_filters( 'deprecated_hook_trigger_error', true ) ) {
+ $message = empty( $message ) ? '' : ' ' . $message;
+ if ( ! is_null( $replacement ) ) {
+ trigger_error( sprintf( __( '%1$s is <strong>deprecated</strong> since version %2$s! Use %3$s instead.' ), $hook, $version, $replacement ) . $message );
+ } else {
+ trigger_error( sprintf( __( '%1$s is <strong>deprecated</strong> since version %2$s with no alternative available.' ), $hook, $version ) . $message );
+ }
+ }
+}
+
/**
* Mark something as being incorrectly called.
*
- * There is a hook doing_it_wrong_run that will be called that can be used
+ * There is a hook {@see 'doing_it_wrong_run'} that will be called that can be used
* to get the backtrace up to what file and function called the deprecated
* function.
*
- * The current behavior is to trigger a user error if WP_DEBUG is true.
+ * The current behavior is to trigger a user error if `WP_DEBUG` is true.
*
* @since 3.1.0
* @access private
do_action( 'doing_it_wrong_run', $function, $message, $version );
/**
- * Filter whether to trigger an error for _doing_it_wrong() calls.
+ * Filters whether to trigger an error for _doing_it_wrong() calls.
*
* @since 3.1.0
*
}
/**
- * Filter whether IIS 7+ supports pretty permalinks.
+ * Filters whether IIS 7+ supports pretty permalinks.
*
* @since 2.8.0
*
return 0;
}
-/**
- * Determine if SSL is used.
- *
- * @since 2.6.0
- *
- * @return bool True if SSL, false if not used.
- */
-function is_ssl() {
- if ( isset($_SERVER['HTTPS']) ) {
- if ( 'on' == strtolower($_SERVER['HTTPS']) )
- return true;
- if ( '1' == $_SERVER['HTTPS'] )
- return true;
- } elseif ( isset($_SERVER['SERVER_PORT']) && ( '443' == $_SERVER['SERVER_PORT'] ) ) {
- return true;
- }
- return false;
-}
-
/**
* Whether to force SSL used for the Administration Screens.
*
* @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
* running Multisite.
*/
return 1;
}
+ $current_site = get_current_site();
+
if ( defined( 'PRIMARY_NETWORK_ID' ) ) {
$main_network_id = PRIMARY_NETWORK_ID;
- } elseif ( 1 === (int) get_current_site()->id ) {
+ } elseif ( isset( $current_site->id ) && 1 === (int) $current_site->id ) {
// If the current network has an ID of 1, assume it is the main network.
$main_network_id = 1;
} else {
}
/**
- * Filter the main network ID.
+ * Filters the main network ID.
*
* @since 4.3.0
*
if ( is_null( $global_terms ) ) {
/**
- * Filter whether global terms are enabled.
+ * Filters whether global terms are enabled.
*
* Passing a non-null value to the filter will effectively short-circuit the function,
* returning the value of the 'global_terms_enabled' site option instead.
*
* @param string $file Path to the file.
* @param array $default_headers List of headers, in the format array('HeaderKey' => 'Header Name').
- * @param string $context Optional. If specified adds filter hook "extra_{$context}_headers".
+ * @param string $context Optional. If specified adds filter hook {@see 'extra_$context_headers'}.
* Default empty.
* @return array Array of file headers in `HeaderKey => Header Value` format.
*/
$file_data = str_replace( "\r", "\n", $file_data );
/**
- * Filter extra file headers by context.
+ * Filters extra file headers by context.
*
* The dynamic portion of the hook name, `$context`, refers to
* the context where extra headers might be loaded.
*
* @since 3.0.0
*
- * @see http://blogs.msdn.com/ie/archive/2008/07/02/ie8-security-part-v-comprehensive-protection.aspx
- * @see http://src.chromium.org/viewvc/chrome?view=rev&revision=6985
+ * @see https://blogs.msdn.com/ie/archive/2008/07/02/ie8-security-part-v-comprehensive-protection.aspx
+ * @see https://src.chromium.org/viewvc/chrome?view=rev&revision=6985
*/
function send_nosniff_header() {
@header( 'X-Content-Type-Options: nosniff' );
$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.
+ * Filters the list of protocols allowed in HTML attributes.
*
* @since 3.0.0
*
*/
function wp_checkdate( $month, $day, $year, $source_date ) {
/**
- * Filter whether the given date is valid for the Gregorian calendar.
+ * Filters whether the given date is valid for the Gregorian calendar.
*
* @since 3.5.0
*
* Can be disabled with remove_action( 'admin_enqueue_scripts', 'wp_auth_check_load' );
*
* This is disabled for certain screens where a login screen could cause an
- * inconvenient interruption. A filter called wp_auth_check_load can be used
+ * inconvenient interruption. A filter called {@see 'wp_auth_check_load'} can be used
* for fine-grained control.
*
* @since 3.6.0
$show = ! in_array( $screen->id, $hidden );
/**
- * Filter whether to load the authentication check.
+ * Filters whether to load the authentication check.
*
* Passing a falsey value to the filter will effectively short-circuit
* loading the authentication check.
$same_domain = ( strpos( $login_url, $current_domain ) === 0 );
/**
- * Filter whether the authentication check originated at the same domain.
+ * Filters whether the authentication check originated at the same domain.
*
* @since 3.6.0
*
*/
function wp_delete_file( $file ) {
/**
- * Filter the path of the file to delete.
+ * Filters the path of the file to delete.
*
* @since 2.1.0
*
// Strip timezone information
return preg_replace( '/(?:Z|[+-]\d{2}(?::\d{2})?)$/', '', $formatted );
}
+
+/**
+ * Attempts to raise the PHP memory limit for memory intensive processes.
+ *
+ * Only allows raising the existing limit and prevents lowering it.
+ *
+ * @since 4.6.0
+ *
+ * @param string $context Optional. Context in which the function is called. Accepts either 'admin',
+ * 'image', or an arbitrary other context. If an arbitrary context is passed,
+ * the similarly arbitrary {@see '{$context}_memory_limit'} filter will be
+ * invoked. Default 'admin'.
+ * @return bool|int|string The limit that was set or false on failure.
+ */
+function wp_raise_memory_limit( $context = 'admin' ) {
+ // Exit early if the limit cannot be changed.
+ if ( false === wp_is_ini_value_changeable( 'memory_limit' ) ) {
+ return false;
+ }
+
+ $current_limit = @ini_get( 'memory_limit' );
+ $current_limit_int = wp_convert_hr_to_bytes( $current_limit );
+
+ if ( -1 === $current_limit_int ) {
+ return false;
+ }
+
+ $wp_max_limit = WP_MAX_MEMORY_LIMIT;
+ $wp_max_limit_int = wp_convert_hr_to_bytes( $wp_max_limit );
+ $filtered_limit = $wp_max_limit;
+
+ switch ( $context ) {
+ case 'admin':
+ /**
+ * Filters the maximum memory limit available for administration screens.
+ *
+ * This only applies to administrators, who may require more memory for tasks
+ * like updates. Memory limits when processing images (uploaded or edited by
+ * users of any role) are handled separately.
+ *
+ * The `WP_MAX_MEMORY_LIMIT` constant specifically defines the maximum memory
+ * limit available when in the administration back end. The default is 256M
+ * (256 megabytes of memory) or the original `memory_limit` php.ini value if
+ * this is higher.
+ *
+ * @since 3.0.0
+ * @since 4.6.0 The default now takes the original `memory_limit` into account.
+ *
+ * @param int|string $filtered_limit The maximum WordPress memory limit. Accepts an integer
+ * (bytes), or a shorthand string notation, such as '256M'.
+ */
+ $filtered_limit = apply_filters( 'admin_memory_limit', $filtered_limit );
+ break;
+
+ case 'image':
+ /**
+ * Filters the memory limit allocated for image manipulation.
+ *
+ * @since 3.5.0
+ * @since 4.6.0 The default now takes the original `memory_limit` into account.
+ *
+ * @param int|string $filtered_limit Maximum memory limit to allocate for images.
+ * Default `WP_MAX_MEMORY_LIMIT` or the original
+ * php.ini `memory_limit`, whichever is higher.
+ * Accepts an integer (bytes), or a shorthand string
+ * notation, such as '256M'.
+ */
+ $filtered_limit = apply_filters( 'image_memory_limit', $filtered_limit );
+ break;
+
+ default:
+ /**
+ * Filters the memory limit allocated for arbitrary contexts.
+ *
+ * The dynamic portion of the hook name, `$context`, refers to an arbitrary
+ * context passed on calling the function. This allows for plugins to define
+ * their own contexts for raising the memory limit.
+ *
+ * @since 4.6.0
+ *
+ * @param int|string $filtered_limit Maximum memory limit to allocate for images.
+ * Default '256M' or the original php.ini `memory_limit`,
+ * whichever is higher. Accepts an integer (bytes), or a
+ * shorthand string notation, such as '256M'.
+ */
+ $filtered_limit = apply_filters( "{$context}_memory_limit", $filtered_limit );
+ break;
+ }
+
+ $filtered_limit_int = wp_convert_hr_to_bytes( $filtered_limit );
+
+ if ( -1 === $filtered_limit_int || ( $filtered_limit_int > $wp_max_limit_int && $filtered_limit_int > $current_limit_int ) ) {
+ if ( false !== @ini_set( 'memory_limit', $filtered_limit ) ) {
+ return $filtered_limit;
+ } else {
+ return false;
+ }
+ } elseif ( -1 === $wp_max_limit_int || $wp_max_limit_int > $current_limit_int ) {
+ if ( false !== @ini_set( 'memory_limit', $wp_max_limit ) ) {
+ return $wp_max_limit;
+ } else {
+ return false;
+ }
+ }
+
+ return false;
+}