X-Git-Url: https://scripts.mit.edu/gitweb/autoinstalls/wordpress.git/blobdiff_plain/784f914b1e4b1c62d6657e86397c2e83bcee4295..refs/tags/wordpress-4.7.1:/wp-includes/functions.php diff --git a/wp-includes/functions.php b/wp-includes/functions.php index 0e720ee1..01045f03 100644 --- a/wp-includes/functions.php +++ b/wp-includes/functions.php @@ -91,13 +91,7 @@ function date_i18n( $dateformatstring, $unixtimestamp = false, $gmt = false ) { $i = $unixtimestamp; if ( false === $i ) { - if ( ! $gmt ) - $i = current_time( 'timestamp' ); - else - $i = time(); - // we should not let date() interfere with our - // specially computed timestamp - $gmt = true; + $i = current_time( 'timestamp', $gmt ); } /* @@ -106,15 +100,13 @@ function date_i18n( $dateformatstring, $unixtimestamp = false, $gmt = false ) { */ $req_format = $dateformatstring; - $datefunc = $gmt? 'gmdate' : 'date'; - if ( ( !empty( $wp_locale->month ) ) && ( !empty( $wp_locale->weekday ) ) ) { - $datemonth = $wp_locale->get_month( $datefunc( 'm', $i ) ); + $datemonth = $wp_locale->get_month( date( 'm', $i ) ); $datemonth_abbrev = $wp_locale->get_month_abbrev( $datemonth ); - $dateweekday = $wp_locale->get_weekday( $datefunc( 'w', $i ) ); + $dateweekday = $wp_locale->get_weekday( date( 'w', $i ) ); $dateweekday_abbrev = $wp_locale->get_weekday_abbrev( $dateweekday ); - $datemeridiem = $wp_locale->get_meridiem( $datefunc( 'a', $i ) ); - $datemeridiem_capital = $wp_locale->get_meridiem( $datefunc( 'A', $i ) ); + $datemeridiem = $wp_locale->get_meridiem( date( 'a', $i ) ); + $datemeridiem_capital = $wp_locale->get_meridiem( date( 'A', $i ) ); $dateformatstring = ' '.$dateformatstring; $dateformatstring = preg_replace( "/([^\\\])D/", "\\1" . backslashit( $dateweekday_abbrev ), $dateformatstring ); $dateformatstring = preg_replace( "/([^\\\])F/", "\\1" . backslashit( $datemonth ), $dateformatstring ); @@ -142,10 +134,10 @@ function date_i18n( $dateformatstring, $unixtimestamp = false, $gmt = false ) { } } } - $j = @$datefunc( $dateformatstring, $i ); + $j = @date( $dateformatstring, $i ); /** - * Filter the date formatted based on the locale. + * Filters the date formatted based on the locale. * * @since 2.8.0 * @@ -182,14 +174,19 @@ function wp_maybe_decline_date( $date ) { */ 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 ); } } @@ -225,7 +222,7 @@ function number_format_i18n( $number, $decimals = 0 ) { } /** - * Filter the number formatted based on the locale. + * Filters the number formatted based on the locale. * * @since 2.8.0 * @@ -237,7 +234,7 @@ function number_format_i18n( $number, $decimals = 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. * @@ -259,10 +256,14 @@ function size_format( $bytes, $decimals = 0 ) { '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; @@ -583,7 +584,7 @@ function do_enclose( $content, $post_ID ) { } /** - * 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. @@ -637,7 +638,7 @@ function do_enclose( $content, $post_ID ) { */ 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 ); @@ -675,7 +676,7 @@ function is_new_day() { * @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. @@ -691,7 +692,7 @@ function build_query( $data ) { * @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. @@ -865,6 +866,8 @@ function wp_removable_query_args() { 'disabled', 'enabled', 'error', + 'hotkeys_highlight_first', + 'hotkeys_highlight_last', 'locked', 'message', 'same', @@ -881,7 +884,7 @@ function wp_removable_query_args() { ); /** - * Filter the list of query variables to remove. + * Filters the list of query variables to remove. * * @since 4.2.0 * @@ -1069,7 +1072,7 @@ function status_header( $code, $description = '' ) { if ( function_exists( 'apply_filters' ) ) /** - * Filter an HTTP status header. + * Filters an HTTP status header. * * @since 2.2.0 * @@ -1097,12 +1100,11 @@ function wp_get_nocache_headers() { $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 * @@ -1113,7 +1115,6 @@ function wp_get_nocache_headers() { * * @type string $Expires Expires header. * @type string $Cache-Control Cache-Control header. - * @type string $Pragma Pragma header. * } */ $headers = (array) apply_filters( 'nocache_headers', $headers ); @@ -1212,6 +1213,18 @@ function bool_from_yn( $yn ) { function do_feed() { global $wp_query; + // Determine if we are looking at the main comment feed + $is_main_comments_feed = ( $wp_query->is_comment_feed() && ! $wp_query->is_singular() ); + + /* + * Check the queried object for the existence of posts if it is not a feed for an archive, + * search result, or main comments. By checking for the absense of posts we can prevent rendering the feed + * templates at invalid endpoints. e.g.) /wp-content/plugins/feed/ + */ + if ( ! $wp_query->have_posts() && ! ( $wp_query->is_archive() || $wp_query->is_search() || $is_main_comments_feed ) ) { + wp_die( __( 'ERROR: This is not a valid feed.' ), '', array( 'response' => 404 ) ); + } + $feed = get_query_var( 'feed' ); // Remove the pad, if present. @@ -1323,7 +1336,7 @@ function do_robots() { } /** - * Filter the robots.txt output. + * Filters the robots.txt output. * * @since 3.0.0 * @@ -1402,7 +1415,12 @@ function is_blog_installed() { wp_load_translations_early(); // Die with a DB error. - $wpdb->error = sprintf( __( 'One or more database tables are unavailable. The database may need to be repaired.' ), 'maint/repair.php?referrer=is_blog_installed' ); + $wpdb->error = sprintf( + /* translators: %s: database repair URL */ + __( 'One or more database tables are unavailable. The database may need to be repaired.' ), + 'maint/repair.php?referrer=is_blog_installed' + ); + dead_db(); } @@ -1536,7 +1554,7 @@ function wp_get_referer() { /** * 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 * @@ -1777,8 +1795,8 @@ function wp_is_writable( $path ) { * * @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. @@ -1849,12 +1867,13 @@ function wp_get_upload_dir() { * @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 ); @@ -1863,7 +1882,7 @@ function wp_upload_dir( $time = null, $create_dir = true, $refresh_cache = false } /** - * Filter the uploads directory data. + * Filters the uploads directory data. * * @since 2.0.0 * @@ -1874,13 +1893,10 @@ function wp_upload_dir( $time = null, $create_dir = true, $refresh_cache = false 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']; @@ -1888,11 +1904,14 @@ function wp_upload_dir( $time = null, $create_dir = true, $refresh_cache = false $error_path = basename( $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 ); + $uploads['error'] = sprintf( + /* translators: %s: directory path */ + __( 'Unable to create directory %s. Is its parent directory writable by the server?' ), + esc_html( $error_path ) + ); } + + $tested_paths[ $path ] = $uploads['error']; } } @@ -2028,13 +2047,16 @@ function wp_unique_filename( $dir, $filename, $unique_filename_callback = null ) $filename = sanitize_file_name($filename); // Separate the filename into a name and extension. - $info = pathinfo($filename); - $ext = !empty($info['extension']) ? '.' . $info['extension'] : ''; - $name = basename($filename, $ext); + $ext = pathinfo( $filename, PATHINFO_EXTENSION ); + $name = pathinfo( $filename, PATHINFO_BASENAME ); + if ( $ext ) { + $ext = '.' . $ext; + } // Edge case: if file is named '.ext', treat as an empty name. - if ( $name === $ext ) + if ( $name === $ext ) { $name = ''; + } /* * Increment the file number until we have a unique file to save in $dir. @@ -2059,7 +2081,7 @@ function wp_unique_filename( $dir, $filename, $unique_filename_callback = null ) } /** - * Filter the result when generating a unique file name. + * Filters the result when generating a unique file name. * * @since 4.5.0 * @@ -2109,7 +2131,7 @@ function wp_unique_filename( $dir, $filename, $unique_filename_callback = null ) */ 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' ) ); @@ -2124,7 +2146,7 @@ function wp_upload_bits( $name, $deprecated, $bits, $time = null ) { 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. @@ -2148,7 +2170,11 @@ function wp_upload_bits( $name, $deprecated, $bits, $time = null ) { else $error_path = basename( $upload['basedir'] ) . $upload['subdir']; - $message = sprintf( __( 'Unable to create directory %s. Is its parent directory writable by the server?' ), $error_path ); + $message = sprintf( + /* translators: %s: directory path */ + __( 'Unable to create directory %s. Is its parent directory writable by the server?' ), + $error_path + ); return array( 'error' => $message ); } @@ -2185,28 +2211,7 @@ function wp_upload_bits( $name, $deprecated, $bits, $time = null ) { 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; @@ -2249,7 +2254,7 @@ function wp_check_filetype( $filename, $mimes = null ) { * If it's determined that the extension does not match the file's real type, * then the "proper_filename" value will be set with a proper filename and extension. * - * Currently this function only supports validating images known to getimagesize(). + * Currently this function only supports renaming images validated via wp_get_image_mime(). * * @since 3.0.0 * @@ -2273,16 +2278,17 @@ function wp_check_filetype_and_ext( $file, $filename, $mimes = null ) { return compact( 'ext', 'type', 'proper_filename' ); } - // We're able to validate images using GD - if ( $type && 0 === strpos( $type, 'image/' ) && function_exists('getimagesize') ) { + // Validate image types. + if ( $type && 0 === strpos( $type, 'image/' ) ) { // Attempt to figure out what type of image it actually is - $imgstats = @getimagesize( $file ); + $real_mime = wp_get_image_mime( $file ); - // 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 ) { + if ( ! $real_mime ) { + $type = $ext = false; + } elseif ( $real_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 * @@ -2297,10 +2303,10 @@ function wp_check_filetype_and_ext( $file, $filename, $mimes = null ) { ) ); // Replace whatever is after the last period in the filename with the correct extension - if ( ! empty( $mime_to_ext[ $imgstats['mime'] ] ) ) { + if ( ! empty( $mime_to_ext[ $real_mime ] ) ) { $filename_parts = explode( '.', $filename ); array_pop( $filename_parts ); - $filename_parts[] = $mime_to_ext[ $imgstats['mime'] ]; + $filename_parts[] = $mime_to_ext[ $real_mime ]; $new_filename = implode( '.', $filename_parts ); if ( $new_filename != $filename ) { @@ -2310,12 +2316,24 @@ function wp_check_filetype_and_ext( $file, $filename, $mimes = null ) { $wp_filetype = wp_check_filetype( $new_filename, $mimes ); $ext = $wp_filetype['ext']; $type = $wp_filetype['type']; + } else { + $type = $ext = false; } } + } elseif ( function_exists( 'finfo_file' ) ) { + // Use finfo_file if available to validate non-image files. + $finfo = finfo_open( FILEINFO_MIME_TYPE ); + $real_mime = finfo_file( $finfo, $file ); + finfo_close( $finfo ); + + // If the extension does not match the file's real type, return false. + if ( $real_mime !== $type ) { + $type = $ext = false; + } } /** - * Filter the "real" file type of the given file. + * Filters the "real" file type of the given file. * * @since 3.0.0 * @@ -2329,6 +2347,38 @@ function wp_check_filetype_and_ext( $file, $filename, $mimes = null ) { return apply_filters( 'wp_check_filetype_and_ext', compact( 'ext', 'type', 'proper_filename' ), $file, $filename, $mimes ); } +/** + * Returns the real mime type of an image file. + * + * This depends on exif_imagetype() or getimagesize() to determine real mime types. + * + * @since 4.7.1 + * + * @param string $file Full path to the file. + * @return string|false The actual mime type or false if the type cannot be determined. + */ +function wp_get_image_mime( $file ) { + /* + * Use exif_imagetype() to check the mimetype if available or fall back to + * getimagesize() if exif isn't avaialbe. If either function throws an Exception + * we assume the file could not be validated. + */ + try { + if ( is_callable( 'exif_imagetype' ) ) { + $mime = image_type_to_mime_type( exif_imagetype( $file ) ); + } elseif ( function_exists( 'getimagesize' ) ) { + $imagesize = getimagesize( $file ); + $mime = ( isset( $imagesize['mime'] ) ) ? $imagesize['mime'] : false; + } else { + $mime = false; + } + } catch ( Exception $e ) { + $mime = false; + } + + return $mime; +} + /** * Retrieve list of mime types and file extensions. * @@ -2339,10 +2389,10 @@ function wp_check_filetype_and_ext( $file, $filename, $mimes = null ) { */ 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 * @@ -2451,6 +2501,39 @@ function wp_get_mime_types() { '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. * @@ -2471,7 +2554,7 @@ function get_allowed_mime_types( $user = null ) { 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 * @@ -2495,13 +2578,27 @@ function get_allowed_mime_types( $user = null ) { */ function wp_nonce_ays( $action ) { if ( 'log-out' == $action ) { - $html = sprintf( __( 'You are attempting to log out of %s' ), get_bloginfo( 'name' ) ) . '

