', esc_url( $icon_32 ) );
}
$icon_192 = get_site_icon_url( 192 );
if ( $icon_192 ) {
$meta_tags[] = sprintf( '', esc_url( $icon_192 ) );
}
$icon_180 = get_site_icon_url( 180 );
if ( $icon_180 ) {
$meta_tags[] = sprintf( '', esc_url( $icon_180 ) );
}
$icon_270 = get_site_icon_url( 270 );
if ( $icon_270 ) {
$meta_tags[] = sprintf( '', esc_url( $icon_270 ) );
}
$meta_tags = apply_filters( 'site_icon_meta_tags', $meta_tags );
$meta_tags = array_filter( $meta_tags );
foreach ( $meta_tags as $meta_tag ) {
echo "$meta_tag\n";
}
}
function wp_resource_hints() {
$hints = array(
'dns-prefetch' => wp_dependencies_unique_hosts(),
'preconnect' => array(),
'prefetch' => array(),
'prerender' => array(),
);
foreach ( $hints as $relation_type => $urls ) {
$unique_urls = array();
$urls = apply_filters( 'wp_resource_hints', $urls, $relation_type );
foreach ( $urls as $key => $url ) {
$atts = array();
if ( is_array( $url ) ) {
if ( isset( $url['href'] ) ) {
$atts = $url;
$url = $url['href'];
} else {
continue;
}
}
$url = esc_url( $url, array( 'http', 'https' ) );
if ( ! $url ) {
continue;
}
if ( isset( $unique_urls[ $url ] ) ) {
continue;
}
if ( in_array( $relation_type, array( 'preconnect', 'dns-prefetch' ), true ) ) {
$parsed = wp_parse_url( $url );
if ( empty( $parsed['host'] ) ) {
continue;
}
if ( 'preconnect' === $relation_type && ! empty( $parsed['scheme'] ) ) {
$url = $parsed['scheme'] . '://' . $parsed['host'];
} else {
// Use protocol-relative URLs for dns-prefetch or if scheme is missing.
$url = '//' . $parsed['host'];
}
}
$atts['rel'] = $relation_type;
$atts['href'] = $url;
$unique_urls[ $url ] = $atts;
}
foreach ( $unique_urls as $atts ) {
$html = '';
foreach ( $atts as $attr => $value ) {
if ( ! is_scalar( $value )
|| ( ! in_array( $attr, array( 'as', 'crossorigin', 'href', 'pr', 'rel', 'type' ), true ) && ! is_numeric( $attr ) )
) {
continue;
}
$value = ( 'href' === $attr ) ? esc_url( $value ) : esc_attr( $value );
if ( ! is_string( $attr ) ) {
$html .= " $value";
} else {
$html .= " $attr='$value'";
}
}
$html = trim( $html );
echo "\n";
}
}
}
function wp_preload_resources() {
$preload_resources = apply_filters( 'wp_preload_resources', array() );
if ( ! is_array( $preload_resources ) ) {
return;
}
$unique_resources = array();
// Parse the complete resource list and extract unique resources.
foreach ( $preload_resources as $resource ) {
if ( ! is_array( $resource ) ) {
continue;
}
$attributes = $resource;
if ( isset( $resource['href'] ) ) {
$href = $resource['href'];
if ( isset( $unique_resources[ $href ] ) ) {
continue;
}
$unique_resources[ $href ] = $attributes;
// Media can use imagesrcset and not href.
} elseif ( ( 'image' === $resource['as'] ) &&
( isset( $resource['imagesrcset'] ) || isset( $resource['imagesizes'] ) )
) {
if ( isset( $unique_resources[ $resource['imagesrcset'] ] ) ) {
continue;
}
$unique_resources[ $resource['imagesrcset'] ] = $attributes;
} else {
continue;
}
}
// Build and output the HTML for each unique resource.
foreach ( $unique_resources as $unique_resource ) {
$html = '';
foreach ( $unique_resource as $resource_key => $resource_value ) {
if ( ! is_scalar( $resource_value ) ) {
continue;
}
// Ignore non-supported attributes.
$non_supported_attributes = array( 'as', 'crossorigin', 'href', 'imagesrcset', 'imagesizes', 'type', 'media', 'fetchpriority' );
if ( ! in_array( $resource_key, $non_supported_attributes, true ) && ! is_numeric( $resource_key ) ) {
continue;
}
// imagesrcset only usable when preloading image, ignore otherwise.
if ( ( 'imagesrcset' === $resource_key ) && ( ! isset( $unique_resource['as'] ) || ( 'image' !== $unique_resource['as'] ) ) ) {
continue;
}
// imagesizes only usable when preloading image and imagesrcset present, ignore otherwise.
if ( ( 'imagesizes' === $resource_key ) &&
( ! isset( $unique_resource['as'] ) || ( 'image' !== $unique_resource['as'] ) || ! isset( $unique_resource['imagesrcset'] ) )
) {
continue;
}
$resource_value = ( 'href' === $resource_key ) ? esc_url( $resource_value, array( 'http', 'https' ) ) : esc_attr( $resource_value );
if ( ! is_string( $resource_key ) ) {
$html .= " $resource_value";
} else {
$html .= " $resource_key='$resource_value'";
}
}
$html = trim( $html );
printf( "\n", $html );
}
}
function wp_dependencies_unique_hosts() {
global $wp_scripts, $wp_styles;
$unique_hosts = array();
foreach ( array( $wp_scripts, $wp_styles ) as $dependencies ) {
if ( $dependencies instanceof WP_Dependencies && ! empty( $dependencies->queue ) ) {
foreach ( $dependencies->queue as $handle ) {
if ( ! isset( $dependencies->registered[ $handle ] ) ) {
continue;
}
/* @var _WP_Dependency $dependency */
$dependency = $dependencies->registered[ $handle ];
$parsed = wp_parse_url( $dependency->src );
if ( ! empty( $parsed['host'] )
&& ! in_array( $parsed['host'], $unique_hosts, true ) && $parsed['host'] !== $_SERVER['SERVER_NAME']
) {
$unique_hosts[] = $parsed['host'];
}
}
}
}
return $unique_hosts;
}
function user_can_richedit() {
global $wp_rich_edit, $is_gecko, $is_opera, $is_safari, $is_chrome, $is_IE, $is_edge;
if ( ! isset( $wp_rich_edit ) ) {
$wp_rich_edit = false;
if ( 'true' === get_user_option( 'rich_editing' ) || ! is_user_logged_in() ) { // Default to 'true' for logged out users.
if ( $is_safari ) {
$wp_rich_edit = ! wp_is_mobile() || ( preg_match( '!AppleWebKit/(\d+)!', $_SERVER['HTTP_USER_AGENT'], $match ) && (int) $match[1] >= 534 );
} elseif ( $is_IE ) {
$wp_rich_edit = str_contains( $_SERVER['HTTP_USER_AGENT'], 'Trident/7.0;' );
} elseif ( $is_gecko || $is_chrome || $is_edge || ( $is_opera && ! wp_is_mobile() ) ) {
$wp_rich_edit = true;
}
}
}
return apply_filters( 'user_can_richedit', $wp_rich_edit );
}
function wp_default_editor() {
$r = user_can_richedit() ? 'tinymce' : 'html'; // Defaults.
if ( wp_get_current_user() ) { // Look for cookie.
$ed = get_user_setting( 'editor', 'tinymce' );
$r = ( in_array( $ed, array( 'tinymce', 'html', 'test' ), true ) ) ? $ed : $r;
}
return apply_filters( 'wp_default_editor', $r );
}
function wp_editor( $content, $editor_id, $settings = array() ) {
if ( ! class_exists( '_WP_Editors', false ) ) {
require ABSPATH . WPINC . '/class-wp-editor.php';
}
_WP_Editors::editor( $content, $editor_id, $settings );
}
function wp_enqueue_editor() {
if ( ! class_exists( '_WP_Editors', false ) ) {
require ABSPATH . WPINC . '/class-wp-editor.php';
}
_WP_Editors::enqueue_default_editor();
}
function wp_enqueue_code_editor( $args ) {
if ( is_user_logged_in() && 'false' === wp_get_current_user()->syntax_highlighting ) {
return false;
}
$settings = wp_get_code_editor_settings( $args );
if ( empty( $settings ) || empty( $settings['codemirror'] ) ) {
return false;
}
wp_enqueue_script( 'code-editor' );
wp_enqueue_style( 'code-editor' );
if ( isset( $settings['codemirror']['mode'] ) ) {
$mode = $settings['codemirror']['mode'];
if ( is_string( $mode ) ) {
$mode = array(
'name' => $mode,
);
}
if ( ! empty( $settings['codemirror']['lint'] ) ) {
switch ( $mode['name'] ) {
case 'css':
case 'text/css':
case 'text/x-scss':
case 'text/x-less':
wp_enqueue_script( 'csslint' );
break;
case 'htmlmixed':
case 'text/html':
case 'php':
case 'application/x-httpd-php':
case 'text/x-php':
wp_enqueue_script( 'htmlhint' );
wp_enqueue_script( 'csslint' );
wp_enqueue_script( 'jshint' );
if ( ! current_user_can( 'unfiltered_html' ) ) {
wp_enqueue_script( 'htmlhint-kses' );
}
break;
case 'javascript':
case 'application/ecmascript':
case 'application/json':
case 'application/javascript':
case 'application/ld+json':
case 'text/typescript':
case 'application/typescript':
wp_enqueue_script( 'jshint' );
wp_enqueue_script( 'jsonlint' );
break;
}
}
}
wp_add_inline_script( 'code-editor', sprintf( 'jQuery.extend( wp.codeEditor.defaultSettings, %s );', wp_json_encode( $settings ) ) );
do_action( 'wp_enqueue_code_editor', $settings );
return $settings;
}
function wp_get_code_editor_settings( $args ) {
$settings = array(
'codemirror' => array(
'indentUnit' => 4,
'indentWithTabs' => true,
'inputStyle' => 'contenteditable',
'lineNumbers' => true,
'lineWrapping' => true,
'styleActiveLine' => true,
'continueComments' => true,
'extraKeys' => array(
'Ctrl-Space' => 'autocomplete',
'Ctrl-/' => 'toggleComment',
'Cmd-/' => 'toggleComment',
'Alt-F' => 'findPersistent',
'Ctrl-F' => 'findPersistent',
'Cmd-F' => 'findPersistent',
),
'direction' => 'ltr', // Code is shown in LTR even in RTL languages.
'gutters' => array(),
),
'csslint' => array(
'errors' => true, // Parsing errors.
'box-model' => true,
'display-property-grouping' => true,
'duplicate-properties' => true,
'known-properties' => true,
'outline-none' => true,
),
'jshint' => array(
// The following are copied from \n\t
\n";
break;
default:
$r = implode( "\n", $page_links );
break;
}
$r = apply_filters( 'paginate_links_output', $r, $args );
return $r;
}
function wp_admin_css_color( $key, $name, $url, $colors = array(), $icons = array() ) {
global $_wp_admin_css_colors;
if ( ! isset( $_wp_admin_css_colors ) ) {
$_wp_admin_css_colors = array();
}
$_wp_admin_css_colors[ $key ] = (object) array(
'name' => $name,
'url' => $url,
'colors' => $colors,
'icon_colors' => $icons,
);
}
function register_admin_color_schemes() {
$suffix = is_rtl() ? '-rtl' : '';
$suffix .= SCRIPT_DEBUG ? '' : '.min';
wp_admin_css_color(
'fresh',
_x( 'Default', 'admin color scheme' ),
false,
array( '#1d2327', '#2c3338', '#2271b1', '#72aee6' ),
array(
'base' => '#a7aaad',
'focus' => '#72aee6',
'current' => '#fff',
)
);
wp_admin_css_color(
'light',
_x( 'Light', 'admin color scheme' ),
admin_url( "css/colors/light/colors$suffix.css" ),
array( '#e5e5e5', '#999', '#d64e07', '#04a4cc' ),
array(
'base' => '#999',
'focus' => '#ccc',
'current' => '#ccc',
)
);
wp_admin_css_color(
'modern',
_x( 'Modern', 'admin color scheme' ),
admin_url( "css/colors/modern/colors$suffix.css" ),
array( '#1e1e1e', '#3858e9', '#7b90ff' ),
array(
'base' => '#f3f1f1',
'focus' => '#fff',
'current' => '#fff',
)
);
wp_admin_css_color(
'blue',
_x( 'Blue', 'admin color scheme' ),
admin_url( "css/colors/blue/colors$suffix.css" ),
array( '#096484', '#4796b3', '#52accc', '#74B6CE' ),
array(
'base' => '#e5f8ff',
'focus' => '#fff',
'current' => '#fff',
)
);
wp_admin_css_color(
'midnight',
_x( 'Midnight', 'admin color scheme' ),
admin_url( "css/colors/midnight/colors$suffix.css" ),
array( '#25282b', '#363b3f', '#69a8bb', '#e14d43' ),
array(
'base' => '#f1f2f3',
'focus' => '#fff',
'current' => '#fff',
)
);
wp_admin_css_color(
'sunrise',
_x( 'Sunrise', 'admin color scheme' ),
admin_url( "css/colors/sunrise/colors$suffix.css" ),
array( '#b43c38', '#cf4944', '#dd823b', '#ccaf0b' ),
array(
'base' => '#f3f1f1',
'focus' => '#fff',
'current' => '#fff',
)
);
wp_admin_css_color(
'ectoplasm',
_x( 'Ectoplasm', 'admin color scheme' ),
admin_url( "css/colors/ectoplasm/colors$suffix.css" ),
array( '#413256', '#523f6d', '#a3b745', '#d46f15' ),
array(
'base' => '#ece6f6',
'focus' => '#fff',
'current' => '#fff',
)
);
wp_admin_css_color(
'ocean',
_x( 'Ocean', 'admin color scheme' ),
admin_url( "css/colors/ocean/colors$suffix.css" ),
array( '#627c83', '#738e96', '#9ebaa0', '#aa9d88' ),
array(
'base' => '#f2fcff',
'focus' => '#fff',
'current' => '#fff',
)
);
wp_admin_css_color(
'coffee',
_x( 'Coffee', 'admin color scheme' ),
admin_url( "css/colors/coffee/colors$suffix.css" ),
array( '#46403c', '#59524c', '#c7a589', '#9ea476' ),
array(
'base' => '#f3f2f1',
'focus' => '#fff',
'current' => '#fff',
)
);
}
function wp_admin_css_uri( $file = 'wp-admin' ) {
if ( defined( 'WP_INSTALLING' ) ) {
$_file = "./$file.css";
} else {
$_file = admin_url( "$file.css" );
}
$_file = add_query_arg( 'version', get_bloginfo( 'version' ), $_file );
return apply_filters( 'wp_admin_css_uri', $_file, $file );
}
function wp_admin_css( $file = 'wp-admin', $force_echo = false ) {
// For backward compatibility.
$handle = str_starts_with( $file, 'css/' ) ? substr( $file, 4 ) : $file;
if ( wp_styles()->query( $handle ) ) {
if ( $force_echo || did_action( 'wp_print_styles' ) ) {
// We already printed the style queue. Print this one immediately.
wp_print_styles( $handle );
} else {
// Add to style queue.
wp_enqueue_style( $handle );
}
return;
}
$stylesheet_link = sprintf(
"\n",
esc_url( wp_admin_css_uri( $file ) )
);
echo apply_filters( 'wp_admin_css', $stylesheet_link, $file );
if ( function_exists( 'is_rtl' ) && is_rtl() ) {
$rtl_stylesheet_link = sprintf(
"\n",
esc_url( wp_admin_css_uri( "$file-rtl" ) )
);
echo apply_filters( 'wp_admin_css', $rtl_stylesheet_link, "$file-rtl" );
}
}
function add_thickbox() {
wp_enqueue_script( 'thickbox' );
wp_enqueue_style( 'thickbox' );
if ( is_network_admin() ) {
add_action( 'admin_head', '_thickbox_path_admin_subfolder' );
}
}
function wp_generator() {
the_generator( apply_filters( 'wp_generator_type', 'xhtml' ) );
}
function the_generator( $type ) {
echo apply_filters( 'the_generator', get_the_generator( $type ), $type ) . "\n";
}
function get_the_generator( $type = '' ) {
if ( empty( $type ) ) {
$current_filter = current_filter();
if ( empty( $current_filter ) ) {
return;
}
switch ( $current_filter ) {
case 'rss2_head':
case 'commentsrss2_head':
$type = 'rss2';
break;
case 'rss_head':
case 'opml_head':
$type = 'comment';
break;
case 'rdf_header':
$type = 'rdf';
break;
case 'atom_head':
case 'comments_atom_head':
case 'app_head':
$type = 'atom';
break;
}
}
switch ( $type ) {
case 'html':
$gen = '';
break;
case 'xhtml':
$gen = '';
break;
case 'atom':
$gen = '