'; + $html = sprintf( + /* translators: %s: site name */ + __( 'You are attempting to log out of %s' ), + get_bloginfo( 'name' ) + ); + $html .= '

'; $redirect_to = isset( $_REQUEST['redirect_to'] ) ? $_REQUEST['redirect_to'] : ''; - $html .= sprintf( __( "Do you really want to log out?"), wp_logout_url( $redirect_to ) ); + $html .= sprintf( + /* translators: %s: logout URL */ + __( 'Do you really want to log out?' ), + wp_logout_url( $redirect_to ) + ); } else { $html = __( 'Are you sure you want to do this?' ); - if ( wp_get_referer() ) - $html .= "

" . __( 'Please try again.' ) . ""; + if ( wp_get_referer() ) { + $html .= '

'; + $html .= sprintf( '%s', + esc_url( remove_query_arg( 'updated', wp_get_referer() ) ), + __( 'Please try again.' ) + ); + } } wp_die( $html, __( 'WordPress Failure Notice' ), 403 ); @@ -2523,8 +2620,9 @@ function wp_nonce_ays( $action ) { * @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, - * the error's messages are used. Default empty. + * @param string|WP_Error $message Optional. Error message. If this is a WP_Error object, + * and not an Ajax or XML-RPC request, 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. * If `$title` is an integer, then it is treated as the response @@ -2533,11 +2631,11 @@ function wp_nonce_ays( $action ) { * Optional. Arguments to control behavior. If `$args` is an integer, then it is treated * as the response code. Default empty array. * - * @type int $response The HTTP response code. Default 500. + * @type int $response The HTTP response code. Default 200 for Ajax requests, 500 otherwise. * @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() ) { @@ -2549,9 +2647,9 @@ function wp_die( $message = '', $title = '', $args = array() ) { $title = ''; } - if ( defined( 'DOING_AJAX' ) && DOING_AJAX ) { + if ( wp_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 * @@ -2560,7 +2658,7 @@ function wp_die( $message = '', $title = '', $args = array() ) { $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 * @@ -2569,7 +2667,7 @@ function wp_die( $message = '', $title = '', $args = array() ) { $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 * @@ -2582,17 +2680,17 @@ function wp_die( $message = '', $title = '', $args = array() ) { } /** - * 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 * - * @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 string|WP_Error $message Error message or WP_Error object. + * @param string $title Optional. Error title. Default empty. + * @param string|array $args Optional. Arguments to control behavior. Default empty array. */ function _default_wp_die_handler( $message, $title = '', $args = array() ) { $defaults = array( 'response' => 500 ); @@ -2650,6 +2748,11 @@ function _default_wp_die_handler( $message, $title = '', $args = array() ) { + <?php echo $title ?>