2004-01-27 04:58:01 -05:00
< ? php
2008-09-05 15:19:01 -04:00
/**
* General template tags that can go anywhere in a template .
*
* @ package WordPress
* @ subpackage Template
*/
2004-01-27 04:58:01 -05:00
2008-09-05 15:19:01 -04:00
/**
2008-09-05 17:47:53 -04:00
* Load header template .
2008-09-05 15:19:01 -04:00
*
2008-09-06 02:38:26 -04:00
* Includes the header template for a theme or if a name is specified then a
2010-05-03 05:57:24 -04:00
* specialised header will be included .
2008-09-06 02:38:26 -04:00
*
* For the parameter , if the file is called " header-special.php " then specify
* " special " .
2008-09-05 15:19:01 -04:00
*
* @ since 1.5 . 0
2014-04-15 00:01:15 -04:00
*
2008-09-06 02:38:26 -04:00
* @ param string $name The name of the specialised header .
2008-09-05 15:19:01 -04:00
*/
2008-08-19 16:57:48 -04:00
function get_header ( $name = null ) {
2014-04-15 00:01:15 -04:00
/**
* Fires before the header template file is loaded .
*
* @ since 2.1 . 0
* @ since 2.8 . 0 $name parameter added .
*
2016-08-29 16:42:30 -04:00
* @ param string | null $name Name of the specific header file to use . null for the default header .
2014-04-15 00:01:15 -04:00
*/
2009-06-04 13:59:14 -04:00
do_action ( 'get_header' , $name );
2008-08-19 16:57:48 -04:00
2011-11-16 17:55:59 -05:00
$templates = array ();
2017-11-30 18:11:00 -05:00
$name = ( string ) $name ;
2016-02-24 15:57:26 -05:00
if ( '' !== $name ) {
2011-11-16 17:55:59 -05:00
$templates [] = " header- { $name } .php " ;
2016-02-24 15:57:26 -05:00
}
2011-11-16 17:55:59 -05:00
$templates [] = 'header.php' ;
2019-02-06 13:37:51 -05:00
locate_template ( $templates , true );
2004-12-30 05:58:06 -05:00
}
2008-09-05 15:19:01 -04:00
/**
2008-09-05 17:47:53 -04:00
* Load footer template .
2008-09-05 15:19:01 -04:00
*
2008-09-06 02:38:26 -04:00
* Includes the footer template for a theme or if a name is specified then a
2010-05-03 05:57:24 -04:00
* specialised footer will be included .
2008-09-06 02:38:26 -04:00
*
* For the parameter , if the file is called " footer-special.php " then specify
* " special " .
2008-09-05 15:19:01 -04:00
*
* @ since 1.5 . 0
2014-04-15 00:01:15 -04:00
*
2008-09-06 02:38:26 -04:00
* @ param string $name The name of the specialised footer .
2008-09-05 15:19:01 -04:00
*/
2008-08-19 16:57:48 -04:00
function get_footer ( $name = null ) {
2014-04-15 00:01:15 -04:00
/**
* Fires before the footer template file is loaded .
*
* @ since 2.1 . 0
* @ since 2.8 . 0 $name parameter added .
*
2016-08-29 16:42:30 -04:00
* @ param string | null $name Name of the specific footer file to use . null for the default footer .
2014-04-15 00:01:15 -04:00
*/
2009-06-04 13:59:14 -04:00
do_action ( 'get_footer' , $name );
2008-08-19 16:57:48 -04:00
2011-11-16 17:55:59 -05:00
$templates = array ();
2017-11-30 18:11:00 -05:00
$name = ( string ) $name ;
2016-02-24 15:57:26 -05:00
if ( '' !== $name ) {
2011-11-16 17:55:59 -05:00
$templates [] = " footer- { $name } .php " ;
2016-02-24 15:57:26 -05:00
}
2011-11-16 17:55:59 -05:00
2017-11-30 18:11:00 -05:00
$templates [] = 'footer.php' ;
2011-11-16 17:55:59 -05:00
2019-02-06 13:37:51 -05:00
locate_template ( $templates , true );
2004-12-30 05:58:06 -05:00
}
2008-09-05 15:19:01 -04:00
/**
2008-09-05 17:47:53 -04:00
* Load sidebar template .
2008-09-05 15:19:01 -04:00
*
2008-09-06 02:38:26 -04:00
* Includes the sidebar template for a theme or if a name is specified then a
2010-05-03 05:57:24 -04:00
* specialised sidebar will be included .
2008-09-06 02:38:26 -04:00
*
* For the parameter , if the file is called " sidebar-special.php " then specify
* " special " .
2008-09-05 15:19:01 -04:00
*
* @ since 1.5 . 0
2014-04-15 00:01:15 -04:00
*
2008-09-06 02:38:26 -04:00
* @ param string $name The name of the specialised sidebar .
2008-09-05 15:19:01 -04:00
*/
2008-01-13 23:51:29 -05:00
function get_sidebar ( $name = null ) {
2014-04-15 00:01:15 -04:00
/**
* Fires before the sidebar template file is loaded .
*
* @ since 2.2 . 0
* @ since 2.8 . 0 $name parameter added .
*
2016-08-29 16:42:30 -04:00
* @ param string | null $name Name of the specific sidebar file to use . null for the default sidebar .
2014-04-15 00:01:15 -04:00
*/
2009-06-04 13:59:14 -04:00
do_action ( 'get_sidebar' , $name );
2008-08-19 16:57:48 -04:00
2011-11-16 17:55:59 -05:00
$templates = array ();
2017-11-30 18:11:00 -05:00
$name = ( string ) $name ;
if ( '' !== $name ) {
2011-11-16 17:55:59 -05:00
$templates [] = " sidebar- { $name } .php " ;
2017-11-30 18:11:00 -05:00
}
2011-11-16 17:55:59 -05:00
$templates [] = 'sidebar.php' ;
2019-02-06 13:37:51 -05:00
locate_template ( $templates , true );
2004-12-30 05:58:06 -05:00
}
2010-02-14 04:32:23 -05:00
/**
2017-06-25 02:56:40 -04:00
* Loads a template part into a template .
2010-02-14 04:32:23 -05:00
*
2017-06-25 02:56:40 -04:00
* Provides a simple mechanism for child themes to overload reusable sections of code
* in the theme .
2010-03-25 18:02:45 -04:00
*
* Includes the named template part for a theme or if a name is specified then a
* specialised part will be included . If the theme contains no { slug } . php file
2010-02-14 04:32:23 -05:00
* then no template will be included .
*
2010-04-11 13:26:03 -04:00
* The template is included using require , not require_once , so you may include the
* same template part multiple times .
*
2011-09-19 15:01:03 -04:00
* For the $name parameter , if the file is called " { slug}-special.php " then specify
2010-02-14 04:32:23 -05:00
* " special " .
*
* @ since 3.0 . 0
2014-04-15 00:01:15 -04:00
*
2010-02-14 04:32:23 -05:00
* @ param string $slug The slug name for the generic template .
* @ param string $name The name of the specialised template .
*/
2010-03-25 18:02:45 -04:00
function get_template_part ( $slug , $name = null ) {
2014-04-15 00:01:15 -04:00
/**
* Fires before the specified template part file is loaded .
*
2014-11-30 07:10:23 -05:00
* The dynamic portion of the hook name , `$slug` , refers to the slug name
2014-04-15 00:01:15 -04:00
* for the generic template part .
*
* @ since 3.0 . 0
*
2016-08-29 16:42:30 -04:00
* @ param string $slug The slug name for the generic template .
* @ param string | null $name The name of the specialized template .
2014-04-15 00:01:15 -04:00
*/
2010-04-10 06:40:47 -04:00
do_action ( " get_template_part_ { $slug } " , $slug , $name );
2010-02-14 04:32:23 -05:00
$templates = array ();
2017-11-30 18:11:00 -05:00
$name = ( string ) $name ;
if ( '' !== $name ) {
2010-02-14 04:32:23 -05:00
$templates [] = " { $slug } - { $name } .php " ;
2017-11-30 18:11:00 -05:00
}
2010-02-14 04:32:23 -05:00
$templates [] = " { $slug } .php " ;
2019-03-28 17:13:54 -04:00
/**
* Fires before a template part is loaded .
*
* @ since 5.2 . 0
*
* @ param string $slug The slug name for the generic template .
* @ param string $name The name of the specialized template .
* @ param string [] $templates Array of template files to search for , in order .
*/
do_action ( 'get_template_part' , $slug , $name , $templates );
2019-02-06 13:37:51 -05:00
locate_template ( $templates , true , false );
2010-02-14 04:32:23 -05:00
}
2008-10-18 16:46:30 -04:00
/**
* Display search form .
*
* Will first attempt to locate the searchform . php file in either the child or
* the parent , then load it . If it doesn ' t exist , then the default search form
2009-01-22 16:17:52 -05:00
* will be displayed . The default search form is HTML , which will be displayed .
* There is a filter applied to the search form HTML in order to edit or replace
2016-05-23 14:57:28 -04:00
* it . The filter is { @ see 'get_search_form' } .
2009-01-22 16:17:52 -05:00
*
* This function is primarily used by themes which want to hardcode the search
* form into the sidebar and also by the search widget in WordPress .
*
* There is also an action that is called whenever the function is run called ,
2016-05-23 14:57:28 -04:00
* { @ see 'pre_get_search_form' } . This can be useful for outputting JavaScript that the
2009-01-22 16:17:52 -05:00
* search relies on or various formatting that applies to the beginning of the
* search . To give a few examples of what it can be used for .
2008-10-18 16:46:30 -04:00
*
* @ since 2.7 . 0
2019-03-21 05:20:59 -04:00
* @ since 5.2 . 0 The $args array parameter was added in place of an $echo boolean flag .
2013-03-26 16:27:13 -04:00
*
2019-03-21 05:20:59 -04:00
* @ param array $args {
* Optional . Array of display arguments .
*
* @ type bool $echo Whether to echo or return the form . Default true .
* @ type string $aria_label ARIA label for the search form . Useful to distinguish
* multiple search forms on the same page and improve
* accessibility . Default empty .
* }
2020-01-11 13:32:05 -05:00
* @ return void | string Void if 'echo' argument is true , search form HTML if 'echo' is false .
2008-10-18 16:46:30 -04:00
*/
2019-03-21 05:20:59 -04:00
function get_search_form ( $args = array () ) {
2014-04-15 00:01:15 -04:00
/**
* Fires before the search form is retrieved , at the start of get_search_form () .
*
* @ since 2.7 . 0 as 'get_search_form' action .
* @ since 3.6 . 0
*
* @ link https :// core . trac . wordpress . org / ticket / 19321
*/
2013-03-26 17:08:04 -04:00
do_action ( 'pre_get_search_form' );
2008-10-17 16:39:56 -04:00
2019-03-21 05:20:59 -04:00
$echo = true ;
if ( ! is_array ( $args ) ) {
2019-05-16 22:22:53 -04:00
/*
* Back compat : to ensure previous uses of get_search_form () continue to
* function as expected , we handle a value for the boolean $echo param removed
* in 5.2 . 0. Then we deal with the $args array and cast its defaults .
*/
$echo = ( bool ) $args ;
2019-03-21 05:20:59 -04:00
// Set an empty array and allow default arguments to take over.
$args = array ();
}
// Defaults are to echo and to output no custom label on the form.
$defaults = array (
'echo' => $echo ,
'aria_label' => '' ,
);
$args = wp_parse_args ( $args , $defaults );
/**
* Filters the array of arguments used when generating the search form .
*
* @ since 5.2 . 0
*
* @ param array $args The array of arguments for building the search form .
*/
$args = apply_filters ( 'search_form_args' , $args );
2019-05-16 22:22:53 -04:00
$format = current_theme_supports ( 'html5' , 'search-form' ) ? 'html5' : 'xhtml' ;
2014-04-15 00:01:15 -04:00
/**
2016-05-22 14:26:53 -04:00
* Filters the HTML format of the search form .
2014-04-15 00:01:15 -04:00
*
* @ since 3.6 . 0
*
* @ param string $format The type of markup to use in the search form .
* Accepts 'html5' , 'xhtml' .
*/
2013-05-09 18:41:30 -04:00
$format = apply_filters ( 'search_form_format' , $format );
2013-03-26 16:27:13 -04:00
2013-03-12 06:25:08 -04:00
$search_form_template = locate_template ( 'searchform.php' );
2009-05-22 12:04:49 -04:00
if ( '' != $search_form_template ) {
2013-03-12 05:51:56 -04:00
ob_start ();
2020-02-06 01:33:11 -05:00
require $search_form_template ;
2013-03-12 05:51:56 -04:00
$form = ob_get_clean ();
} else {
2019-03-21 05:20:59 -04:00
// Build a string containing an aria-label to use for the search form.
if ( isset ( $args [ 'aria_label' ] ) && $args [ 'aria_label' ] ) {
$aria_label = 'aria-label="' . esc_attr ( $args [ 'aria_label' ] ) . '" ' ;
} else {
/*
* If there ' s no custom aria - label , we can set a default here . At the
* moment it 's empty as there' s uncertainty about what the default should be .
*/
$aria_label = '' ;
}
2013-03-26 19:18:43 -04:00
if ( 'html5' == $format ) {
2019-03-21 05:20:59 -04:00
$form = '<form role="search" ' . $aria_label . 'method="get" class="search-form" action="' . esc_url ( home_url ( '/' ) ) . ' " >
2013-06-27 16:45:12 -04:00
< label >
< span class = " screen-reader-text " > ' . _x( ' Search for : ', ' label ' ) . ' </ span >
2016-01-08 14:01:26 -05:00
< input type = " search " class = " search-field " placeholder = " ' . esc_attr_x( 'Search …', 'placeholder' ) . ' " value = " ' . get_search_query() . ' " name = " s " />
2013-04-04 20:26:53 -04:00
</ label >
2017-11-30 18:11:00 -05:00
< input type = " submit " class = " search-submit " value = " ' . esc_attr_x( 'Search', 'submit button' ) . ' " />
2013-04-04 20:26:53 -04:00
</ form > ' ;
} else {
2019-03-21 05:20:59 -04:00
$form = '<form role="search" ' . $aria_label . 'method="get" id="searchform" class="searchform" action="' . esc_url ( home_url ( '/' ) ) . ' " >
2013-04-04 20:26:53 -04:00
< div >
< label class = " screen-reader-text " for = " s " > ' . _x( ' Search for : ', ' label ' ) . ' </ label >
< input type = " text " value = " ' . get_search_query() . ' " name = " s " id = " s " />
2017-11-30 18:11:00 -05:00
< input type = " submit " id = " searchsubmit " value = " ' . esc_attr_x( 'Search', 'submit button' ) . ' " />
2013-04-04 20:26:53 -04:00
</ div >
2013-03-26 19:18:43 -04:00
</ form > ' ;
}
2009-05-22 12:04:49 -04:00
}
2008-10-17 16:39:56 -04:00
2014-04-15 00:01:15 -04:00
/**
2016-05-22 14:26:53 -04:00
* Filters the HTML output of the search form .
2014-04-15 00:01:15 -04:00
*
* @ since 2.7 . 0
*
* @ param string $form The search form HTML output .
*/
2013-03-26 17:08:04 -04:00
$result = apply_filters ( 'get_search_form' , $form );
2014-04-15 00:01:15 -04:00
2017-11-30 18:11:00 -05:00
if ( null === $result ) {
2013-03-26 17:08:04 -04:00
$result = $form ;
2017-11-30 18:11:00 -05:00
}
2013-03-26 17:08:04 -04:00
2020-01-11 13:32:05 -05:00
if ( $args [ 'echo' ] ) {
2013-03-26 17:08:04 -04:00
echo $result ;
2017-11-30 18:11:00 -05:00
} else {
2013-03-26 17:08:04 -04:00
return $result ;
2017-11-30 18:11:00 -05:00
}
2008-10-17 16:39:56 -04:00
}
2008-09-05 15:19:01 -04:00
/**
2008-09-06 02:38:26 -04:00
* Display the Log In / Out link .
2008-09-05 15:19:01 -04:00
*
2010-02-26 00:46:08 -05:00
* Displays a link , which allows users to navigate to the Log In page to log in
2010-02-24 15:13:23 -05:00
* or log out depending on whether they are currently logged in .
2008-09-05 15:19:01 -04:00
*
* @ since 1.5 . 0
2009-04-27 16:00:59 -04:00
*
* @ param string $redirect Optional path to redirect to on login / logout .
2015-05-25 13:18:26 -04:00
* @ param bool $echo Default to echo and not return the link .
2020-01-21 19:57:03 -05:00
* @ return void | string Void if `$echo` argument is true , log in / out link if `$echo` is false .
2008-09-05 15:19:01 -04:00
*/
2017-11-30 18:11:00 -05:00
function wp_loginout ( $redirect = '' , $echo = true ) {
if ( ! is_user_logged_in () ) {
$link = '<a href="' . esc_url ( wp_login_url ( $redirect ) ) . '">' . __ ( 'Log in' ) . '</a>' ;
} else {
$link = '<a href="' . esc_url ( wp_logout_url ( $redirect ) ) . '">' . __ ( 'Log out' ) . '</a>' ;
}
2010-02-12 15:14:17 -05:00
2014-04-15 00:01:15 -04:00
if ( $echo ) {
/**
2016-05-22 14:26:53 -04:00
* Filters the HTML output for the Log In / Log Out link .
2014-04-15 00:01:15 -04:00
*
* @ since 1.5 . 0
*
* @ param string $link The HTML link content .
*/
echo apply_filters ( 'loginout' , $link );
} else {
/** This filter is documented in wp-includes/general-template.php */
return apply_filters ( 'loginout' , $link );
}
2004-07-10 19:34:47 -04:00
}
2008-09-28 17:05:37 -04:00
/**
2016-06-20 04:48:28 -04:00
* Retrieves the logout URL .
2008-09-28 17:05:37 -04:00
*
2013-04-22 16:21:22 -04:00
* Returns the URL that allows the user to log out of the site .
2008-09-28 17:05:37 -04:00
*
2010-12-01 14:24:38 -05:00
* @ since 2.7 . 0
2014-04-15 00:01:15 -04:00
*
2008-09-28 17:05:37 -04:00
* @ param string $redirect Path to redirect to on logout .
2016-06-20 04:48:28 -04:00
* @ return string The logout URL . Note : HTML - encoded via esc_html () in wp_nonce_url () .
2008-09-28 17:05:37 -04:00
*/
2017-11-30 18:11:00 -05:00
function wp_logout_url ( $redirect = '' ) {
2019-05-23 21:33:52 -04:00
$args = array ();
2017-11-30 18:11:00 -05:00
if ( ! empty ( $redirect ) ) {
2009-12-08 11:38:59 -05:00
$args [ 'redirect_to' ] = urlencode ( $redirect );
2009-04-14 14:31:49 -04:00
}
2008-12-09 13:03:31 -05:00
2019-05-23 21:33:52 -04:00
$logout_url = add_query_arg ( $args , site_url ( 'wp-login.php?action=logout' , 'login' ) );
2009-04-14 14:31:49 -04:00
$logout_url = wp_nonce_url ( $logout_url , 'log-out' );
2014-04-15 00:01:15 -04:00
/**
2016-05-22 14:26:53 -04:00
* Filters the logout URL .
2014-04-15 00:01:15 -04:00
*
* @ since 2.8 . 0
*
2016-06-20 04:48:28 -04:00
* @ param string $logout_url The HTML - encoded logout URL .
2014-04-15 00:01:15 -04:00
* @ param string $redirect Path to redirect to on logout .
*/
return apply_filters ( 'logout_url' , $logout_url , $redirect );
2008-09-28 17:05:37 -04:00
}
/**
2016-06-20 04:48:28 -04:00
* Retrieves the login URL .
2008-09-28 17:05:37 -04:00
*
2010-12-01 14:24:38 -05:00
* @ since 2.7 . 0
2014-04-15 00:01:15 -04:00
*
2016-06-20 04:48:28 -04:00
* @ param string $redirect Path to redirect to on log in .
* @ param bool $force_reauth Whether to force reauthorization , even if a cookie is present .
* Default false .
* @ return string The login URL . Not HTML - encoded .
2008-09-28 17:05:37 -04:00
*/
2017-11-30 18:11:00 -05:00
function wp_login_url ( $redirect = '' , $force_reauth = false ) {
$login_url = site_url ( 'wp-login.php' , 'login' );
2009-04-14 14:31:49 -04:00
2017-11-30 18:11:00 -05:00
if ( ! empty ( $redirect ) ) {
$login_url = add_query_arg ( 'redirect_to' , urlencode ( $redirect ), $login_url );
}
2010-05-11 09:44:40 -04:00
2017-11-30 18:11:00 -05:00
if ( $force_reauth ) {
$login_url = add_query_arg ( 'reauth' , '1' , $login_url );
}
2008-12-09 13:03:31 -05:00
2014-04-15 00:01:15 -04:00
/**
2016-05-22 14:26:53 -04:00
* Filters the login URL .
2014-04-15 00:01:15 -04:00
*
* @ since 2.8 . 0
2015-01-17 12:31:23 -05:00
* @ since 4.2 . 0 The `$force_reauth` parameter was added .
2014-04-15 00:01:15 -04:00
*
2016-06-20 04:48:28 -04:00
* @ param string $login_url The login URL . Not HTML - encoded .
2015-01-17 12:20:23 -05:00
* @ param string $redirect The path to redirect to on login , if supplied .
* @ param bool $force_reauth Whether to force reauthorization , even if a cookie is present .
2014-04-15 00:01:15 -04:00
*/
2015-01-17 12:20:23 -05:00
return apply_filters ( 'login_url' , $login_url , $redirect , $force_reauth );
2008-09-28 17:05:37 -04:00
}
2013-04-22 16:21:22 -04:00
/**
* Returns the URL that allows the user to register on the site .
*
* @ since 3.6 . 0
2014-04-15 00:01:15 -04:00
*
* @ return string User registration URL .
2013-04-22 16:21:22 -04:00
*/
function wp_registration_url () {
2014-04-15 00:01:15 -04:00
/**
2016-05-22 14:26:53 -04:00
* Filters the user registration URL .
2014-04-15 00:01:15 -04:00
*
* @ since 3.6 . 0
*
* @ param string $register The user registration URL .
*/
2013-04-22 16:21:22 -04:00
return apply_filters ( 'register_url' , site_url ( 'wp-login.php?action=register' , 'login' ) );
}
2010-01-11 16:48:43 -05:00
/**
2015-10-21 11:38:26 -04:00
* Provides a simple login form for use anywhere within WordPress .
*
2020-01-11 13:32:05 -05:00
* The login form HTML is echoed by default . Pass a false value for `$echo` to return it instead .
2010-01-11 16:48:43 -05:00
*
2010-01-11 17:33:28 -05:00
* @ since 3.0 . 0
2014-04-15 00:01:15 -04:00
*
2015-10-21 11:38:26 -04:00
* @ param array $args {
* Optional . Array of options to control the form output . Default empty array .
*
* @ type bool $echo Whether to display the login form or return the form HTML code .
* Default true ( echo ) .
* @ type string $redirect URL to redirect to . Must be absolute , as in " https://example.com/mypage/ " .
* Default is to redirect back to the request URI .
* @ type string $form_id ID attribute value for the form . Default 'loginform' .
2016-08-31 14:51:28 -04:00
* @ type string $label_username Label for the username or email address field . Default 'Username or Email Address' .
2015-10-21 11:38:26 -04:00
* @ type string $label_password Label for the password field . Default 'Password' .
* @ type string $label_remember Label for the remember field . Default 'Remember Me' .
* @ type string $label_log_in Label for the submit button . Default 'Log In' .
* @ type string $id_username ID attribute value for the username field . Default 'user_login' .
* @ type string $id_password ID attribute value for the password field . Default 'user_pass' .
* @ type string $id_remember ID attribute value for the remember field . Default 'rememberme' .
* @ type string $id_submit ID attribute value for the submit button . Default 'wp-submit' .
* @ type bool $remember Whether to display the " rememberme " checkbox in the form .
* @ type string $value_username Default value for the username field . Default empty .
* @ type bool $value_remember Whether the " Remember Me " checkbox should be checked by default .
* Default false ( unchecked ) .
*
* }
2020-01-11 13:32:05 -05:00
* @ return void | string Void if 'echo' argument is true , login form HTML if 'echo' is false .
2010-01-11 16:48:43 -05:00
*/
function wp_login_form ( $args = array () ) {
2013-03-12 06:30:58 -04:00
$defaults = array (
2017-11-30 18:11:00 -05:00
'echo' => true ,
2015-10-21 11:38:26 -04:00
// Default 'redirect' value takes the user back to the request URI.
2017-11-30 18:11:00 -05:00
'redirect' => ( is_ssl () ? 'https://' : 'http://' ) . $_SERVER [ 'HTTP_HOST' ] . $_SERVER [ 'REQUEST_URI' ],
'form_id' => 'loginform' ,
2016-08-31 14:51:28 -04:00
'label_username' => __ ( 'Username or Email Address' ),
2013-03-12 06:30:58 -04:00
'label_password' => __ ( 'Password' ),
'label_remember' => __ ( 'Remember Me' ),
2017-11-30 18:11:00 -05:00
'label_log_in' => __ ( 'Log In' ),
'id_username' => 'user_login' ,
'id_password' => 'user_pass' ,
'id_remember' => 'rememberme' ,
'id_submit' => 'wp-submit' ,
'remember' => true ,
2013-03-12 06:30:58 -04:00
'value_username' => '' ,
2015-10-21 11:38:26 -04:00
// Set 'value_remember' to true to default the "Remember me" checkbox to checked.
'value_remember' => false ,
2013-03-12 06:30:58 -04:00
);
2014-04-15 00:01:15 -04:00
/**
2016-05-22 14:26:53 -04:00
* Filters the default login form output arguments .
2014-04-15 00:01:15 -04:00
*
* @ since 3.0 . 0
*
* @ see wp_login_form ()
*
* @ param array $defaults An array of default login form arguments .
*/
2010-01-11 16:48:43 -05:00
$args = wp_parse_args ( $args , apply_filters ( 'login_form_defaults' , $defaults ) );
2010-01-15 17:11:12 -05:00
2014-04-15 00:42:16 -04:00
/**
2016-05-22 14:26:53 -04:00
* Filters content to display at the top of the login form .
2014-04-15 00:42:16 -04:00
*
* The filter evaluates just following the opening form tag element .
*
* @ since 3.0 . 0
*
* @ param string $content Content to display . Default empty .
* @ param array $args Array of login form arguments .
*/
$login_form_top = apply_filters ( 'login_form_top' , '' , $args );
/**
2016-05-22 14:26:53 -04:00
* Filters content to display in the middle of the login form .
2014-04-15 00:42:16 -04:00
*
* The filter evaluates just following the location where the 'login-password'
* field is displayed .
*
* @ since 3.0 . 0
*
* @ param string $content Content to display . Default empty .
* @ param array $args Array of login form arguments .
*/
$login_form_middle = apply_filters ( 'login_form_middle' , '' , $args );
/**
2016-05-22 14:26:53 -04:00
* Filters content to display at the bottom of the login form .
2014-04-15 00:42:16 -04:00
*
* The filter evaluates just preceding the closing form tag element .
*
* @ since 3.0 . 0
*
* @ param string $content Content to display . Default empty .
* @ param array $args Array of login form arguments .
*/
$login_form_bottom = apply_filters ( 'login_form_bottom' , '' , $args );
2010-01-11 16:48:43 -05:00
$form = '
2015-12-20 22:23:29 -05:00
< form name = " ' . $args['form_id'] . ' " id = " ' . $args['form_id'] . ' " action = " ' . esc_url( site_url( 'wp-login.php', 'login_post' ) ) . ' " method = " post " >
2014-04-15 00:42:16 -04:00
' . $login_form_top . '
2010-01-11 16:48:43 -05:00
< p class = " login-username " >
< label for = " ' . esc_attr( $args['id_username'] ) . ' " > ' . esc_html( $args[' label_username '] ) . ' </ label >
2012-07-23 20:15:15 -04:00
< input type = " text " name = " log " id = " ' . esc_attr( $args['id_username'] ) . ' " class = " input " value = " ' . esc_attr( $args['value_username'] ) . ' " size = " 20 " />
2010-01-11 16:48:43 -05:00
</ p >
< p class = " login-password " >
< label for = " ' . esc_attr( $args['id_password'] ) . ' " > ' . esc_html( $args[' label_password '] ) . ' </ label >
2012-07-23 20:15:15 -04:00
< input type = " password " name = " pwd " id = " ' . esc_attr( $args['id_password'] ) . ' " class = " input " value = " " size = " 20 " />
2010-01-11 16:48:43 -05:00
</ p >
2014-04-15 00:42:16 -04:00
' . $login_form_middle . '
2012-07-23 20:15:15 -04:00
' . ( $args[' remember '] ? ' < p class = " login-remember " >< label >< input name = " rememberme " type = " checkbox " id = " ' . esc_attr( $args['id_remember'] ) . ' " value = " forever " ' . ( $args[' value_remember '] ? ' checked = " checked " ' : ' ' ) . ' /> ' . esc_html( $args[' label_remember '] ) . ' </ label ></ p > ' : ' ' ) . '
2010-01-11 16:48:43 -05:00
< p class = " login-submit " >
2016-09-28 15:54:28 -04:00
< input type = " submit " name = " wp-submit " id = " ' . esc_attr( $args['id_submit'] ) . ' " class = " button button-primary " value = " ' . esc_attr( $args['label_log_in'] ) . ' " />
2011-10-20 19:41:07 -04:00
< input type = " hidden " name = " redirect_to " value = " ' . esc_url( $args['redirect'] ) . ' " />
2010-01-11 16:48:43 -05:00
</ p >
2014-04-15 00:42:16 -04:00
' . $login_form_bottom . '
2010-01-11 16:48:43 -05:00
</ form > ' ;
2010-01-15 17:11:12 -05:00
2017-11-30 18:11:00 -05:00
if ( $args [ 'echo' ] ) {
2010-01-11 16:48:43 -05:00
echo $form ;
2017-11-30 18:11:00 -05:00
} else {
2010-01-11 16:48:43 -05:00
return $form ;
2017-11-30 18:11:00 -05:00
}
2010-01-11 16:48:43 -05:00
}
2009-05-24 16:58:22 -04:00
/**
* Returns the URL that allows the user to retrieve the lost password
*
* @ since 2.8 . 0
2014-04-15 00:01:15 -04:00
*
2009-05-24 16:58:22 -04:00
* @ param string $redirect Path to redirect to on login .
2012-09-20 09:52:36 -04:00
* @ return string Lost password URL .
2009-05-24 16:58:22 -04:00
*/
2011-10-20 10:40:11 -04:00
function wp_lostpassword_url ( $redirect = '' ) {
2019-05-23 21:33:52 -04:00
$args = array ();
2017-11-30 18:11:00 -05:00
if ( ! empty ( $redirect ) ) {
2017-07-22 21:06:42 -04:00
$args [ 'redirect_to' ] = urlencode ( $redirect );
2009-05-24 16:58:22 -04:00
}
2019-05-23 21:33:52 -04:00
$lostpassword_url = add_query_arg ( $args , network_site_url ( 'wp-login.php?action=lostpassword' , 'login' ) );
2014-04-15 00:01:15 -04:00
/**
2016-05-22 14:26:53 -04:00
* Filters the Lost Password URL .
2014-04-15 00:01:15 -04:00
*
* @ since 2.8 . 0
*
* @ param string $lostpassword_url The lost password page URL .
* @ param string $redirect The path to redirect to on login .
*/
2011-10-20 10:40:11 -04:00
return apply_filters ( 'lostpassword_url' , $lostpassword_url , $redirect );
2009-05-24 16:58:22 -04:00
}
2008-09-05 15:19:01 -04:00
/**
2008-09-06 02:38:26 -04:00
* Display the Registration or Admin link .
2008-09-05 15:19:01 -04:00
*
2008-09-06 02:38:26 -04:00
* Display a link which allows the user to navigate to the registration page if
* not logged in and registration is enabled or to the dashboard if logged in .
2008-12-09 13:03:31 -05:00
*
2008-09-05 15:19:01 -04:00
* @ since 1.5 . 0
*
2014-11-24 00:39:22 -05:00
* @ param string $before Text to output before the link . Default `<li>` .
2015-05-25 13:18:26 -04:00
* @ param string $after Text to output after the link . Default `</li>` .
* @ param bool $echo Default to echo and not return the link .
2020-01-21 19:57:03 -05:00
* @ return void | string Void if `$echo` argument is true , registration or admin link
* if `$echo` is false .
2008-09-05 15:19:01 -04:00
*/
2010-02-10 13:37:14 -05:00
function wp_register ( $before = '<li>' , $after = '</li>' , $echo = true ) {
2006-02-22 14:08:55 -05:00
if ( ! is_user_logged_in () ) {
2017-11-30 18:11:00 -05:00
if ( get_option ( 'users_can_register' ) ) {
$link = $before . '<a href="' . esc_url ( wp_registration_url () ) . '">' . __ ( 'Register' ) . '</a>' . $after ;
} else {
2006-02-22 14:08:55 -05:00
$link = '' ;
2017-11-30 18:11:00 -05:00
}
2015-09-05 19:25:24 -04:00
} elseif ( current_user_can ( 'read' ) ) {
2017-11-30 18:11:00 -05:00
$link = $before . '<a href="' . admin_url () . '">' . __ ( 'Site Admin' ) . '</a>' . $after ;
2015-09-05 19:25:24 -04:00
} else {
$link = '' ;
2006-02-22 14:08:55 -05:00
}
2010-02-12 15:14:17 -05:00
2014-04-25 02:24:15 -04:00
/**
2016-05-22 14:26:53 -04:00
* Filters the HTML link to the Registration or Admin page .
2014-04-25 02:24:15 -04:00
*
* Users are sent to the admin page if logged - in , or the registration page
* if enabled and logged - out .
*
* @ since 1.5 . 0
*
* @ param string $link The HTML code for the link to the Registration or Admin page .
*/
$link = apply_filters ( 'register' , $link );
2014-04-15 00:01:15 -04:00
if ( $echo ) {
2014-04-25 02:24:15 -04:00
echo $link ;
2014-04-15 00:01:15 -04:00
} else {
2014-04-25 02:24:15 -04:00
return $link ;
2014-04-15 00:01:15 -04:00
}
2004-07-10 19:34:47 -04:00
}
2008-09-05 15:19:01 -04:00
/**
* Theme container function for the 'wp_meta' action .
*
2016-05-23 14:57:28 -04:00
* The { @ see 'wp_meta' } action can have several purposes , depending on how you use it ,
2008-09-05 15:19:01 -04:00
* but one purpose might have been to allow for theme switching .
*
* @ since 1.5 . 0
2014-04-15 00:01:15 -04:00
*
2014-09-29 09:37:16 -04:00
* @ link https :// core . trac . wordpress . org / ticket / 1458 Explanation of 'wp_meta' action .
2008-09-05 15:19:01 -04:00
*/
2004-07-10 19:34:47 -04:00
function wp_meta () {
2014-04-15 00:01:15 -04:00
/**
* Fires before displaying echoed content in the sidebar .
*
* @ since 1.5 . 0
*/
do_action ( 'wp_meta' );
2004-07-10 19:34:47 -04:00
}
2008-09-05 15:19:01 -04:00
/**
2016-01-22 15:17:28 -05:00
* Displays information about the current site .
2008-09-05 15:19:01 -04:00
*
* @ since 0.71
*
2016-01-22 15:17:28 -05:00
* @ see get_bloginfo () For possible `$show` values
*
* @ param string $show Optional . Site information to display . Default empty .
2008-09-05 15:19:01 -04:00
*/
2016-01-22 15:17:28 -05:00
function bloginfo ( $show = '' ) {
2010-02-27 18:22:56 -05:00
echo get_bloginfo ( $show , 'display' );
2004-01-27 04:58:01 -05:00
}
2007-03-06 22:05:41 -05:00
/**
2016-01-22 15:22:25 -05:00
* Retrieves information about the current site .
*
* Possible values for `$show` include :
*
* - 'name' - Site title ( set in Settings > General )
* - 'description' - Site tagline ( set in Settings > General )
* - 'wpurl' - The WordPress address ( URL ) ( set in Settings > General )
* - 'url' - The Site address ( URL ) ( set in Settings > General )
* - 'admin_email' - Admin email ( set in Settings > General )
* - 'charset' - The " Encoding for pages and feeds " ( set in Settings > Reading )
* - 'version' - The current WordPress version
* - 'html_type' - The content - type ( default : " text/html " ) . Themes and plugins
* can override the default value using the { @ see 'pre_option_html_type' } filter
* - 'text_direction' - The text direction determined by the site ' s language . is_rtl ()
* should be used instead
* - 'language' - Language code for the current site
* - 'stylesheet_url' - URL to the stylesheet for the active theme . An active child theme
* will take precedence over this value
* - 'stylesheet_directory' - Directory path for the active theme . An active child theme
* will take precedence over this value
* - 'template_url' / 'template_directory' - URL of the active theme ' s directory . An active
* child theme will NOT take precedence over this value
* - 'pingback_url' - The pingback XML - RPC file URL ( xmlrpc . php )
* - 'atom_url' - The Atom feed URL ( / feed / atom )
2018-02-07 14:42:30 -05:00
* - 'rdf_url' - The RDF / RSS 1.0 feed URL ( / feed / rdf )
2016-01-22 15:22:25 -05:00
* - 'rss_url' - The RSS 0.92 feed URL ( / feed / rss )
* - 'rss2_url' - The RSS 2.0 feed URL ( / feed )
* - 'comments_atom_url' - The comments Atom feed URL ( / comments / feed )
* - 'comments_rss2_url' - The comments RSS 2.0 feed URL ( / comments / feed )
*
* Some `$show` values are deprecated and will be removed in future versions .
* These options will trigger the _deprecated_argument () function .
*
* Deprecated arguments include :
*
* - 'siteurl' - Use 'url' instead
* - 'home' - Use 'url' instead
2008-09-06 02:38:26 -04:00
*
2008-09-05 15:19:01 -04:00
* @ since 0.71
*
2020-02-09 22:30:06 -05:00
* @ global string $wp_version The WordPress version string .
2015-05-25 13:18:26 -04:00
*
2016-01-22 15:22:25 -05:00
* @ param string $show Optional . Site info to retrieve . Default empty ( site name ) .
* @ param string $filter Optional . How to filter what is retrieved . Default 'raw' .
2008-09-06 02:38:26 -04:00
* @ return string Mostly string values , might be empty .
2007-03-06 22:05:41 -05:00
*/
2009-12-30 12:05:02 -05:00
function get_bloginfo ( $show = '' , $filter = 'raw' ) {
2017-11-30 18:11:00 -05:00
switch ( $show ) {
2020-01-28 19:45:18 -05:00
case 'home' : // Deprecated.
case 'siteurl' : // Deprecated.
2017-11-30 18:11:00 -05:00
_deprecated_argument (
2018-08-16 21:51:36 -04:00
__FUNCTION__ ,
'2.2.0' ,
sprintf (
2019-09-02 20:41:05 -04:00
/* translators: 1: 'siteurl'/'home' argument, 2: bloginfo() function name, 3: 'url' argument. */
2017-11-30 18:11:00 -05:00
__ ( 'The %1$s option is deprecated for the family of %2$s functions. Use the %3$s option instead.' ),
'<code>' . $show . '</code>' ,
'<code>bloginfo()</code>' ,
'<code>url</code>'
)
);
2019-01-11 01:26:50 -05:00
// Intentional fall-through to be handled by the 'url' case.
2017-11-30 18:11:00 -05:00
case 'url' :
2010-01-04 12:23:29 -05:00
$output = home_url ();
2005-10-17 19:41:28 -04:00
break ;
2017-11-30 18:11:00 -05:00
case 'wpurl' :
2010-02-27 18:22:56 -05:00
$output = site_url ();
2005-10-17 19:41:28 -04:00
break ;
case 'description' :
2017-11-30 18:11:00 -05:00
$output = get_option ( 'blogdescription' );
2005-10-17 19:41:28 -04:00
break ;
case 'rdf_url' :
2017-11-30 18:11:00 -05:00
$output = get_feed_link ( 'rdf' );
2005-10-17 19:41:28 -04:00
break ;
case 'rss_url' :
2017-11-30 18:11:00 -05:00
$output = get_feed_link ( 'rss' );
2005-10-17 19:41:28 -04:00
break ;
case 'rss2_url' :
2017-11-30 18:11:00 -05:00
$output = get_feed_link ( 'rss2' );
2005-10-17 19:41:28 -04:00
break ;
case 'atom_url' :
2017-11-30 18:11:00 -05:00
$output = get_feed_link ( 'atom' );
2005-10-17 19:41:28 -04:00
break ;
2007-02-23 03:18:30 -05:00
case 'comments_atom_url' :
2017-11-30 18:11:00 -05:00
$output = get_feed_link ( 'comments_atom' );
2007-05-31 18:44:21 -04:00
break ;
2005-10-17 19:41:28 -04:00
case 'comments_rss2_url' :
2017-11-30 18:11:00 -05:00
$output = get_feed_link ( 'comments_rss2' );
2005-10-17 19:41:28 -04:00
break ;
case 'pingback_url' :
2013-10-02 17:15:09 -04:00
$output = site_url ( 'xmlrpc.php' );
2005-10-17 19:41:28 -04:00
break ;
case 'stylesheet_url' :
$output = get_stylesheet_uri ();
break ;
case 'stylesheet_directory' :
$output = get_stylesheet_directory_uri ();
break ;
case 'template_directory' :
case 'template_url' :
$output = get_template_directory_uri ();
break ;
case 'admin_email' :
2017-11-30 18:11:00 -05:00
$output = get_option ( 'admin_email' );
2005-10-17 19:41:28 -04:00
break ;
case 'charset' :
2017-11-30 18:11:00 -05:00
$output = get_option ( 'blog_charset' );
if ( '' == $output ) {
$output = 'UTF-8' ;
}
2005-10-17 19:41:28 -04:00
break ;
2017-11-30 18:11:00 -05:00
case 'html_type' :
$output = get_option ( 'html_type' );
2005-10-17 19:41:28 -04:00
break ;
case 'version' :
global $wp_version ;
$output = $wp_version ;
break ;
2006-09-24 15:29:32 -04:00
case 'language' :
2019-09-02 20:41:05 -04:00
/*
* translators : Translate this to the correct language tag for your locale ,
2016-03-02 11:10:28 -05:00
* see https :// www . w3 . org / International / articles / language - tags / for reference .
* Do not translate into your own language .
*/
$output = __ ( 'html_lang_attribute' );
if ( 'html_lang_attribute' === $output || preg_match ( '/[^a-zA-Z0-9-]/' , $output ) ) {
2018-12-13 20:32:39 -05:00
$output = determine_locale ();
2016-03-02 11:10:28 -05:00
$output = str_replace ( '_' , '-' , $output );
}
2006-09-24 15:29:32 -04:00
break ;
case 'text_direction' :
2017-11-30 18:11:00 -05:00
_deprecated_argument (
2018-08-16 21:51:36 -04:00
__FUNCTION__ ,
'2.2.0' ,
sprintf (
2019-09-02 20:41:05 -04:00
/* translators: 1: 'text_direction' argument, 2: bloginfo() function name, 3: is_rtl() function name. */
2017-11-30 18:11:00 -05:00
__ ( 'The %1$s option is deprecated for the family of %2$s functions. Use the %3$s function instead.' ),
'<code>' . $show . '</code>' ,
'<code>bloginfo()</code>' ,
'<code>is_rtl()</code>'
)
);
2010-05-14 17:22:14 -04:00
if ( function_exists ( 'is_rtl' ) ) {
$output = is_rtl () ? 'rtl' : 'ltr' ;
} else {
$output = 'ltr' ;
}
2006-09-24 15:29:32 -04:00
break ;
2005-10-17 19:41:28 -04:00
case 'name' :
default :
2017-11-30 18:11:00 -05:00
$output = get_option ( 'blogname' );
2005-10-17 19:41:28 -04:00
break ;
2004-09-30 13:56:16 -04:00
}
2007-08-31 19:55:56 -04:00
$url = true ;
2017-11-30 18:11:00 -05:00
if ( strpos ( $show , 'url' ) === false &&
strpos ( $show , 'directory' ) === false &&
strpos ( $show , 'home' ) === false ) {
2007-08-31 19:55:56 -04:00
$url = false ;
2017-11-30 18:11:00 -05:00
}
2007-09-03 19:19:20 -04:00
2007-08-31 19:55:56 -04:00
if ( 'display' == $filter ) {
2014-04-15 00:01:15 -04:00
if ( $url ) {
/**
2016-05-22 14:26:53 -04:00
* Filters the URL returned by get_bloginfo () .
2014-04-15 00:01:15 -04:00
*
* @ since 2.0 . 5
*
* @ param mixed $output The URL returned by bloginfo () .
* @ param mixed $show Type of information requested .
*/
$output = apply_filters ( 'bloginfo_url' , $output , $show );
} else {
/**
2016-05-22 14:26:53 -04:00
* Filters the site information returned by get_bloginfo () .
2014-04-15 00:01:15 -04:00
*
* @ since 0.71
*
* @ param mixed $output The requested non - URL site information .
* @ param mixed $show Type of information requested .
*/
$output = apply_filters ( 'bloginfo' , $output , $show );
}
2007-08-31 19:55:56 -04:00
}
2004-09-30 13:56:16 -04:00
return $output ;
2004-01-27 04:58:01 -05:00
}
Introducing Site Icon, favicon management for WordPress.
This v1 marries Jetpack's Site Icon module with the Media Modal, reusing code
from the Custom Header admin. For now, the core-provided icons will be limited
to a favicon, an iOS app icon, and a Windows tile icon, leaving `.ico` support
and additional icons to plugins to add.
Props obenland, tyxla, flixos90, jancbeck, markjaquith, scruffian.
See #16434.
Built from https://develop.svn.wordpress.org/trunk@32994
git-svn-id: http://core.svn.wordpress.org/trunk@32965 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-06-29 08:58:25 -04:00
/**
* Returns the Site Icon URL .
*
2015-10-12 12:38:24 -04:00
* @ since 4.3 . 0
*
* @ param int $size Optional . Size of the site icon . Default 512 ( pixels ) .
* @ param string $url Optional . Fallback url if no site icon is found . Default empty .
* @ param int $blog_id Optional . ID of the blog to get the site icon for . Default current blog .
* @ return string Site Icon URL .
Introducing Site Icon, favicon management for WordPress.
This v1 marries Jetpack's Site Icon module with the Media Modal, reusing code
from the Custom Header admin. For now, the core-provided icons will be limited
to a favicon, an iOS app icon, and a Windows tile icon, leaving `.ico` support
and additional icons to plugins to add.
Props obenland, tyxla, flixos90, jancbeck, markjaquith, scruffian.
See #16434.
Built from https://develop.svn.wordpress.org/trunk@32994
git-svn-id: http://core.svn.wordpress.org/trunk@32965 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-06-29 08:58:25 -04:00
*/
2015-08-10 16:15:26 -04:00
function get_site_icon_url ( $size = 512 , $url = '' , $blog_id = 0 ) {
2016-10-13 18:28:28 -04:00
$switched_blog = false ;
2020-02-09 11:55:09 -05:00
if ( is_multisite () && ! empty ( $blog_id ) && get_current_blog_id () !== ( int ) $blog_id ) {
2015-11-07 21:04:27 -05:00
switch_to_blog ( $blog_id );
2016-10-13 18:28:28 -04:00
$switched_blog = true ;
Introducing Site Icon, favicon management for WordPress.
This v1 marries Jetpack's Site Icon module with the Media Modal, reusing code
from the Custom Header admin. For now, the core-provided icons will be limited
to a favicon, an iOS app icon, and a Windows tile icon, leaving `.ico` support
and additional icons to plugins to add.
Props obenland, tyxla, flixos90, jancbeck, markjaquith, scruffian.
See #16434.
Built from https://develop.svn.wordpress.org/trunk@32994
git-svn-id: http://core.svn.wordpress.org/trunk@32965 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-06-29 08:58:25 -04:00
}
2015-11-07 21:04:27 -05:00
$site_icon_id = get_option ( 'site_icon' );
2015-08-11 12:25:27 -04:00
if ( $site_icon_id ) {
Introducing Site Icon, favicon management for WordPress.
This v1 marries Jetpack's Site Icon module with the Media Modal, reusing code
from the Custom Header admin. For now, the core-provided icons will be limited
to a favicon, an iOS app icon, and a Windows tile icon, leaving `.ico` support
and additional icons to plugins to add.
Props obenland, tyxla, flixos90, jancbeck, markjaquith, scruffian.
See #16434.
Built from https://develop.svn.wordpress.org/trunk@32994
git-svn-id: http://core.svn.wordpress.org/trunk@32965 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-06-29 08:58:25 -04:00
if ( $size >= 512 ) {
$size_data = 'full' ;
} else {
$size_data = array ( $size , $size );
}
2015-11-07 20:59:26 -05:00
$url = wp_get_attachment_image_url ( $site_icon_id , $size_data );
Introducing Site Icon, favicon management for WordPress.
This v1 marries Jetpack's Site Icon module with the Media Modal, reusing code
from the Custom Header admin. For now, the core-provided icons will be limited
to a favicon, an iOS app icon, and a Windows tile icon, leaving `.ico` support
and additional icons to plugins to add.
Props obenland, tyxla, flixos90, jancbeck, markjaquith, scruffian.
See #16434.
Built from https://develop.svn.wordpress.org/trunk@32994
git-svn-id: http://core.svn.wordpress.org/trunk@32965 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-06-29 08:58:25 -04:00
}
2016-10-13 18:28:28 -04:00
if ( $switched_blog ) {
2015-11-07 21:04:27 -05:00
restore_current_blog ();
}
2015-10-23 17:17:24 -04:00
/**
2016-05-22 14:26:53 -04:00
* Filters the site icon URL .
2015-10-23 17:17:24 -04:00
*
2016-12-27 04:21:44 -05:00
* @ since 4.4 . 0
2015-10-23 17:17:24 -04:00
*
* @ param string $url Site icon URL .
* @ param int $size Size of the site icon .
* @ param int $blog_id ID of the blog to get the site icon for .
*/
return apply_filters ( 'get_site_icon_url' , $url , $size , $blog_id );
Introducing Site Icon, favicon management for WordPress.
This v1 marries Jetpack's Site Icon module with the Media Modal, reusing code
from the Custom Header admin. For now, the core-provided icons will be limited
to a favicon, an iOS app icon, and a Windows tile icon, leaving `.ico` support
and additional icons to plugins to add.
Props obenland, tyxla, flixos90, jancbeck, markjaquith, scruffian.
See #16434.
Built from https://develop.svn.wordpress.org/trunk@32994
git-svn-id: http://core.svn.wordpress.org/trunk@32965 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-06-29 08:58:25 -04:00
}
/**
* Displays the Site Icon URL .
*
2015-10-12 19:28:24 -04:00
* @ since 4.3 . 0
*
* @ param int $size Optional . Size of the site icon . Default 512 ( pixels ) .
* @ param string $url Optional . Fallback url if no site icon is found . Default empty .
* @ param int $blog_id Optional . ID of the blog to get the site icon for . Default current blog .
Introducing Site Icon, favicon management for WordPress.
This v1 marries Jetpack's Site Icon module with the Media Modal, reusing code
from the Custom Header admin. For now, the core-provided icons will be limited
to a favicon, an iOS app icon, and a Windows tile icon, leaving `.ico` support
and additional icons to plugins to add.
Props obenland, tyxla, flixos90, jancbeck, markjaquith, scruffian.
See #16434.
Built from https://develop.svn.wordpress.org/trunk@32994
git-svn-id: http://core.svn.wordpress.org/trunk@32965 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-06-29 08:58:25 -04:00
*/
2015-08-10 16:15:26 -04:00
function site_icon_url ( $size = 512 , $url = '' , $blog_id = 0 ) {
echo esc_url ( get_site_icon_url ( $size , $url , $blog_id ) );
Introducing Site Icon, favicon management for WordPress.
This v1 marries Jetpack's Site Icon module with the Media Modal, reusing code
from the Custom Header admin. For now, the core-provided icons will be limited
to a favicon, an iOS app icon, and a Windows tile icon, leaving `.ico` support
and additional icons to plugins to add.
Props obenland, tyxla, flixos90, jancbeck, markjaquith, scruffian.
See #16434.
Built from https://develop.svn.wordpress.org/trunk@32994
git-svn-id: http://core.svn.wordpress.org/trunk@32965 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-06-29 08:58:25 -04:00
}
/**
* Whether the site has a Site Icon .
*
2015-10-12 19:28:24 -04:00
* @ since 4.3 . 0
*
* @ param int $blog_id Optional . ID of the blog in question . Default current blog .
* @ return bool Whether the site has a site icon or not .
Introducing Site Icon, favicon management for WordPress.
This v1 marries Jetpack's Site Icon module with the Media Modal, reusing code
from the Custom Header admin. For now, the core-provided icons will be limited
to a favicon, an iOS app icon, and a Windows tile icon, leaving `.ico` support
and additional icons to plugins to add.
Props obenland, tyxla, flixos90, jancbeck, markjaquith, scruffian.
See #16434.
Built from https://develop.svn.wordpress.org/trunk@32994
git-svn-id: http://core.svn.wordpress.org/trunk@32965 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-06-29 08:58:25 -04:00
*/
2015-08-10 16:15:26 -04:00
function has_site_icon ( $blog_id = 0 ) {
2015-08-11 12:25:27 -04:00
return ( bool ) get_site_icon_url ( 512 , '' , $blog_id );
Introducing Site Icon, favicon management for WordPress.
This v1 marries Jetpack's Site Icon module with the Media Modal, reusing code
from the Custom Header admin. For now, the core-provided icons will be limited
to a favicon, an iOS app icon, and a Windows tile icon, leaving `.ico` support
and additional icons to plugins to add.
Props obenland, tyxla, flixos90, jancbeck, markjaquith, scruffian.
See #16434.
Built from https://develop.svn.wordpress.org/trunk@32994
git-svn-id: http://core.svn.wordpress.org/trunk@32965 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-06-29 08:58:25 -04:00
}
Customize: Introduce Logo support for themes.
Allows a common theme feature to have a common implementation provided by core and available in a consistent location for users.
See https://make.wordpress.org/core/2016/02/24/theme-logo-support/
Props kwight, enejb, jeherve, bhubbard, samhotchkiss, zinigor, eliorivero, adamsilverstein, melchoyce, ryan, mikeschroder, westonruter, pento, karmatosed, celloexpressions, obenland.
See #33755.
Built from https://develop.svn.wordpress.org/trunk@36698
git-svn-id: http://core.svn.wordpress.org/trunk@36665 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-02-24 17:10:26 -05:00
/**
2016-03-10 12:44:25 -05:00
* Determines whether the site has a custom logo .
Customize: Introduce Logo support for themes.
Allows a common theme feature to have a common implementation provided by core and available in a consistent location for users.
See https://make.wordpress.org/core/2016/02/24/theme-logo-support/
Props kwight, enejb, jeherve, bhubbard, samhotchkiss, zinigor, eliorivero, adamsilverstein, melchoyce, ryan, mikeschroder, westonruter, pento, karmatosed, celloexpressions, obenland.
See #33755.
Built from https://develop.svn.wordpress.org/trunk@36698
git-svn-id: http://core.svn.wordpress.org/trunk@36665 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-02-24 17:10:26 -05:00
*
* @ since 4.5 . 0
*
2016-03-10 12:44:25 -05:00
* @ param int $blog_id Optional . ID of the blog in question . Default is the ID of the current blog .
2016-03-03 14:56:26 -05:00
* @ return bool Whether the site has a custom logo or not .
Customize: Introduce Logo support for themes.
Allows a common theme feature to have a common implementation provided by core and available in a consistent location for users.
See https://make.wordpress.org/core/2016/02/24/theme-logo-support/
Props kwight, enejb, jeherve, bhubbard, samhotchkiss, zinigor, eliorivero, adamsilverstein, melchoyce, ryan, mikeschroder, westonruter, pento, karmatosed, celloexpressions, obenland.
See #33755.
Built from https://develop.svn.wordpress.org/trunk@36698
git-svn-id: http://core.svn.wordpress.org/trunk@36665 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-02-24 17:10:26 -05:00
*/
2016-03-03 14:56:26 -05:00
function has_custom_logo ( $blog_id = 0 ) {
2016-10-13 18:28:28 -04:00
$switched_blog = false ;
2020-02-09 11:55:09 -05:00
if ( is_multisite () && ! empty ( $blog_id ) && get_current_blog_id () !== ( int ) $blog_id ) {
Customize: Introduce Logo support for themes.
Allows a common theme feature to have a common implementation provided by core and available in a consistent location for users.
See https://make.wordpress.org/core/2016/02/24/theme-logo-support/
Props kwight, enejb, jeherve, bhubbard, samhotchkiss, zinigor, eliorivero, adamsilverstein, melchoyce, ryan, mikeschroder, westonruter, pento, karmatosed, celloexpressions, obenland.
See #33755.
Built from https://develop.svn.wordpress.org/trunk@36698
git-svn-id: http://core.svn.wordpress.org/trunk@36665 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-02-24 17:10:26 -05:00
switch_to_blog ( $blog_id );
2016-10-13 18:28:28 -04:00
$switched_blog = true ;
Customize: Introduce Logo support for themes.
Allows a common theme feature to have a common implementation provided by core and available in a consistent location for users.
See https://make.wordpress.org/core/2016/02/24/theme-logo-support/
Props kwight, enejb, jeherve, bhubbard, samhotchkiss, zinigor, eliorivero, adamsilverstein, melchoyce, ryan, mikeschroder, westonruter, pento, karmatosed, celloexpressions, obenland.
See #33755.
Built from https://develop.svn.wordpress.org/trunk@36698
git-svn-id: http://core.svn.wordpress.org/trunk@36665 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-02-24 17:10:26 -05:00
}
2016-03-03 14:56:26 -05:00
$custom_logo_id = get_theme_mod ( 'custom_logo' );
Customize: Introduce Logo support for themes.
Allows a common theme feature to have a common implementation provided by core and available in a consistent location for users.
See https://make.wordpress.org/core/2016/02/24/theme-logo-support/
Props kwight, enejb, jeherve, bhubbard, samhotchkiss, zinigor, eliorivero, adamsilverstein, melchoyce, ryan, mikeschroder, westonruter, pento, karmatosed, celloexpressions, obenland.
See #33755.
Built from https://develop.svn.wordpress.org/trunk@36698
git-svn-id: http://core.svn.wordpress.org/trunk@36665 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-02-24 17:10:26 -05:00
2016-10-13 18:28:28 -04:00
if ( $switched_blog ) {
Customize: Introduce Logo support for themes.
Allows a common theme feature to have a common implementation provided by core and available in a consistent location for users.
See https://make.wordpress.org/core/2016/02/24/theme-logo-support/
Props kwight, enejb, jeherve, bhubbard, samhotchkiss, zinigor, eliorivero, adamsilverstein, melchoyce, ryan, mikeschroder, westonruter, pento, karmatosed, celloexpressions, obenland.
See #33755.
Built from https://develop.svn.wordpress.org/trunk@36698
git-svn-id: http://core.svn.wordpress.org/trunk@36665 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-02-24 17:10:26 -05:00
restore_current_blog ();
}
2016-03-03 14:56:26 -05:00
return ( bool ) $custom_logo_id ;
Customize: Introduce Logo support for themes.
Allows a common theme feature to have a common implementation provided by core and available in a consistent location for users.
See https://make.wordpress.org/core/2016/02/24/theme-logo-support/
Props kwight, enejb, jeherve, bhubbard, samhotchkiss, zinigor, eliorivero, adamsilverstein, melchoyce, ryan, mikeschroder, westonruter, pento, karmatosed, celloexpressions, obenland.
See #33755.
Built from https://develop.svn.wordpress.org/trunk@36698
git-svn-id: http://core.svn.wordpress.org/trunk@36665 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-02-24 17:10:26 -05:00
}
/**
2016-03-03 14:56:26 -05:00
* Returns a custom logo , linked to home .
Customize: Introduce Logo support for themes.
Allows a common theme feature to have a common implementation provided by core and available in a consistent location for users.
See https://make.wordpress.org/core/2016/02/24/theme-logo-support/
Props kwight, enejb, jeherve, bhubbard, samhotchkiss, zinigor, eliorivero, adamsilverstein, melchoyce, ryan, mikeschroder, westonruter, pento, karmatosed, celloexpressions, obenland.
See #33755.
Built from https://develop.svn.wordpress.org/trunk@36698
git-svn-id: http://core.svn.wordpress.org/trunk@36665 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-02-24 17:10:26 -05:00
*
* @ since 4.5 . 0
*
2016-03-10 12:45:25 -05:00
* @ param int $blog_id Optional . ID of the blog in question . Default is the ID of the current blog .
2016-03-03 14:56:26 -05:00
* @ return string Custom logo markup .
Customize: Introduce Logo support for themes.
Allows a common theme feature to have a common implementation provided by core and available in a consistent location for users.
See https://make.wordpress.org/core/2016/02/24/theme-logo-support/
Props kwight, enejb, jeherve, bhubbard, samhotchkiss, zinigor, eliorivero, adamsilverstein, melchoyce, ryan, mikeschroder, westonruter, pento, karmatosed, celloexpressions, obenland.
See #33755.
Built from https://develop.svn.wordpress.org/trunk@36698
git-svn-id: http://core.svn.wordpress.org/trunk@36665 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-02-24 17:10:26 -05:00
*/
2016-03-03 14:56:26 -05:00
function get_custom_logo ( $blog_id = 0 ) {
2017-11-30 18:11:00 -05:00
$html = '' ;
2016-10-13 18:28:28 -04:00
$switched_blog = false ;
Customize: Introduce Logo support for themes.
Allows a common theme feature to have a common implementation provided by core and available in a consistent location for users.
See https://make.wordpress.org/core/2016/02/24/theme-logo-support/
Props kwight, enejb, jeherve, bhubbard, samhotchkiss, zinigor, eliorivero, adamsilverstein, melchoyce, ryan, mikeschroder, westonruter, pento, karmatosed, celloexpressions, obenland.
See #33755.
Built from https://develop.svn.wordpress.org/trunk@36698
git-svn-id: http://core.svn.wordpress.org/trunk@36665 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-02-24 17:10:26 -05:00
2020-02-09 11:55:09 -05:00
if ( is_multisite () && ! empty ( $blog_id ) && get_current_blog_id () !== ( int ) $blog_id ) {
Customize: Introduce Logo support for themes.
Allows a common theme feature to have a common implementation provided by core and available in a consistent location for users.
See https://make.wordpress.org/core/2016/02/24/theme-logo-support/
Props kwight, enejb, jeherve, bhubbard, samhotchkiss, zinigor, eliorivero, adamsilverstein, melchoyce, ryan, mikeschroder, westonruter, pento, karmatosed, celloexpressions, obenland.
See #33755.
Built from https://develop.svn.wordpress.org/trunk@36698
git-svn-id: http://core.svn.wordpress.org/trunk@36665 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-02-24 17:10:26 -05:00
switch_to_blog ( $blog_id );
2016-10-13 18:28:28 -04:00
$switched_blog = true ;
Customize: Introduce Logo support for themes.
Allows a common theme feature to have a common implementation provided by core and available in a consistent location for users.
See https://make.wordpress.org/core/2016/02/24/theme-logo-support/
Props kwight, enejb, jeherve, bhubbard, samhotchkiss, zinigor, eliorivero, adamsilverstein, melchoyce, ryan, mikeschroder, westonruter, pento, karmatosed, celloexpressions, obenland.
See #33755.
Built from https://develop.svn.wordpress.org/trunk@36698
git-svn-id: http://core.svn.wordpress.org/trunk@36665 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-02-24 17:10:26 -05:00
}
2016-03-03 14:56:26 -05:00
$custom_logo_id = get_theme_mod ( 'custom_logo' );
2016-03-10 14:03:26 -05:00
Customize: Introduce Logo support for themes.
Allows a common theme feature to have a common implementation provided by core and available in a consistent location for users.
See https://make.wordpress.org/core/2016/02/24/theme-logo-support/
Props kwight, enejb, jeherve, bhubbard, samhotchkiss, zinigor, eliorivero, adamsilverstein, melchoyce, ryan, mikeschroder, westonruter, pento, karmatosed, celloexpressions, obenland.
See #33755.
Built from https://develop.svn.wordpress.org/trunk@36698
git-svn-id: http://core.svn.wordpress.org/trunk@36665 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-02-24 17:10:26 -05:00
// We have a logo. Logo is go.
2016-03-03 14:56:26 -05:00
if ( $custom_logo_id ) {
2017-05-22 16:29:42 -04:00
$custom_logo_attr = array (
2019-03-27 08:16:53 -04:00
'class' => 'custom-logo' ,
2017-05-22 16:29:42 -04:00
);
/*
* If the logo alt attribute is empty , get the site title and explicitly
* pass it to the attributes used by wp_get_attachment_image () .
*/
$image_alt = get_post_meta ( $custom_logo_id , '_wp_attachment_image_alt' , true );
if ( empty ( $image_alt ) ) {
$custom_logo_attr [ 'alt' ] = get_bloginfo ( 'name' , 'display' );
}
/*
* If the alt attribute is not empty , there ' s no need to explicitly pass
* it because wp_get_attachment_image () already adds the alt attribute .
*/
2017-11-30 18:11:00 -05:00
$html = sprintf (
2019-03-27 08:16:53 -04:00
'<a href="%1$s" class="custom-logo-link" rel="home">%2$s</a>' ,
Customize: Introduce Logo support for themes.
Allows a common theme feature to have a common implementation provided by core and available in a consistent location for users.
See https://make.wordpress.org/core/2016/02/24/theme-logo-support/
Props kwight, enejb, jeherve, bhubbard, samhotchkiss, zinigor, eliorivero, adamsilverstein, melchoyce, ryan, mikeschroder, westonruter, pento, karmatosed, celloexpressions, obenland.
See #33755.
Built from https://develop.svn.wordpress.org/trunk@36698
git-svn-id: http://core.svn.wordpress.org/trunk@36665 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-02-24 17:10:26 -05:00
esc_url ( home_url ( '/' ) ),
2017-05-22 16:29:42 -04:00
wp_get_attachment_image ( $custom_logo_id , 'full' , false , $custom_logo_attr )
Customize: Introduce Logo support for themes.
Allows a common theme feature to have a common implementation provided by core and available in a consistent location for users.
See https://make.wordpress.org/core/2016/02/24/theme-logo-support/
Props kwight, enejb, jeherve, bhubbard, samhotchkiss, zinigor, eliorivero, adamsilverstein, melchoyce, ryan, mikeschroder, westonruter, pento, karmatosed, celloexpressions, obenland.
See #33755.
Built from https://develop.svn.wordpress.org/trunk@36698
git-svn-id: http://core.svn.wordpress.org/trunk@36665 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-02-24 17:10:26 -05:00
);
2019-01-11 01:40:50 -05:00
} elseif ( is_customize_preview () ) {
// If no logo is set but we're in the Customizer, leave a placeholder (needed for the live preview).
2017-11-30 18:11:00 -05:00
$html = sprintf (
'<a href="%1$s" class="custom-logo-link" style="display:none;"><img class="custom-logo"/></a>' ,
2016-03-30 13:20:27 -04:00
esc_url ( home_url ( '/' ) )
Customize: Introduce Logo support for themes.
Allows a common theme feature to have a common implementation provided by core and available in a consistent location for users.
See https://make.wordpress.org/core/2016/02/24/theme-logo-support/
Props kwight, enejb, jeherve, bhubbard, samhotchkiss, zinigor, eliorivero, adamsilverstein, melchoyce, ryan, mikeschroder, westonruter, pento, karmatosed, celloexpressions, obenland.
See #33755.
Built from https://develop.svn.wordpress.org/trunk@36698
git-svn-id: http://core.svn.wordpress.org/trunk@36665 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-02-24 17:10:26 -05:00
);
}
2016-10-13 18:28:28 -04:00
if ( $switched_blog ) {
2016-03-10 13:57:26 -05:00
restore_current_blog ();
}
Customize: Introduce Logo support for themes.
Allows a common theme feature to have a common implementation provided by core and available in a consistent location for users.
See https://make.wordpress.org/core/2016/02/24/theme-logo-support/
Props kwight, enejb, jeherve, bhubbard, samhotchkiss, zinigor, eliorivero, adamsilverstein, melchoyce, ryan, mikeschroder, westonruter, pento, karmatosed, celloexpressions, obenland.
See #33755.
Built from https://develop.svn.wordpress.org/trunk@36698
git-svn-id: http://core.svn.wordpress.org/trunk@36665 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-02-24 17:10:26 -05:00
/**
2016-05-22 14:26:53 -04:00
* Filters the custom logo output .
Customize: Introduce Logo support for themes.
Allows a common theme feature to have a common implementation provided by core and available in a consistent location for users.
See https://make.wordpress.org/core/2016/02/24/theme-logo-support/
Props kwight, enejb, jeherve, bhubbard, samhotchkiss, zinigor, eliorivero, adamsilverstein, melchoyce, ryan, mikeschroder, westonruter, pento, karmatosed, celloexpressions, obenland.
See #33755.
Built from https://develop.svn.wordpress.org/trunk@36698
git-svn-id: http://core.svn.wordpress.org/trunk@36665 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-02-24 17:10:26 -05:00
*
* @ since 4.5 . 0
2016-06-06 17:24:27 -04:00
* @ since 4.6 . 0 Added the `$blog_id` parameter .
Customize: Introduce Logo support for themes.
Allows a common theme feature to have a common implementation provided by core and available in a consistent location for users.
See https://make.wordpress.org/core/2016/02/24/theme-logo-support/
Props kwight, enejb, jeherve, bhubbard, samhotchkiss, zinigor, eliorivero, adamsilverstein, melchoyce, ryan, mikeschroder, westonruter, pento, karmatosed, celloexpressions, obenland.
See #33755.
Built from https://develop.svn.wordpress.org/trunk@36698
git-svn-id: http://core.svn.wordpress.org/trunk@36665 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-02-24 17:10:26 -05:00
*
2016-06-06 17:24:27 -04:00
* @ param string $html Custom logo HTML output .
* @ param int $blog_id ID of the blog to get the custom logo for .
Customize: Introduce Logo support for themes.
Allows a common theme feature to have a common implementation provided by core and available in a consistent location for users.
See https://make.wordpress.org/core/2016/02/24/theme-logo-support/
Props kwight, enejb, jeherve, bhubbard, samhotchkiss, zinigor, eliorivero, adamsilverstein, melchoyce, ryan, mikeschroder, westonruter, pento, karmatosed, celloexpressions, obenland.
See #33755.
Built from https://develop.svn.wordpress.org/trunk@36698
git-svn-id: http://core.svn.wordpress.org/trunk@36665 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-02-24 17:10:26 -05:00
*/
2016-06-06 17:24:27 -04:00
return apply_filters ( 'get_custom_logo' , $html , $blog_id );
Customize: Introduce Logo support for themes.
Allows a common theme feature to have a common implementation provided by core and available in a consistent location for users.
See https://make.wordpress.org/core/2016/02/24/theme-logo-support/
Props kwight, enejb, jeherve, bhubbard, samhotchkiss, zinigor, eliorivero, adamsilverstein, melchoyce, ryan, mikeschroder, westonruter, pento, karmatosed, celloexpressions, obenland.
See #33755.
Built from https://develop.svn.wordpress.org/trunk@36698
git-svn-id: http://core.svn.wordpress.org/trunk@36665 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-02-24 17:10:26 -05:00
}
/**
2016-03-03 14:56:26 -05:00
* Displays a custom logo , linked to home .
Customize: Introduce Logo support for themes.
Allows a common theme feature to have a common implementation provided by core and available in a consistent location for users.
See https://make.wordpress.org/core/2016/02/24/theme-logo-support/
Props kwight, enejb, jeherve, bhubbard, samhotchkiss, zinigor, eliorivero, adamsilverstein, melchoyce, ryan, mikeschroder, westonruter, pento, karmatosed, celloexpressions, obenland.
See #33755.
Built from https://develop.svn.wordpress.org/trunk@36698
git-svn-id: http://core.svn.wordpress.org/trunk@36665 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-02-24 17:10:26 -05:00
*
* @ since 4.5 . 0
*
2016-03-10 12:46:27 -05:00
* @ param int $blog_id Optional . ID of the blog in question . Default is the ID of the current blog .
Customize: Introduce Logo support for themes.
Allows a common theme feature to have a common implementation provided by core and available in a consistent location for users.
See https://make.wordpress.org/core/2016/02/24/theme-logo-support/
Props kwight, enejb, jeherve, bhubbard, samhotchkiss, zinigor, eliorivero, adamsilverstein, melchoyce, ryan, mikeschroder, westonruter, pento, karmatosed, celloexpressions, obenland.
See #33755.
Built from https://develop.svn.wordpress.org/trunk@36698
git-svn-id: http://core.svn.wordpress.org/trunk@36665 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-02-24 17:10:26 -05:00
*/
2016-03-03 14:56:26 -05:00
function the_custom_logo ( $blog_id = 0 ) {
echo get_custom_logo ( $blog_id );
Customize: Introduce Logo support for themes.
Allows a common theme feature to have a common implementation provided by core and available in a consistent location for users.
See https://make.wordpress.org/core/2016/02/24/theme-logo-support/
Props kwight, enejb, jeherve, bhubbard, samhotchkiss, zinigor, eliorivero, adamsilverstein, melchoyce, ryan, mikeschroder, westonruter, pento, karmatosed, celloexpressions, obenland.
See #33755.
Built from https://develop.svn.wordpress.org/trunk@36698
git-svn-id: http://core.svn.wordpress.org/trunk@36665 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2016-02-24 17:10:26 -05:00
}
2014-10-28 17:12:22 -04:00
/**
2015-10-20 12:21:25 -04:00
* Returns document title for the current page .
2014-10-28 17:12:22 -04:00
*
2015-10-20 12:21:25 -04:00
* @ since 4.4 . 0
2014-11-28 06:50:22 -05:00
*
2015-10-20 12:21:25 -04:00
* @ global int $page Page number of a single post .
* @ global int $paged Page number of a list of posts .
*
* @ return string Tag with the document title .
2014-10-28 17:12:22 -04:00
*/
2015-10-20 12:21:25 -04:00
function wp_get_document_title () {
2014-10-28 17:12:22 -04:00
2015-10-20 12:21:25 -04:00
/**
2016-05-22 14:26:53 -04:00
* Filters the document title before it is generated .
2015-10-20 14:14:24 -04:00
*
* Passing a non - empty value will short - circuit wp_get_document_title (),
* returning that value instead .
2015-10-20 12:21:25 -04:00
*
* @ since 4.4 . 0
*
* @ param string $title The document title . Default empty string .
*/
$title = apply_filters ( 'pre_get_document_title' , '' );
if ( ! empty ( $title ) ) {
return $title ;
2014-10-28 17:12:22 -04:00
}
2015-10-20 12:21:25 -04:00
global $page , $paged ;
2014-10-28 17:12:22 -04:00
2015-10-20 12:21:25 -04:00
$title = array (
'title' => '' ,
);
2005-10-17 19:41:28 -04:00
2015-11-19 12:09:26 -05:00
// If it's a 404 page, use a "Page not found" title.
if ( is_404 () ) {
$title [ 'title' ] = __ ( 'Page not found' );
2017-11-30 18:11:00 -05:00
// If it's a search, use a dynamic search results title.
2015-11-19 12:09:26 -05:00
} elseif ( is_search () ) {
2019-09-02 20:41:05 -04:00
/* translators: %s: Search query. */
2015-11-19 12:09:26 -05:00
$title [ 'title' ] = sprintf ( __ ( 'Search Results for “%s”' ), get_search_query () );
2017-11-30 18:11:00 -05:00
// If on the front page, use the site title.
2016-01-04 12:16:27 -05:00
} elseif ( is_front_page () ) {
2015-10-20 12:21:25 -04:00
$title [ 'title' ] = get_bloginfo ( 'name' , 'display' );
2005-10-17 19:41:28 -04:00
2017-11-30 18:11:00 -05:00
// If on a post type archive, use the post type archive title.
2015-11-19 12:09:26 -05:00
} elseif ( is_post_type_archive () ) {
$title [ 'title' ] = post_type_archive_title ( '' , false );
2017-11-30 18:11:00 -05:00
// If on a taxonomy archive, use the term title.
2015-11-19 12:09:26 -05:00
} elseif ( is_tax () ) {
$title [ 'title' ] = single_term_title ( '' , false );
2017-11-30 18:11:00 -05:00
/*
2020-01-28 19:45:18 -05:00
* If we ' re on the blog page that is not the homepage
* or a single post of any post type , use the post title .
2017-11-30 18:11:00 -05:00
*/
2016-01-04 12:16:27 -05:00
} elseif ( is_home () || is_singular () ) {
2015-10-20 12:21:25 -04:00
$title [ 'title' ] = single_post_title ( '' , false );
2005-10-17 19:41:28 -04:00
2017-11-30 18:11:00 -05:00
// If on a category or tag archive, use the term title.
2015-11-19 12:09:26 -05:00
} elseif ( is_category () || is_tag () ) {
2015-10-20 12:21:25 -04:00
$title [ 'title' ] = single_term_title ( '' , false );
2013-09-06 18:07:09 -04:00
2017-11-30 18:11:00 -05:00
// If on an author archive, use the author's display name.
2019-07-02 19:42:58 -04:00
} elseif ( is_author () && get_queried_object () ) {
$author = get_queried_object ();
2015-11-19 12:09:26 -05:00
$title [ 'title' ] = $author -> display_name ;
2005-11-10 19:48:31 -05:00
2017-11-30 18:11:00 -05:00
// If it's a date archive, use the date as the title.
2015-10-20 12:21:25 -04:00
} elseif ( is_year () ) {
$title [ 'title' ] = get_the_date ( _x ( 'Y' , 'yearly archives date format' ) );
2010-10-15 15:44:57 -04:00
2015-10-20 12:21:25 -04:00
} elseif ( is_month () ) {
$title [ 'title' ] = get_the_date ( _x ( 'F Y' , 'monthly archives date format' ) );
2005-10-17 19:41:28 -04:00
2015-10-20 12:21:25 -04:00
} elseif ( is_day () ) {
$title [ 'title' ] = get_the_date ();
2009-02-27 12:46:13 -05:00
}
2008-05-15 23:57:09 -04:00
2015-10-20 12:21:25 -04:00
// Add a page number if necessary.
if ( ( $paged >= 2 || $page >= 2 ) && ! is_404 () ) {
2019-09-02 20:41:05 -04:00
/* translators: %s: Page number. */
2015-10-20 12:21:25 -04:00
$title [ 'page' ] = sprintf ( __ ( 'Page %s' ), max ( $paged , $page ) );
2008-10-26 09:11:34 -04:00
}
2008-12-09 13:03:31 -05:00
2015-10-20 12:21:25 -04:00
// Append the description or site title to give context.
2016-01-04 12:16:27 -05:00
if ( is_front_page () ) {
2015-10-20 12:21:25 -04:00
$title [ 'tagline' ] = get_bloginfo ( 'description' , 'display' );
} else {
$title [ 'site' ] = get_bloginfo ( 'name' , 'display' );
}
2005-12-05 18:57:41 -05:00
2014-06-04 20:28:15 -04:00
/**
2016-05-22 14:26:53 -04:00
* Filters the separator for the document title .
2014-06-04 20:28:15 -04:00
*
2015-10-20 12:21:25 -04:00
* @ since 4.4 . 0
2014-06-04 20:28:15 -04:00
*
2015-10-20 14:37:54 -04:00
* @ param string $sep Document title separator . Default '-' .
2014-06-04 20:28:15 -04:00
*/
2015-10-20 12:21:25 -04:00
$sep = apply_filters ( 'document_title_separator' , '-' );
2014-10-28 17:12:22 -04:00
2014-04-15 00:01:15 -04:00
/**
2016-05-22 14:26:53 -04:00
* Filters the parts of the document title .
2015-10-20 12:21:25 -04:00
*
* @ since 4.4 . 0
2014-04-15 00:01:15 -04:00
*
2015-10-20 12:21:25 -04:00
* @ param array $title {
* The document title parts .
2014-04-15 00:01:15 -04:00
*
2015-10-20 12:21:25 -04:00
* @ type string $title Title of the viewed page .
* @ type string $page Optional . Page number if paginated .
* @ type string $tagline Optional . Site description when on home page .
* @ type string $site Optional . Site title when not on home page .
* }
2014-04-15 00:01:15 -04:00
*/
2015-10-20 12:21:25 -04:00
$title = apply_filters ( 'document_title_parts' , $title );
2005-12-05 18:57:41 -05:00
2015-10-20 12:21:25 -04:00
$title = implode ( " $sep " , array_filter ( $title ) );
$title = wptexturize ( $title );
$title = convert_chars ( $title );
$title = esc_html ( $title );
$title = capital_P_dangit ( $title );
2008-01-02 15:45:17 -05:00
2015-10-20 12:21:25 -04:00
return $title ;
}
/**
* Displays title tag with content .
*
* @ ignore
* @ since 4.1 . 0
* @ since 4.4 . 0 Improved title output replaced `wp_title()` .
* @ access private
*/
function _wp_render_title_tag () {
if ( ! current_theme_supports ( 'title-tag' ) ) {
return ;
}
echo '<title>' . wp_get_document_title () . '</title>' . " \n " ;
2004-01-27 04:58:01 -05:00
}
2015-11-11 18:50:25 -05:00
/**
* Display or retrieve page title for all areas of blog .
*
* By default , the page title will display the separator before the page title ,
* so that the blog title will be before the page title . This is not good for
* title display , since the blog title shows up on most tabs and not what is
* important , which is the page that the user is looking at .
*
* There are also SEO benefits to having the blog title after or to the 'right'
2016-07-22 06:45:29 -04:00
* of the page title . However , it is mostly common sense to have the blog title
2015-11-11 18:50:25 -05:00
* to the right with most browsers supporting tabs . You can achieve this by
* using the seplocation parameter and setting the value to 'right' . This change
2016-05-13 14:41:31 -04:00
* was introduced around 2.5 . 0 , in case backward compatibility of themes is
2015-11-11 18:50:25 -05:00
* important .
*
* @ since 1.0 . 0
*
2019-08-03 21:46:55 -04:00
* @ global WP_Locale $wp_locale WordPress date and time locale object .
2015-11-11 18:50:25 -05:00
*
* @ param string $sep Optional , default is '»' . How to separate the various items
* within the page title .
* @ param bool $display Optional , default is true . Whether to display or retrieve title .
2019-05-24 18:59:52 -04:00
* @ param string $seplocation Optional . Location of the separator ( 'left' or 'right' ) .
2015-11-11 18:50:25 -05:00
* @ return string | null String on retrieve , null when displaying .
*/
function wp_title ( $sep = '»' , $display = true , $seplocation = '' ) {
global $wp_locale ;
$m = get_query_var ( 'm' );
$year = get_query_var ( 'year' );
$monthnum = get_query_var ( 'monthnum' );
$day = get_query_var ( 'day' );
$search = get_query_var ( 's' );
$title = '' ;
2020-01-28 19:45:18 -05:00
$t_sep = '%WP_TITLE_SEP%' ; // Temporary separator, for accurate flipping, if necessary.
2015-11-11 18:50:25 -05:00
2020-01-28 19:45:18 -05:00
// If there is a post.
2015-11-11 18:50:25 -05:00
if ( is_single () || ( is_home () && ! is_front_page () ) || ( is_page () && ! is_front_page () ) ) {
$title = single_post_title ( '' , false );
}
2020-01-28 19:45:18 -05:00
// If there's a post type archive.
2015-11-11 18:50:25 -05:00
if ( is_post_type_archive () ) {
$post_type = get_query_var ( 'post_type' );
if ( is_array ( $post_type ) ) {
$post_type = reset ( $post_type );
}
$post_type_object = get_post_type_object ( $post_type );
if ( ! $post_type_object -> has_archive ) {
$title = post_type_archive_title ( '' , false );
}
}
2020-01-28 19:45:18 -05:00
// If there's a category or tag.
2015-11-11 18:50:25 -05:00
if ( is_category () || is_tag () ) {
$title = single_term_title ( '' , false );
}
2020-01-28 19:45:18 -05:00
// If there's a taxonomy.
2015-11-11 18:50:25 -05:00
if ( is_tax () ) {
$term = get_queried_object ();
if ( $term ) {
$tax = get_taxonomy ( $term -> taxonomy );
$title = single_term_title ( $tax -> labels -> name . $t_sep , false );
}
}
2020-01-28 19:45:18 -05:00
// If there's an author.
2015-11-11 18:50:25 -05:00
if ( is_author () && ! is_post_type_archive () ) {
$author = get_queried_object ();
if ( $author ) {
$title = $author -> display_name ;
}
}
// Post type archives with has_archive should override terms.
if ( is_post_type_archive () && $post_type_object -> has_archive ) {
$title = post_type_archive_title ( '' , false );
}
2020-01-28 19:45:18 -05:00
// If there's a month.
2015-11-11 18:50:25 -05:00
if ( is_archive () && ! empty ( $m ) ) {
$my_year = substr ( $m , 0 , 4 );
$my_month = $wp_locale -> get_month ( substr ( $m , 4 , 2 ) );
$my_day = intval ( substr ( $m , 6 , 2 ) );
$title = $my_year . ( $my_month ? $t_sep . $my_month : '' ) . ( $my_day ? $t_sep . $my_day : '' );
}
2020-01-28 19:45:18 -05:00
// If there's a year.
2015-11-11 18:50:25 -05:00
if ( is_archive () && ! empty ( $year ) ) {
$title = $year ;
if ( ! empty ( $monthnum ) ) {
$title .= $t_sep . $wp_locale -> get_month ( $monthnum );
}
if ( ! empty ( $day ) ) {
$title .= $t_sep . zeroise ( $day , 2 );
}
}
2020-01-28 19:45:18 -05:00
// If it's a search.
2015-11-11 18:50:25 -05:00
if ( is_search () ) {
2019-09-02 20:41:05 -04:00
/* translators: 1: Separator, 2: Search query. */
2015-11-11 18:50:25 -05:00
$title = sprintf ( __ ( 'Search Results %1$s %2$s' ), $t_sep , strip_tags ( $search ) );
}
2020-01-28 19:45:18 -05:00
// If it's a 404 page.
2015-11-11 18:50:25 -05:00
if ( is_404 () ) {
$title = __ ( 'Page not found' );
}
$prefix = '' ;
if ( ! empty ( $title ) ) {
$prefix = " $sep " ;
}
/**
2016-05-22 14:26:53 -04:00
* Filters the parts of the page title .
2015-11-11 18:50:25 -05:00
*
* @ since 4.0 . 0
*
2019-10-26 17:09:04 -04:00
* @ param string [] $title_array Array of parts of the page title .
2015-11-11 18:50:25 -05:00
*/
$title_array = apply_filters ( 'wp_title_parts' , explode ( $t_sep , $title ) );
2020-01-28 19:45:18 -05:00
// Determines position of the separator and direction of the breadcrumb.
if ( 'right' == $seplocation ) { // Separator on right, so reverse the order.
2015-11-11 18:50:25 -05:00
$title_array = array_reverse ( $title_array );
$title = implode ( " $sep " , $title_array ) . $prefix ;
} else {
$title = $prefix . implode ( " $sep " , $title_array );
}
/**
2016-05-22 14:26:53 -04:00
* Filters the text of the page title .
2015-11-11 18:50:25 -05:00
*
* @ since 2.0 . 0
*
2019-05-24 18:59:52 -04:00
* @ param string $title Page title .
* @ param string $sep Title separator .
* @ param string $seplocation Location of the separator ( 'left' or 'right' ) .
2015-11-11 18:50:25 -05:00
*/
$title = apply_filters ( 'wp_title' , $title , $sep , $seplocation );
2020-01-28 19:45:18 -05:00
// Send it out.
2015-11-11 18:50:25 -05:00
if ( $display ) {
echo $title ;
} else {
return $title ;
}
}
2008-09-05 15:19:01 -04:00
/**
2008-09-12 00:31:41 -04:00
* Display or retrieve page title for post .
*
* This is optimized for single . php template file for displaying the post title .
2008-09-05 15:19:01 -04:00
*
2008-09-12 00:31:41 -04:00
* It does not support placing the separator after the title , but by leaving the
* prefix parameter empty , you can set the title separator manually . The prefix
* does not automatically place a space between the prefix , so if there should
* be a space , the parameter value will need to have it at the end .
2008-09-05 15:19:01 -04:00
*
* @ since 0.71
*
2015-05-25 13:18:26 -04:00
* @ param string $prefix Optional . What to display before the title .
* @ param bool $display Optional , default is true . Whether to display or retrieve title .
* @ return string | void Title when retrieving .
2008-09-05 15:19:01 -04:00
*/
2015-05-25 13:18:26 -04:00
function single_post_title ( $prefix = '' , $display = true ) {
2010-12-30 16:10:45 -05:00
$_post = get_queried_object ();
2010-02-28 08:00:27 -05:00
2017-11-30 18:11:00 -05:00
if ( ! isset ( $_post -> post_title ) ) {
2010-02-28 08:00:27 -05:00
return ;
2017-11-30 18:11:00 -05:00
}
2010-02-28 08:00:27 -05:00
2014-04-15 00:01:15 -04:00
/**
2016-05-22 14:26:53 -04:00
* Filters the page title for a single post .
2014-04-15 00:01:15 -04:00
*
* @ since 0.71
*
2019-12-06 17:43:04 -05:00
* @ param string $_post_title The single post page title .
* @ param WP_Post $_post The current post .
2014-04-15 00:01:15 -04:00
*/
$title = apply_filters ( 'single_post_title' , $_post -> post_title , $_post );
2017-11-30 18:11:00 -05:00
if ( $display ) {
2010-02-27 13:57:04 -05:00
echo $prefix . $title ;
2017-11-30 18:11:00 -05:00
} else {
2013-08-16 16:54:10 -04:00
return $prefix . $title ;
2017-11-30 18:11:00 -05:00
}
2004-01-27 04:58:01 -05:00
}
2010-10-15 15:44:57 -04:00
/**
* Display or retrieve title for a post type archive .
*
* This is optimized for archive . php and archive - { $post_type } . php template files
* for displaying the title of the post type .
*
* @ since 3.1 . 0
*
2015-05-25 13:18:26 -04:00
* @ param string $prefix Optional . What to display before the title .
* @ param bool $display Optional , default is true . Whether to display or retrieve title .
* @ return string | void Title when retrieving , null when displaying or failure .
2010-10-15 15:44:57 -04:00
*/
2010-11-05 17:14:43 -04:00
function post_type_archive_title ( $prefix = '' , $display = true ) {
2017-11-30 18:11:00 -05:00
if ( ! is_post_type_archive () ) {
2010-10-15 15:44:57 -04:00
return ;
2017-11-30 18:11:00 -05:00
}
2010-10-15 15:44:57 -04:00
2013-09-09 23:02:10 -04:00
$post_type = get_query_var ( 'post_type' );
2017-11-30 18:11:00 -05:00
if ( is_array ( $post_type ) ) {
2013-09-09 23:02:10 -04:00
$post_type = reset ( $post_type );
2017-11-30 18:11:00 -05:00
}
2013-09-09 23:02:10 -04:00
$post_type_obj = get_post_type_object ( $post_type );
2014-04-15 00:01:15 -04:00
2013-11-28 00:24:09 -05:00
/**
2016-05-22 14:26:53 -04:00
* Filters the post type archive title .
2013-11-28 00:24:09 -05:00
*
* @ since 3.1 . 0
*
* @ param string $post_type_name Post type 'name' label .
* @ param string $post_type Post type .
*/
$title = apply_filters ( 'post_type_archive_title' , $post_type_obj -> labels -> name , $post_type );
2010-10-15 15:44:57 -04:00
2017-11-30 18:11:00 -05:00
if ( $display ) {
2010-10-15 15:44:57 -04:00
echo $prefix . $title ;
2017-11-30 18:11:00 -05:00
} else {
2013-08-16 16:54:10 -04:00
return $prefix . $title ;
2017-11-30 18:11:00 -05:00
}
2010-10-15 15:44:57 -04:00
}
2010-10-19 03:48:22 -04:00
2008-09-05 15:19:01 -04:00
/**
2008-09-12 00:31:41 -04:00
* Display or retrieve page title for category archive .
2008-09-05 15:19:01 -04:00
*
2015-10-20 12:21:25 -04:00
* Useful for category template files for displaying the category page title .
* The prefix does not automatically place a space between the prefix , so if
* there should be a space , the parameter value will need to have it at the end .
2008-09-05 15:19:01 -04:00
*
* @ since 0.71
*
2015-05-25 13:18:26 -04:00
* @ param string $prefix Optional . What to display before the title .
* @ param bool $display Optional , default is true . Whether to display or retrieve title .
* @ return string | void Title when retrieving .
2008-09-05 15:19:01 -04:00
*/
2010-09-08 12:21:13 -04:00
function single_cat_title ( $prefix = '' , $display = true ) {
return single_term_title ( $prefix , $display );
2004-01-27 04:58:01 -05:00
}
2008-09-05 15:19:01 -04:00
/**
2008-09-12 00:31:41 -04:00
* Display or retrieve page title for tag post archive .
*
2015-10-20 12:21:25 -04:00
* Useful for tag template files for displaying the tag page title . The prefix
2008-09-12 00:31:41 -04:00
* does not automatically place a space between the prefix , so if there should
* be a space , the parameter value will need to have it at the end .
2008-09-05 15:19:01 -04:00
*
* @ since 2.3 . 0
*
2015-05-25 13:18:26 -04:00
* @ param string $prefix Optional . What to display before the title .
* @ param bool $display Optional , default is true . Whether to display or retrieve title .
* @ return string | void Title when retrieving .
2008-09-05 15:19:01 -04:00
*/
2010-09-08 12:21:13 -04:00
function single_tag_title ( $prefix = '' , $display = true ) {
return single_term_title ( $prefix , $display );
}
/**
* Display or retrieve page title for taxonomy term archive .
*
* Useful for taxonomy term template files for displaying the taxonomy term page title .
2015-10-20 12:21:25 -04:00
* The prefix does not automatically place a space between the prefix , so if there should
2010-09-08 12:21:13 -04:00
* be a space , the parameter value will need to have it at the end .
*
* @ since 3.1 . 0
*
2015-05-25 13:18:26 -04:00
* @ param string $prefix Optional . What to display before the title .
* @ param bool $display Optional , default is true . Whether to display or retrieve title .
* @ return string | void Title when retrieving .
2010-09-08 12:21:13 -04:00
*/
function single_term_title ( $prefix = '' , $display = true ) {
2010-10-31 07:02:17 -04:00
$term = get_queried_object ();
2010-09-08 12:21:13 -04:00
2017-11-30 18:11:00 -05:00
if ( ! $term ) {
2007-09-11 14:06:52 -04:00
return ;
2017-11-30 18:11:00 -05:00
}
2007-09-11 14:06:52 -04:00
2014-04-15 00:01:15 -04:00
if ( is_category () ) {
/**
2016-05-22 14:26:53 -04:00
* Filters the category archive page title .
2014-04-15 00:01:15 -04:00
*
* @ since 2.0 . 10
*
* @ param string $term_name Category name for archive being displayed .
*/
2010-09-08 12:21:13 -04:00
$term_name = apply_filters ( 'single_cat_title' , $term -> name );
2014-04-15 00:01:15 -04:00
} elseif ( is_tag () ) {
/**
2016-05-22 14:26:53 -04:00
* Filters the tag archive page title .
2014-04-15 00:01:15 -04:00
*
* @ since 2.3 . 0
*
* @ param string $term_name Tag name for archive being displayed .
*/
2010-09-08 12:21:13 -04:00
$term_name = apply_filters ( 'single_tag_title' , $term -> name );
2014-04-15 00:01:15 -04:00
} elseif ( is_tax () ) {
/**
2016-05-22 14:26:53 -04:00
* Filters the custom taxonomy archive page title .
2014-04-15 00:01:15 -04:00
*
* @ since 3.1 . 0
*
* @ param string $term_name Term name for archive being displayed .
*/
2010-09-08 12:21:13 -04:00
$term_name = apply_filters ( 'single_term_title' , $term -> name );
2014-04-15 00:01:15 -04:00
} else {
2010-09-08 12:21:13 -04:00
return ;
2014-04-15 00:01:15 -04:00
}
2010-02-20 19:03:42 -05:00
2017-11-30 18:11:00 -05:00
if ( empty ( $term_name ) ) {
2010-02-19 05:45:29 -05:00
return ;
2017-11-30 18:11:00 -05:00
}
2010-02-14 02:38:00 -05:00
2017-11-30 18:11:00 -05:00
if ( $display ) {
2010-09-08 12:21:13 -04:00
echo $prefix . $term_name ;
2017-11-30 18:11:00 -05:00
} else {
2013-08-16 16:54:10 -04:00
return $prefix . $term_name ;
2017-11-30 18:11:00 -05:00
}
2007-08-21 14:39:45 -04:00
}
2008-09-05 15:19:01 -04:00
/**
2008-09-12 00:31:41 -04:00
* Display or retrieve page title for post archive based on date .
2008-09-05 15:19:01 -04:00
*
2015-10-20 12:21:25 -04:00
* Useful for when the template only needs to display the month and year ,
* if either are available . The prefix does not automatically place a space
* between the prefix , so if there should be a space , the parameter value
* will need to have it at the end .
2008-09-05 15:19:01 -04:00
*
* @ since 0.71
*
2019-08-03 21:46:55 -04:00
* @ global WP_Locale $wp_locale WordPress date and time locale object .
2015-05-25 13:18:26 -04:00
*
* @ param string $prefix Optional . What to display before the title .
* @ param bool $display Optional , default is true . Whether to display or retrieve title .
* @ return string | void Title when retrieving .
2008-09-05 15:19:01 -04:00
*/
2017-11-30 18:11:00 -05:00
function single_month_title ( $prefix = '' , $display = true ) {
2007-03-08 23:06:23 -05:00
global $wp_locale ;
2017-11-30 18:11:00 -05:00
$m = get_query_var ( 'm' );
$year = get_query_var ( 'year' );
$monthnum = get_query_var ( 'monthnum' );
2007-03-08 23:06:23 -05:00
2017-11-30 18:11:00 -05:00
if ( ! empty ( $monthnum ) && ! empty ( $year ) ) {
$my_year = $year ;
$my_month = $wp_locale -> get_month ( $monthnum );
} elseif ( ! empty ( $m ) ) {
$my_year = substr ( $m , 0 , 4 );
$my_month = $wp_locale -> get_month ( substr ( $m , 4 , 2 ) );
2004-10-18 19:52:36 -04:00
}
2017-11-30 18:11:00 -05:00
if ( empty ( $my_month ) ) {
2006-10-04 23:12:24 -04:00
return false ;
2017-11-30 18:11:00 -05:00
}
2006-10-04 23:12:24 -04:00
$result = $prefix . $my_month . $prefix . $my_year ;
2017-11-30 18:11:00 -05:00
if ( ! $display ) {
2006-10-04 23:12:24 -04:00
return $result ;
2017-11-30 18:11:00 -05:00
}
2006-10-04 23:12:24 -04:00
echo $result ;
2004-01-27 04:58:01 -05:00
}
2014-11-03 19:35:22 -05:00
/**
* Display the archive title based on the queried object .
*
* @ since 4.1 . 0
*
2014-11-04 01:52:23 -05:00
* @ see get_the_archive_title ()
*
* @ param string $before Optional . Content to prepend to the title . Default empty .
* @ param string $after Optional . Content to append to the title . Default empty .
2014-11-03 19:35:22 -05:00
*/
function the_archive_title ( $before = '' , $after = '' ) {
$title = get_the_archive_title ();
if ( ! empty ( $title ) ) {
echo $before . $title . $after ;
}
}
/**
* Retrieve the archive title based on the queried object .
*
* @ since 4.1 . 0
*
* @ return string Archive title .
*/
function get_the_archive_title () {
2019-08-15 20:24:54 -04:00
$title = __ ( 'Archives' );
2014-11-03 19:35:22 -05:00
if ( is_category () ) {
2019-09-02 20:41:05 -04:00
/* translators: Category archive title. %s: Category name. */
2014-11-03 19:35:22 -05:00
$title = sprintf ( __ ( 'Category: %s' ), single_cat_title ( '' , false ) );
} elseif ( is_tag () ) {
2019-09-02 20:41:05 -04:00
/* translators: Tag archive title. %s: Tag name. */
2014-11-03 19:35:22 -05:00
$title = sprintf ( __ ( 'Tag: %s' ), single_tag_title ( '' , false ) );
} elseif ( is_author () ) {
2019-09-02 20:41:05 -04:00
/* translators: Author archive title. %s: Author name. */
2014-11-03 19:35:22 -05:00
$title = sprintf ( __ ( 'Author: %s' ), '<span class="vcard">' . get_the_author () . '</span>' );
} elseif ( is_year () ) {
2019-09-02 20:41:05 -04:00
/* translators: Yearly archive title. %s: Year. */
2014-11-03 19:35:22 -05:00
$title = sprintf ( __ ( 'Year: %s' ), get_the_date ( _x ( 'Y' , 'yearly archives date format' ) ) );
} elseif ( is_month () ) {
2019-09-02 20:41:05 -04:00
/* translators: Monthly archive title. %s: Month name and year. */
2014-11-03 19:35:22 -05:00
$title = sprintf ( __ ( 'Month: %s' ), get_the_date ( _x ( 'F Y' , 'monthly archives date format' ) ) );
} elseif ( is_day () ) {
2019-09-02 20:41:05 -04:00
/* translators: Daily archive title. %s: Date. */
2014-11-03 19:35:22 -05:00
$title = sprintf ( __ ( 'Day: %s' ), get_the_date ( _x ( 'F j, Y' , 'daily archives date format' ) ) );
2014-12-15 02:32:26 -05:00
} elseif ( is_tax ( 'post_format' ) ) {
if ( is_tax ( 'post_format' , 'post-format-aside' ) ) {
$title = _x ( 'Asides' , 'post format archive title' );
} elseif ( is_tax ( 'post_format' , 'post-format-gallery' ) ) {
$title = _x ( 'Galleries' , 'post format archive title' );
} elseif ( is_tax ( 'post_format' , 'post-format-image' ) ) {
$title = _x ( 'Images' , 'post format archive title' );
} elseif ( is_tax ( 'post_format' , 'post-format-video' ) ) {
$title = _x ( 'Videos' , 'post format archive title' );
} elseif ( is_tax ( 'post_format' , 'post-format-quote' ) ) {
$title = _x ( 'Quotes' , 'post format archive title' );
} elseif ( is_tax ( 'post_format' , 'post-format-link' ) ) {
$title = _x ( 'Links' , 'post format archive title' );
} elseif ( is_tax ( 'post_format' , 'post-format-status' ) ) {
$title = _x ( 'Statuses' , 'post format archive title' );
} elseif ( is_tax ( 'post_format' , 'post-format-audio' ) ) {
$title = _x ( 'Audio' , 'post format archive title' );
} elseif ( is_tax ( 'post_format' , 'post-format-chat' ) ) {
$title = _x ( 'Chats' , 'post format archive title' );
}
2014-11-03 19:35:22 -05:00
} elseif ( is_post_type_archive () ) {
2019-09-02 20:41:05 -04:00
/* translators: Post type archive title. %s: Post type name. */
2014-11-03 19:35:22 -05:00
$title = sprintf ( __ ( 'Archives: %s' ), post_type_archive_title ( '' , false ) );
} elseif ( is_tax () ) {
2019-08-15 20:24:54 -04:00
$queried_object = get_queried_object ();
if ( $queried_object ) {
$tax = get_taxonomy ( $queried_object -> taxonomy );
2019-09-02 20:41:05 -04:00
/* translators: Taxonomy term archive title. 1: Taxonomy singular name, 2: Current taxonomy term. */
2019-08-15 20:24:54 -04:00
$title = sprintf ( __ ( '%1$s: %2$s' ), $tax -> labels -> singular_name , single_term_title ( '' , false ) );
}
2014-11-03 19:35:22 -05:00
}
/**
2016-05-22 14:26:53 -04:00
* Filters the archive title .
2014-11-03 19:35:22 -05:00
*
* @ since 4.1 . 0
*
* @ param string $title Archive title to be displayed .
*/
return apply_filters ( 'get_the_archive_title' , $title );
}
/**
2016-08-31 19:01:29 -04:00
* Display category , tag , term , or author description .
2014-11-03 19:35:22 -05:00
*
* @ since 4.1 . 0
*
2014-11-04 01:52:23 -05:00
* @ see get_the_archive_description ()
*
* @ param string $before Optional . Content to prepend to the description . Default empty .
* @ param string $after Optional . Content to append to the description . Default empty .
2014-11-03 19:35:22 -05:00
*/
function the_archive_description ( $before = '' , $after = '' ) {
$description = get_the_archive_description ();
2014-12-15 02:32:26 -05:00
if ( $description ) {
2014-11-03 19:35:22 -05:00
echo $before . $description . $after ;
}
}
/**
2017-07-01 01:15:46 -04:00
* Retrieves the description for an author , post type , or term archive .
2014-11-03 19:35:22 -05:00
*
* @ since 4.1 . 0
2016-08-31 19:01:29 -04:00
* @ since 4.7 . 0 Added support for author archives .
2017-07-01 01:15:46 -04:00
* @ since 4.9 . 0 Added support for post type archives .
2014-11-03 19:35:22 -05:00
*
2016-09-01 08:32:28 -04:00
* @ see term_description ()
*
2014-11-03 19:35:22 -05:00
* @ return string Archive description .
*/
function get_the_archive_description () {
2016-08-31 19:01:29 -04:00
if ( is_author () ) {
$description = get_the_author_meta ( 'description' );
2017-07-01 01:15:46 -04:00
} elseif ( is_post_type_archive () ) {
2017-08-04 19:01:44 -04:00
$description = get_the_post_type_description ();
2016-08-31 19:01:29 -04:00
} else {
$description = term_description ();
}
2014-11-03 19:35:22 -05:00
/**
2016-05-22 14:26:53 -04:00
* Filters the archive description .
2014-11-03 19:35:22 -05:00
*
* @ since 4.1 . 0
*
* @ param string $description Archive description to be displayed .
*/
2016-09-01 07:47:30 -04:00
return apply_filters ( 'get_the_archive_description' , $description );
2017-08-04 19:01:44 -04:00
}
/**
* Retrieves the description for a post type archive .
*
* @ since 4.9 . 0
*
* @ return string The post type description .
*/
function get_the_post_type_description () {
$post_type = get_query_var ( 'post_type' );
if ( is_array ( $post_type ) ) {
$post_type = reset ( $post_type );
}
$post_type_obj = get_post_type_object ( $post_type );
// Check if a description is set.
if ( isset ( $post_type_obj -> description ) ) {
$description = $post_type_obj -> description ;
} else {
$description = '' ;
}
/**
* Filters the description for a post type archive .
*
* @ since 4.9 . 0
*
* @ param string $description The post type description .
* @ param WP_Post_Type $post_type_obj The post type object .
*/
return apply_filters ( 'get_the_post_type_description' , $description , $post_type_obj );
2014-11-03 19:35:22 -05:00
}
2008-09-05 15:19:01 -04:00
/**
2008-09-12 00:31:41 -04:00
* Retrieve archive link content based on predefined or custom code .
*
* The format can be one of four styles . The 'link' for head element , 'option'
* for use in the select element , 'html' for use in list ( either ol or ul HTML
* elements ) . Custom content is also supported using the before and after
* parameters .
*
2014-11-24 00:39:22 -05:00
* The 'link' format uses the `<link>` HTML element with the ** archives **
2008-09-12 00:31:41 -04:00
* relationship . The before and after parameters are not used . The text
* parameter is used to describe the link .
*
* The 'option' format uses the option HTML element for use in select element .
* The value is the url parameter and the before and after parameters are used
* between the text description .
2008-09-05 15:19:01 -04:00
*
2008-09-12 00:31:41 -04:00
* The 'html' format , which is the default , uses the li HTML element for use in
* the list HTML elements . The before parameter is before the link and the after
* parameter is after the closing link .
*
* The custom format uses the before parameter before the link ( 'a' HTML
* element ) and the after parameter after the closing link tag . If the above
* three values for the format are not used , then custom format is assumed .
2008-09-05 15:19:01 -04:00
*
* @ since 1.0 . 0
2019-03-14 15:37:51 -04:00
* @ since 5.2 . 0 Added the `$selected` parameter .
2008-09-05 15:19:01 -04:00
*
2019-03-14 15:31:49 -04:00
* @ param string $url URL to archive .
* @ param string $text Archive text description .
* @ param string $format Optional , default is 'html' . Can be 'link' , 'option' , 'html' , or custom .
* @ param string $before Optional . Content to prepend to the description . Default empty .
* @ param string $after Optional . Content to append to the description . Default empty .
* @ param bool $selected Optional . Set to true if the current page is the selected archive page .
2008-09-12 00:31:41 -04:00
* @ return string HTML link content for archive .
2008-09-05 15:19:01 -04:00
*/
2019-03-14 15:31:49 -04:00
function get_archives_link ( $url , $text , $format = 'html' , $before = '' , $after = '' , $selected = false ) {
2019-09-18 08:25:56 -04:00
$text = wptexturize ( $text );
$url = esc_url ( $url );
$aria_current = $selected ? ' aria-current="page"' : '' ;
2004-07-28 19:09:33 -04:00
2019-09-18 08:25:56 -04:00
if ( 'link' === $format ) {
2013-10-02 18:51:10 -04:00
$link_html = " \t <link rel='archives' title=' " . esc_attr ( $text ) . " ' href=' $url ' /> \n " ;
2019-09-18 08:25:56 -04:00
} elseif ( 'option' === $format ) {
2019-03-14 15:31:49 -04:00
$selected_attr = $selected ? " selected='selected' " : '' ;
$link_html = " \t <option value=' $url ' $selected_attr > $before $text $after </option> \n " ;
2019-09-18 08:25:56 -04:00
} elseif ( 'html' === $format ) {
$link_html = " \t <li> $before <a href=' $url ' $aria_current > $text </a> $after </li> \n " ;
2020-01-28 19:45:18 -05:00
} else { // Custom.
2019-09-18 08:25:56 -04:00
$link_html = " \t $before <a href=' $url ' $aria_current > $text </a> $after\n " ;
2017-11-30 18:11:00 -05:00
}
2008-05-20 12:43:44 -04:00
2014-04-15 00:01:15 -04:00
/**
2016-05-22 14:26:53 -04:00
* Filters the archive link content .
2014-04-15 00:01:15 -04:00
*
* @ since 2.6 . 0
2016-03-10 12:47:26 -05:00
* @ since 4.5 . 0 Added the `$url` , `$text` , `$format` , `$before` , and `$after` parameters .
2019-03-14 15:31:49 -04:00
* @ since 5.2 . 0 Added the `$selected` parameter .
2014-04-15 00:01:15 -04:00
*
* @ param string $link_html The archive HTML link content .
2016-01-27 23:46:26 -05:00
* @ param string $url URL to archive .
* @ param string $text Archive text description .
* @ param string $format Link format . Can be 'link' , 'option' , 'html' , or custom .
* @ param string $before Content to prepend to the description .
* @ param string $after Content to append to the description .
2019-03-14 15:31:49 -04:00
* @ param bool $selected True if the current page is the selected archive .
2014-04-15 00:01:15 -04:00
*/
2019-03-14 15:31:49 -04:00
return apply_filters ( 'get_archives_link' , $link_html , $url , $text , $format , $before , $after , $selected );
2004-01-27 04:58:01 -05:00
}
2008-09-05 15:19:01 -04:00
/**
2008-09-12 00:31:41 -04:00
* Display archive links based on type and format .
*
2008-09-05 15:19:01 -04:00
* @ since 1.2 . 0
2019-03-14 15:31:49 -04:00
* @ since 4.4 . 0 The `$post_type` argument was added .
* @ since 5.2 . 0 The `$year` , `$monthnum` , `$day` , and `$w` arguments were added .
2008-09-05 15:19:01 -04:00
*
2014-05-18 13:20:15 -04:00
* @ see get_archives_link ()
*
2019-08-03 21:12:56 -04:00
* @ global wpdb $wpdb WordPress database abstraction object .
2019-08-03 21:46:55 -04:00
* @ global WP_Locale $wp_locale WordPress date and time locale object .
2015-05-25 13:18:26 -04:00
*
2014-05-18 13:20:15 -04:00
* @ param string | array $args {
* Default archive links arguments . Optional .
*
* @ type string $type Type of archive to retrieve . Accepts 'daily' , 'weekly' , 'monthly' ,
* 'yearly' , 'postbypost' , or 'alpha' . Both 'postbypost' and 'alpha'
* display the same archive link list as well as post titles instead
* of displaying dates . The difference between the two is that 'alpha'
* will order by post title and 'postbypost' will order by post date .
* Default 'monthly' .
* @ type string | int $limit Number of links to limit the query to . Default empty ( no limit ) .
* @ type string $format Format each link should take using the $before and $after args .
* Accepts 'link' ( `<link>` tag ), 'option' ( `<option>` tag ), 'html'
* ( `<li>` tag ), or a custom format , which generates a link anchor
* with $before preceding and $after succeeding . Default 'html' .
* @ type string $before Markup to prepend to the beginning of each link . Default empty .
* @ type string $after Markup to append to the end of each link . Default empty .
* @ type bool $show_post_count Whether to display the post count alongside the link . Default false .
2014-12-20 18:04:23 -05:00
* @ type bool | int $echo Whether to echo or return the links list . Default 1 | true to echo .
2014-05-18 13:20:15 -04:00
* @ type string $order Whether to use ascending or descending order . Accepts 'ASC' , or 'DESC' .
* Default 'DESC' .
2015-09-29 01:11:24 -04:00
* @ type string $post_type Post type . Default 'post' .
2019-03-14 15:31:49 -04:00
* @ type string $year Year . Default current year .
* @ type string $monthnum Month number . Default current month number .
* @ type string $day Day . Default current day .
* @ type string $w Week . Default current week .
2014-05-18 13:20:15 -04:00
* }
2020-01-11 13:32:05 -05:00
* @ return void | string Void if 'echo' argument is true , archive links if 'echo' is false .
2008-09-05 15:19:01 -04:00
*/
2014-05-13 00:29:26 -04:00
function wp_get_archives ( $args = '' ) {
2007-05-11 00:01:54 -04:00
global $wpdb , $wp_locale ;
2007-06-13 22:25:30 -04:00
2007-05-10 23:10:05 -04:00
$defaults = array (
2017-11-30 18:11:00 -05:00
'type' => 'monthly' ,
'limit' => '' ,
'format' => 'html' ,
'before' => '' ,
'after' => '' ,
'show_post_count' => false ,
'echo' => 1 ,
'order' => 'DESC' ,
'post_type' => 'post' ,
2019-03-14 15:31:49 -04:00
'year' => get_query_var ( 'year' ),
'monthnum' => get_query_var ( 'monthnum' ),
'day' => get_query_var ( 'day' ),
'w' => get_query_var ( 'w' ),
2007-05-10 23:10:05 -04:00
);
2007-06-13 22:25:30 -04:00
2019-07-24 20:48:58 -04:00
$parsed_args = wp_parse_args ( $args , $defaults );
2005-10-17 19:41:28 -04:00
2019-07-24 20:48:58 -04:00
$post_type_object = get_post_type_object ( $parsed_args [ 'post_type' ] );
2015-09-29 01:11:24 -04:00
if ( ! is_post_type_viewable ( $post_type_object ) ) {
return ;
}
2019-07-24 20:48:58 -04:00
$parsed_args [ 'post_type' ] = $post_type_object -> name ;
2015-09-29 01:11:24 -04:00
2019-07-24 20:48:58 -04:00
if ( '' == $parsed_args [ 'type' ] ) {
$parsed_args [ 'type' ] = 'monthly' ;
2014-05-13 00:29:26 -04:00
}
2005-10-17 19:41:28 -04:00
2019-07-24 20:48:58 -04:00
if ( ! empty ( $parsed_args [ 'limit' ] ) ) {
$parsed_args [ 'limit' ] = absint ( $parsed_args [ 'limit' ] );
$parsed_args [ 'limit' ] = ' LIMIT ' . $parsed_args [ 'limit' ];
2005-10-17 19:41:28 -04:00
}
2006-06-15 16:28:47 -04:00
2019-07-24 20:48:58 -04:00
$order = strtoupper ( $parsed_args [ 'order' ] );
2020-02-09 11:55:09 -05:00
if ( 'ASC' !== $order ) {
2012-08-24 16:50:22 -04:00
$order = 'DESC' ;
2014-05-13 00:29:26 -04:00
}
2012-08-24 16:50:22 -04:00
2020-01-28 19:45:18 -05:00
// This is what will separate dates on weekly archive links.
2005-10-17 19:41:28 -04:00
$archive_week_separator = '–' ;
2019-07-24 20:48:58 -04:00
$sql_where = $wpdb -> prepare ( " WHERE post_type = %s AND post_status = 'publish' " , $parsed_args [ 'post_type' ] );
2015-09-29 02:39:25 -04:00
2014-04-15 00:01:15 -04:00
/**
2016-05-22 14:26:53 -04:00
* Filters the SQL WHERE clause for retrieving archives .
2014-04-15 00:01:15 -04:00
*
* @ since 2.2 . 0
*
2020-01-21 10:41:04 -05:00
* @ param string $sql_where Portion of SQL query containing the WHERE clause .
* @ param array $parsed_args An array of default arguments .
2014-04-15 00:01:15 -04:00
*/
2019-07-24 20:48:58 -04:00
$where = apply_filters ( 'getarchives_where' , $sql_where , $parsed_args );
2014-04-15 00:01:15 -04:00
/**
2016-05-22 14:26:53 -04:00
* Filters the SQL JOIN clause for retrieving archives .
2014-04-15 00:01:15 -04:00
*
* @ since 2.2 . 0
*
2019-07-24 20:48:58 -04:00
* @ param string $sql_join Portion of SQL query containing JOIN clause .
* @ param array $parsed_args An array of default arguments .
2014-04-15 00:01:15 -04:00
*/
2019-07-24 20:48:58 -04:00
$join = apply_filters ( 'getarchives_join' , '' , $parsed_args );
2007-03-08 23:09:24 -05:00
2008-10-24 16:47:12 -04:00
$output = '' ;
2016-10-20 22:54:34 -04:00
$last_changed = wp_cache_get_last_changed ( 'posts' );
2013-02-04 08:54:15 -05:00
2019-07-24 20:48:58 -04:00
$limit = $parsed_args [ 'limit' ];
2014-05-13 00:29:26 -04:00
2019-07-24 20:48:58 -04:00
if ( 'monthly' == $parsed_args [ 'type' ] ) {
2019-07-02 19:42:58 -04:00
$query = " SELECT YEAR(post_date) AS `year`, MONTH(post_date) AS `month`, count(ID) as posts FROM $wpdb->posts $join $where GROUP BY YEAR(post_date), MONTH(post_date) ORDER BY post_date $order $limit " ;
$key = md5 ( $query );
$key = " wp_get_archives: $key : $last_changed " ;
$results = wp_cache_get ( $key , 'posts' );
if ( ! $results ) {
2013-02-04 08:54:15 -05:00
$results = $wpdb -> get_results ( $query );
wp_cache_set ( $key , $results , 'posts' );
2007-10-30 02:03:11 -04:00
}
2013-02-04 08:54:15 -05:00
if ( $results ) {
2019-07-24 20:48:58 -04:00
$after = $parsed_args [ 'after' ];
2013-02-04 08:54:15 -05:00
foreach ( ( array ) $results as $result ) {
$url = get_month_link ( $result -> year , $result -> month );
2019-07-24 20:48:58 -04:00
if ( 'post' !== $parsed_args [ 'post_type' ] ) {
$url = add_query_arg ( 'post_type' , $parsed_args [ 'post_type' ], $url );
2015-09-29 01:11:24 -04:00
}
2019-09-02 20:41:05 -04:00
/* translators: 1: Month name, 2: 4-digit year. */
2014-05-13 00:29:26 -04:00
$text = sprintf ( __ ( '%1$s %2$d' ), $wp_locale -> get_month ( $result -> month ), $result -> year );
2019-07-24 20:48:58 -04:00
if ( $parsed_args [ 'show_post_count' ] ) {
$parsed_args [ 'after' ] = ' (' . $result -> posts . ')' . $after ;
2014-05-13 00:29:26 -04:00
}
2019-07-24 20:48:58 -04:00
$selected = is_archive () && ( string ) $parsed_args [ 'year' ] === $result -> year && ( string ) $parsed_args [ 'monthnum' ] === $result -> month ;
$output .= get_archives_link ( $url , $text , $parsed_args [ 'format' ], $parsed_args [ 'before' ], $parsed_args [ 'after' ], $selected );
2005-10-17 19:41:28 -04:00
}
}
2019-07-24 20:48:58 -04:00
} elseif ( 'yearly' == $parsed_args [ 'type' ] ) {
2019-07-02 19:42:58 -04:00
$query = " SELECT YEAR(post_date) AS `year`, count(ID) as posts FROM $wpdb->posts $join $where GROUP BY YEAR(post_date) ORDER BY post_date $order $limit " ;
$key = md5 ( $query );
$key = " wp_get_archives: $key : $last_changed " ;
$results = wp_cache_get ( $key , 'posts' );
if ( ! $results ) {
2013-02-04 08:54:15 -05:00
$results = $wpdb -> get_results ( $query );
wp_cache_set ( $key , $results , 'posts' );
2007-10-30 02:03:11 -04:00
}
2013-02-04 08:54:15 -05:00
if ( $results ) {
2019-07-24 20:48:58 -04:00
$after = $parsed_args [ 'after' ];
2017-11-30 18:11:00 -05:00
foreach ( ( array ) $results as $result ) {
2014-05-13 00:29:26 -04:00
$url = get_year_link ( $result -> year );
2019-07-24 20:48:58 -04:00
if ( 'post' !== $parsed_args [ 'post_type' ] ) {
$url = add_query_arg ( 'post_type' , $parsed_args [ 'post_type' ], $url );
2015-09-29 01:11:24 -04:00
}
2014-05-13 00:29:26 -04:00
$text = sprintf ( '%d' , $result -> year );
2019-07-24 20:48:58 -04:00
if ( $parsed_args [ 'show_post_count' ] ) {
$parsed_args [ 'after' ] = ' (' . $result -> posts . ')' . $after ;
2014-05-13 00:29:26 -04:00
}
2019-07-24 20:48:58 -04:00
$selected = is_archive () && ( string ) $parsed_args [ 'year' ] === $result -> year ;
$output .= get_archives_link ( $url , $text , $parsed_args [ 'format' ], $parsed_args [ 'before' ], $parsed_args [ 'after' ], $selected );
2007-02-27 10:24:54 -05:00
}
}
2019-07-24 20:48:58 -04:00
} elseif ( 'daily' == $parsed_args [ 'type' ] ) {
2019-07-02 19:42:58 -04:00
$query = " SELECT YEAR(post_date) AS `year`, MONTH(post_date) AS `month`, DAYOFMONTH(post_date) AS `dayofmonth`, count(ID) as posts FROM $wpdb->posts $join $where GROUP BY YEAR(post_date), MONTH(post_date), DAYOFMONTH(post_date) ORDER BY post_date $order $limit " ;
$key = md5 ( $query );
$key = " wp_get_archives: $key : $last_changed " ;
$results = wp_cache_get ( $key , 'posts' );
if ( ! $results ) {
2013-02-04 08:54:15 -05:00
$results = $wpdb -> get_results ( $query );
wp_cache_set ( $key , $results , 'posts' );
2007-10-30 02:03:11 -04:00
}
2013-02-04 08:54:15 -05:00
if ( $results ) {
2019-07-24 20:48:58 -04:00
$after = $parsed_args [ 'after' ];
2013-02-04 08:54:15 -05:00
foreach ( ( array ) $results as $result ) {
2017-11-30 18:11:00 -05:00
$url = get_day_link ( $result -> year , $result -> month , $result -> dayofmonth );
2019-07-24 20:48:58 -04:00
if ( 'post' !== $parsed_args [ 'post_type' ] ) {
$url = add_query_arg ( 'post_type' , $parsed_args [ 'post_type' ], $url );
2015-09-29 01:11:24 -04:00
}
2014-05-13 00:29:26 -04:00
$date = sprintf ( '%1$d-%2$02d-%3$02d 00:00:00' , $result -> year , $result -> month , $result -> dayofmonth );
2016-03-16 06:20:27 -04:00
$text = mysql2date ( get_option ( 'date_format' ), $date );
2019-07-24 20:48:58 -04:00
if ( $parsed_args [ 'show_post_count' ] ) {
$parsed_args [ 'after' ] = ' (' . $result -> posts . ')' . $after ;
2014-05-13 00:29:26 -04:00
}
2019-07-24 20:48:58 -04:00
$selected = is_archive () && ( string ) $parsed_args [ 'year' ] === $result -> year && ( string ) $parsed_args [ 'monthnum' ] === $result -> month && ( string ) $parsed_args [ 'day' ] === $result -> dayofmonth ;
$output .= get_archives_link ( $url , $text , $parsed_args [ 'format' ], $parsed_args [ 'before' ], $parsed_args [ 'after' ], $selected );
2005-10-17 19:41:28 -04:00
}
}
2019-07-24 20:48:58 -04:00
} elseif ( 'weekly' == $parsed_args [ 'type' ] ) {
2019-07-02 19:42:58 -04:00
$week = _wp_mysql_week ( '`post_date`' );
$query = " SELECT DISTINCT $week AS `week`, YEAR( `post_date` ) AS `yr`, DATE_FORMAT( `post_date`, '%Y-%m-%d' ) AS `yyyymmdd`, count( `ID` ) AS `posts` FROM ` $wpdb->posts ` $join $where GROUP BY $week , YEAR( `post_date` ) ORDER BY `post_date` $order $limit " ;
$key = md5 ( $query );
$key = " wp_get_archives: $key : $last_changed " ;
$results = wp_cache_get ( $key , 'posts' );
if ( ! $results ) {
2013-02-04 08:54:15 -05:00
$results = $wpdb -> get_results ( $query );
wp_cache_set ( $key , $results , 'posts' );
2007-10-30 02:03:11 -04:00
}
2005-10-17 19:41:28 -04:00
$arc_w_last = '' ;
2013-02-04 08:54:15 -05:00
if ( $results ) {
2019-07-24 20:48:58 -04:00
$after = $parsed_args [ 'after' ];
2014-05-22 13:35:13 -04:00
foreach ( ( array ) $results as $result ) {
if ( $result -> week != $arc_w_last ) {
$arc_year = $result -> yr ;
$arc_w_last = $result -> week ;
$arc_week = get_weekstartend ( $result -> yyyymmdd , get_option ( 'start_of_week' ) );
2016-03-16 06:20:27 -04:00
$arc_week_start = date_i18n ( get_option ( 'date_format' ), $arc_week [ 'start' ] );
$arc_week_end = date_i18n ( get_option ( 'date_format' ), $arc_week [ 'end' ] );
2017-11-30 18:11:00 -05:00
$url = add_query_arg (
array (
'm' => $arc_year ,
'w' => $result -> week ,
2018-08-16 21:51:36 -04:00
),
home_url ( '/' )
2017-11-30 18:11:00 -05:00
);
2019-07-24 20:48:58 -04:00
if ( 'post' !== $parsed_args [ 'post_type' ] ) {
$url = add_query_arg ( 'post_type' , $parsed_args [ 'post_type' ], $url );
2015-09-29 01:11:24 -04:00
}
2017-11-30 18:11:00 -05:00
$text = $arc_week_start . $archive_week_separator . $arc_week_end ;
2019-07-24 20:48:58 -04:00
if ( $parsed_args [ 'show_post_count' ] ) {
$parsed_args [ 'after' ] = ' (' . $result -> posts . ')' . $after ;
2005-10-17 19:41:28 -04:00
}
2019-07-24 20:48:58 -04:00
$selected = is_archive () && ( string ) $parsed_args [ 'year' ] === $result -> yr && ( string ) $parsed_args [ 'w' ] === $result -> week ;
$output .= get_archives_link ( $url , $text , $parsed_args [ 'format' ], $parsed_args [ 'before' ], $parsed_args [ 'after' ], $selected );
2005-10-17 19:41:28 -04:00
}
2014-05-22 13:35:13 -04:00
}
2005-10-17 19:41:28 -04:00
}
2019-07-24 20:48:58 -04:00
} elseif ( ( 'postbypost' == $parsed_args [ 'type' ] ) || ( 'alpha' == $parsed_args [ 'type' ] ) ) {
$orderby = ( 'alpha' == $parsed_args [ 'type' ] ) ? 'post_title ASC ' : 'post_date DESC, ID DESC ' ;
2017-11-30 18:11:00 -05:00
$query = " SELECT * FROM $wpdb->posts $join $where ORDER BY $orderby $limit " ;
$key = md5 ( $query );
$key = " wp_get_archives: $key : $last_changed " ;
2019-07-02 19:42:58 -04:00
$results = wp_cache_get ( $key , 'posts' );
if ( ! $results ) {
2013-02-04 08:54:15 -05:00
$results = $wpdb -> get_results ( $query );
wp_cache_set ( $key , $results , 'posts' );
2007-10-30 02:03:11 -04:00
}
2013-02-04 08:54:15 -05:00
if ( $results ) {
foreach ( ( array ) $results as $result ) {
2020-02-09 11:55:09 -05:00
if ( '0000-00-00 00:00:00' !== $result -> post_date ) {
2014-05-22 13:35:13 -04:00
$url = get_permalink ( $result );
2013-10-24 18:59:20 -04:00
if ( $result -> post_title ) {
/** This filter is documented in wp-includes/post-template.php */
2013-02-04 08:54:15 -05:00
$text = strip_tags ( apply_filters ( 'the_title' , $result -> post_title , $result -> ID ) );
2013-10-24 18:59:20 -04:00
} else {
2013-02-04 08:54:15 -05:00
$text = $result -> ID ;
2013-10-24 18:59:20 -04:00
}
2020-02-09 11:55:09 -05:00
$selected = get_the_ID () === $result -> ID ;
2019-07-24 20:48:58 -04:00
$output .= get_archives_link ( $url , $text , $parsed_args [ 'format' ], $parsed_args [ 'before' ], $parsed_args [ 'after' ], $selected );
2005-10-17 19:41:28 -04:00
}
}
}
}
2020-01-11 13:32:05 -05:00
2019-07-24 20:48:58 -04:00
if ( $parsed_args [ 'echo' ] ) {
2008-10-24 16:47:12 -04:00
echo $output ;
2014-05-13 00:29:26 -04:00
} else {
2008-12-09 13:03:31 -05:00
return $output ;
2014-05-13 00:29:26 -04:00
}
2004-01-27 04:58:01 -05:00
}
2008-09-05 15:19:01 -04:00
/**
2008-09-12 00:31:41 -04:00
* Get number of days since the start of the week .
2008-09-05 15:19:01 -04:00
*
* @ since 1.5 . 0
*
2008-09-06 02:38:26 -04:00
* @ param int $num Number of day .
2017-03-09 09:02:55 -05:00
* @ return float Days since the start of the week .
2008-09-05 15:19:01 -04:00
*/
2017-11-30 18:11:00 -05:00
function calendar_week_mod ( $num ) {
2004-09-09 19:07:46 -04:00
$base = 7 ;
2017-11-30 18:11:00 -05:00
return ( $num - $base * floor ( $num / $base ) );
2004-09-09 19:07:46 -04:00
}
2008-09-05 15:19:01 -04:00
/**
2008-09-12 00:31:41 -04:00
* Display calendar with days that have posts as links .
2008-09-05 15:19:01 -04:00
*
2008-09-12 00:31:41 -04:00
* The calendar is cached , which will be retrieved , if it exists . If there are
* no posts for the month , then it will not be displayed .
2008-09-05 15:19:01 -04:00
*
* @ since 1.0 . 0
*
2019-08-03 21:12:56 -04:00
* @ global wpdb $wpdb WordPress database abstraction object .
2015-05-25 13:18:26 -04:00
* @ global int $m
* @ global int $monthnum
* @ global int $year
2019-08-03 21:46:55 -04:00
* @ global WP_Locale $wp_locale WordPress date and time locale object .
2015-05-25 13:18:26 -04:00
* @ global array $posts
*
2008-09-12 00:31:41 -04:00
* @ param bool $initial Optional , default is true . Use initial calendar names .
2015-05-25 13:18:26 -04:00
* @ param bool $echo Optional , default is true . Set to false for return .
2020-01-21 19:57:03 -05:00
* @ return void | string Void if `$echo` argument is true , calendar HTML if `$echo` is false .
2008-09-05 15:19:01 -04:00
*/
2015-09-23 19:57:27 -04:00
function get_calendar ( $initial = true , $echo = true ) {
2007-12-06 14:49:33 -05:00
global $wpdb , $m , $monthnum , $year , $wp_locale , $posts ;
2005-10-17 19:41:28 -04:00
2017-11-30 18:11:00 -05:00
$key = md5 ( $m . $monthnum . $year );
2015-09-23 19:57:27 -04:00
$cache = wp_cache_get ( 'get_calendar' , 'calendar' );
if ( $cache && is_array ( $cache ) && isset ( $cache [ $key ] ) ) {
/** This filter is documented in wp-includes/general-template.php */
$output = apply_filters ( 'get_calendar' , $cache [ $key ] );
if ( $echo ) {
echo $output ;
return ;
2006-11-23 12:56:53 -05:00
}
2015-09-23 19:57:27 -04:00
return $output ;
2006-11-23 12:56:53 -05:00
}
2015-09-23 19:57:27 -04:00
if ( ! is_array ( $cache ) ) {
2008-12-19 02:05:00 -05:00
$cache = array ();
2015-09-23 19:57:27 -04:00
}
2008-12-19 02:05:00 -05:00
2005-10-17 19:41:28 -04:00
// Quick check. If we have no posts at all, abort!
2015-09-23 19:57:27 -04:00
if ( ! $posts ) {
2017-11-30 18:11:00 -05:00
$gotsome = $wpdb -> get_var ( " SELECT 1 as test FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish' LIMIT 1 " );
2015-09-23 19:57:27 -04:00
if ( ! $gotsome ) {
2009-03-04 17:28:45 -05:00
$cache [ $key ] = '' ;
wp_cache_set ( 'get_calendar' , $cache , 'calendar' );
2005-10-17 19:41:28 -04:00
return ;
2009-03-04 17:28:45 -05:00
}
2005-10-17 19:41:28 -04:00
}
2015-09-23 19:57:27 -04:00
if ( isset ( $_GET [ 'w' ] ) ) {
$w = ( int ) $_GET [ 'w' ];
}
2020-01-28 19:45:18 -05:00
// week_begins = 0 stands for Sunday.
2015-09-23 19:57:27 -04:00
$week_begins = ( int ) get_option ( 'start_of_week' );
2005-10-17 19:41:28 -04:00
2020-01-28 19:45:18 -05:00
// Let's figure out when we are.
2015-09-23 19:57:27 -04:00
if ( ! empty ( $monthnum ) && ! empty ( $year ) ) {
$thismonth = zeroise ( intval ( $monthnum ), 2 );
2017-11-30 18:11:00 -05:00
$thisyear = ( int ) $year ;
2015-09-23 19:57:27 -04:00
} elseif ( ! empty ( $w ) ) {
2020-01-28 19:45:18 -05:00
// We need to get the month from MySQL.
2015-09-23 19:57:27 -04:00
$thisyear = ( int ) substr ( $m , 0 , 4 );
2020-01-28 19:45:18 -05:00
// It seems MySQL's weeks disagree with PHP's.
2017-11-30 18:11:00 -05:00
$d = ( ( $w - 1 ) * 7 ) + 6 ;
$thismonth = $wpdb -> get_var ( " SELECT DATE_FORMAT((DATE_ADD(' { $thisyear } 0101', INTERVAL $d DAY) ), '%m') " );
2015-09-23 19:57:27 -04:00
} elseif ( ! empty ( $m ) ) {
$thisyear = ( int ) substr ( $m , 0 , 4 );
if ( strlen ( $m ) < 6 ) {
$thismonth = '01' ;
} else {
$thismonth = zeroise ( ( int ) substr ( $m , 4 , 2 ), 2 );
}
2005-10-17 19:41:28 -04:00
} else {
2019-03-07 04:12:51 -05:00
$thisyear = current_time ( 'Y' );
$thismonth = current_time ( 'm' );
2005-10-17 19:41:28 -04:00
}
2017-11-30 18:11:00 -05:00
$unixmonth = mktime ( 0 , 0 , 0 , $thismonth , 1 , $thisyear );
2019-05-25 20:12:54 -04:00
$last_day = gmdate ( 't' , $unixmonth );
2005-10-17 19:41:28 -04:00
2020-01-28 19:45:18 -05:00
// Get the next and previous month and year with at least one post.
2017-11-30 18:11:00 -05:00
$previous = $wpdb -> get_row (
" SELECT MONTH(post_date) AS month, YEAR(post_date) AS year
2005-10-17 19:41:28 -04:00
FROM $wpdb -> posts
WHERE post_date < '$thisyear-$thismonth-01'
2006-02-09 05:03:48 -05:00
AND post_type = 'post' AND post_status = 'publish'
2005-10-17 19:41:28 -04:00
ORDER BY post_date DESC
2017-11-30 18:11:00 -05:00
LIMIT 1 "
);
$next = $wpdb -> get_row (
" SELECT MONTH(post_date) AS month, YEAR(post_date) AS year
2005-10-17 19:41:28 -04:00
FROM $wpdb -> posts
2010-09-07 00:22:56 -04:00
WHERE post_date > '$thisyear-$thismonth-{$last_day} 23:59:59'
2006-11-24 17:55:28 -05:00
AND post_type = 'post' AND post_status = 'publish'
2010-09-07 00:22:56 -04:00
ORDER BY post_date ASC
2017-11-30 18:11:00 -05:00
LIMIT 1 "
);
2005-10-17 19:41:28 -04:00
2019-09-02 20:41:05 -04:00
/* translators: Calendar caption: 1: Month name, 2: 4-digit year. */
2017-11-30 18:11:00 -05:00
$calendar_caption = _x ( '%1$s %2$s' , 'calendar caption' );
2020-02-25 15:30:07 -05:00
$calendar_output = ' < table id = " wp-calendar " class = " wp-calendar-table " >
2015-09-23 19:57:27 -04:00
< caption > ' . sprintf (
$calendar_caption ,
$wp_locale -> get_month ( $thismonth ),
2019-05-25 20:12:54 -04:00
gmdate ( 'Y' , $unixmonth )
2015-09-23 19:57:27 -04:00
) . ' </ caption >
2005-10-17 19:41:28 -04:00
< thead >
< tr > ' ;
$myweek = array ();
2015-09-23 19:57:27 -04:00
for ( $wdcount = 0 ; $wdcount <= 6 ; $wdcount ++ ) {
$myweek [] = $wp_locale -> get_weekday ( ( $wdcount + $week_begins ) % 7 );
2005-10-17 19:41:28 -04:00
}
foreach ( $myweek as $wd ) {
2017-11-30 18:11:00 -05:00
$day_name = $initial ? $wp_locale -> get_weekday_initial ( $wd ) : $wp_locale -> get_weekday_abbrev ( $wd );
$wd = esc_attr ( $wd );
2010-02-10 13:37:14 -05:00
$calendar_output .= " \n \t \t <th scope= \" col \" title= \" $wd\ " > $day_name </ th > " ;
2005-10-17 19:41:28 -04:00
}
2010-02-12 15:14:17 -05:00
2010-02-10 13:37:14 -05:00
$calendar_output .= '
2005-10-17 19:41:28 -04:00
</ tr >
</ thead >
< tbody >
< tr > ' ;
2014-12-20 17:47:22 -05:00
$daywithpost = array ();
2020-01-28 19:45:18 -05:00
// Get days with posts.
2017-11-30 18:11:00 -05:00
$dayswithposts = $wpdb -> get_results (
" SELECT DISTINCT DAYOFMONTH(post_date)
2010-09-07 00:22:56 -04:00
FROM $wpdb -> posts WHERE post_date >= '{$thisyear}-{$thismonth}-01 00:00:00'
2006-02-09 05:03:48 -05:00
AND post_type = 'post' AND post_status = 'publish'
2018-08-16 21:51:36 -04:00
AND post_date <= '{$thisyear}-{$thismonth}-{$last_day} 23:59:59' " ,
ARRAY_N
2017-11-30 18:11:00 -05:00
);
2005-10-17 19:41:28 -04:00
if ( $dayswithposts ) {
2008-08-06 16:31:54 -04:00
foreach ( ( array ) $dayswithposts as $daywith ) {
2005-10-17 19:41:28 -04:00
$daywithpost [] = $daywith [ 0 ];
}
}
2020-01-28 19:45:18 -05:00
// See how much we should pad in the beginning.
2019-05-25 20:12:54 -04:00
$pad = calendar_week_mod ( gmdate ( 'w' , $unixmonth ) - $week_begins );
2015-09-23 19:57:27 -04:00
if ( 0 != $pad ) {
2017-11-30 18:11:00 -05:00
$calendar_output .= " \n \t \t " . '<td colspan="' . esc_attr ( $pad ) . '" class="pad"> </td>' ;
2005-10-17 19:41:28 -04:00
}
2017-11-30 18:11:00 -05:00
$newrow = false ;
2019-05-25 20:12:54 -04:00
$daysinmonth = ( int ) gmdate ( 't' , $unixmonth );
2005-10-17 19:41:28 -04:00
for ( $day = 1 ; $day <= $daysinmonth ; ++ $day ) {
2017-11-30 18:11:00 -05:00
if ( isset ( $newrow ) && $newrow ) {
2010-02-10 13:37:14 -05:00
$calendar_output .= " \n \t </tr> \n \t <tr> \n \t \t " ;
2015-09-23 19:57:27 -04:00
}
2005-10-17 19:41:28 -04:00
$newrow = false ;
2020-02-09 11:55:09 -05:00
if ( current_time ( 'j' ) == $day &&
current_time ( 'm' ) == $thismonth &&
current_time ( 'Y' ) == $thisyear ) {
2010-02-10 13:37:14 -05:00
$calendar_output .= '<td id="today">' ;
2015-09-23 19:57:27 -04:00
} else {
2010-02-10 13:37:14 -05:00
$calendar_output .= '<td>' ;
2015-09-23 19:57:27 -04:00
}
2005-10-17 19:41:28 -04:00
2015-09-23 19:57:27 -04:00
if ( in_array ( $day , $daywithpost ) ) {
2020-01-28 19:45:18 -05:00
// Any posts today?
2019-05-25 20:12:54 -04:00
$date_format = gmdate ( _x ( 'F j, Y' , 'daily archives date format' ), strtotime ( " { $thisyear } - { $thismonth } - { $day } " ) );
2019-09-02 20:41:05 -04:00
/* translators: Post calendar label. %s: Date. */
2017-11-30 18:11:00 -05:00
$label = sprintf ( __ ( 'Posts published on %s' ), $date_format );
2015-09-23 19:57:27 -04:00
$calendar_output .= sprintf (
'<a href="%s" aria-label="%s">%s</a>' ,
get_day_link ( $thisyear , $thismonth , $day ),
esc_attr ( $label ),
$day
);
} else {
2010-02-10 13:37:14 -05:00
$calendar_output .= $day ;
2015-09-23 19:57:27 -04:00
}
2010-02-10 13:37:14 -05:00
$calendar_output .= '</td>' ;
2005-10-17 19:41:28 -04:00
2019-05-25 20:12:54 -04:00
if ( 6 == calendar_week_mod ( gmdate ( 'w' , mktime ( 0 , 0 , 0 , $thismonth , $day , $thisyear ) ) - $week_begins ) ) {
2005-10-17 19:41:28 -04:00
$newrow = true ;
2015-09-23 19:57:27 -04:00
}
2005-10-17 19:41:28 -04:00
}
2019-05-25 20:12:54 -04:00
$pad = 7 - calendar_week_mod ( gmdate ( 'w' , mktime ( 0 , 0 , 0 , $thismonth , $day , $thisyear ) ) - $week_begins );
2020-02-09 11:55:09 -05:00
if ( 0 != $pad && 7 != $pad ) {
2017-11-30 18:11:00 -05:00
$calendar_output .= " \n \t \t " . '<td class="pad" colspan="' . esc_attr ( $pad ) . '"> </td>' ;
2015-09-23 19:57:27 -04:00
}
2020-02-09 15:44:04 -05:00
$calendar_output .= " \n \t </tr> \n \t </tbody> " ;
$calendar_output .= " \n \t </table> " ;
2020-02-25 15:30:07 -05:00
$calendar_output .= '<nav aria-label="' . __ ( 'Previous and next months' ) . '" class="wp-calendar-nav">' ;
2020-02-09 15:44:04 -05:00
if ( $previous ) {
2020-02-25 15:30:07 -05:00
$calendar_output .= " \n \t \t " . '<span class="wp-calendar-nav-prev"><a href="' . get_month_link ( $previous -> year , $previous -> month ) . '">« ' .
2020-02-09 15:44:04 -05:00
$wp_locale -> get_month_abbrev ( $wp_locale -> get_month ( $previous -> month ) ) .
'</a></span>' ;
} else {
2020-02-25 15:30:07 -05:00
$calendar_output .= " \n \t \t " . '<span class="wp-calendar-nav-prev"> </span>' ;
2020-02-09 15:44:04 -05:00
}
$calendar_output .= " \n \t \t " . '<span class="pad"> </span>' ;
if ( $next ) {
2020-02-25 15:30:07 -05:00
$calendar_output .= " \n \t \t " . '<span class="wp-calendar-nav-next"><a href="' . get_month_link ( $next -> year , $next -> month ) . '">' .
2020-02-09 15:44:04 -05:00
$wp_locale -> get_month_abbrev ( $wp_locale -> get_month ( $next -> month ) ) .
' »</a></span>' ;
} else {
2020-02-25 15:30:07 -05:00
$calendar_output .= " \n \t \t " . '<span class="wp-calendar-nav-next"> </span>' ;
2020-02-09 15:44:04 -05:00
}
$calendar_output .= '
</ nav > ' ;
2006-11-23 12:56:53 -05:00
2010-02-12 15:14:17 -05:00
$cache [ $key ] = $calendar_output ;
2007-09-15 17:50:53 -04:00
wp_cache_set ( 'get_calendar' , $cache , 'calendar' );
2010-02-10 13:37:14 -05:00
2014-04-15 00:01:15 -04:00
if ( $echo ) {
/**
2016-05-22 14:26:53 -04:00
* Filters the HTML calendar output .
2014-04-15 00:01:15 -04:00
*
* @ since 3.0 . 0
*
* @ param string $calendar_output HTML output of the calendar .
*/
echo apply_filters ( 'get_calendar' , $calendar_output );
2015-09-23 19:57:27 -04:00
return ;
2014-04-15 00:01:15 -04:00
}
2015-09-23 19:57:27 -04:00
/** This filter is documented in wp-includes/general-template.php */
return apply_filters ( 'get_calendar' , $calendar_output );
2006-11-23 12:56:53 -05:00
}
2008-09-05 15:19:01 -04:00
/**
2008-09-05 17:47:53 -04:00
* Purge the cached results of get_calendar .
2008-12-09 13:03:31 -05:00
*
2008-09-05 17:47:53 -04:00
* @ see get_calendar
2008-09-05 15:19:01 -04:00
* @ since 2.1 . 0
*/
2006-11-23 12:56:53 -05:00
function delete_get_calendar_cache () {
wp_cache_delete ( 'get_calendar' , 'calendar' );
2004-01-27 04:58:01 -05:00
}
2008-09-05 15:19:01 -04:00
/**
2008-09-12 00:31:41 -04:00
* Display all of the allowed tags in HTML format with attributes .
2008-09-05 15:19:01 -04:00
*
2008-09-12 00:31:41 -04:00
* This is useful for displaying in the comment area , which elements and
* attributes are supported . As well as any plugins which want to display it .
2008-09-05 15:19:01 -04:00
*
* @ since 1.0 . 1
2015-05-25 13:18:26 -04:00
*
* @ global array $allowedtags
2008-09-05 15:19:01 -04:00
*
2008-09-12 00:31:41 -04:00
* @ return string HTML allowed tags entity encoded .
2008-09-05 15:19:01 -04:00
*/
2004-01-27 04:58:01 -05:00
function allowed_tags () {
2005-10-17 19:41:28 -04:00
global $allowedtags ;
2004-05-07 19:56:33 -04:00
$allowed = '' ;
2008-08-06 16:31:54 -04:00
foreach ( ( array ) $allowedtags as $tag => $attributes ) {
2017-11-30 18:11:00 -05:00
$allowed .= '<' . $tag ;
if ( 0 < count ( $attributes ) ) {
2005-10-17 19:41:28 -04:00
foreach ( $attributes as $attribute => $limits ) {
2017-11-30 18:11:00 -05:00
$allowed .= ' ' . $attribute . '=""' ;
2005-10-17 19:41:28 -04:00
}
}
$allowed .= '> ' ;
}
2015-05-25 13:18:26 -04:00
return htmlentities ( $allowed );
2004-01-27 04:58:01 -05:00
}
2017-11-30 18:11:00 -05:00
/***** Date/Time tags */
2004-01-27 04:58:01 -05:00
2008-09-05 15:19:01 -04:00
/**
2008-09-06 02:38:26 -04:00
* Outputs the date in iso8601 format for xml files .
2008-09-05 15:19:01 -04:00
*
* @ since 1.0 . 0
*/
2004-01-27 04:58:01 -05:00
function the_date_xml () {
2012-09-04 12:29:28 -04:00
echo mysql2date ( 'Y-m-d' , get_post () -> post_date , false );
2004-01-27 04:58:01 -05:00
}
2008-09-05 15:19:01 -04:00
/**
2014-02-21 17:49:13 -05:00
* Display or Retrieve the date the current post was written ( once per date )
2008-09-05 15:19:01 -04:00
*
2008-09-06 02:38:26 -04:00
* Will only output the date if the current post ' s date is different from the
* previous one output .
2010-09-04 22:45:39 -04:00
*
2010-02-01 11:28:54 -05:00
* i . e . Only one date listing will show per day worth of posts shown in the loop , even if the
* function is called several times for each post .
2008-09-05 15:19:01 -04:00
*
2010-02-01 11:28:54 -05:00
* HTML output can be filtered with 'the_date' .
* Date string output can be filtered with 'get_the_date' .
2008-09-05 15:19:01 -04:00
*
2010-02-01 11:28:54 -05:00
* @ since 0.71
2014-04-15 00:01:15 -04:00
*
2019-05-22 17:48:52 -04:00
* @ global string $currentday The day of the current post in the loop .
* @ global string $previousday The day of the previous post in the loop .
2015-05-25 13:18:26 -04:00
*
2020-02-13 19:07:07 -05:00
* @ param string $format Optional . PHP date format defaults to the date_format option if not specified .
2008-09-06 02:38:26 -04:00
* @ param string $before Optional . Output before the date .
2015-05-25 13:18:26 -04:00
* @ param string $after Optional . Output after the date .
* @ param bool $echo Optional , default is display . Whether to echo the date or return it .
* @ return string | void String if retrieving .
2008-09-05 15:19:01 -04:00
*/
2020-02-13 19:07:07 -05:00
function the_date ( $format = '' , $before = '' , $after = '' , $echo = true ) {
2010-11-11 11:22:18 -05:00
global $currentday , $previousday ;
2014-02-21 17:38:13 -05:00
2019-05-22 17:58:50 -04:00
$the_date = '' ;
2015-09-23 23:34:24 -04:00
if ( is_new_day () ) {
2020-02-13 19:07:07 -05:00
$the_date = $before . get_the_date ( $format ) . $after ;
2010-11-11 11:22:18 -05:00
$previousday = $currentday ;
2019-05-22 17:58:50 -04:00
}
2008-12-14 07:13:30 -05:00
2019-05-22 17:58:50 -04:00
/**
* Filters the date a post was published for display .
*
* @ since 0.71
*
* @ param string $the_date The formatted date string .
2020-02-13 19:07:07 -05:00
* @ param string $format PHP date format . Defaults to 'date_format' option
2019-05-22 17:58:50 -04:00
* if not specified .
* @ param string $before HTML output before the date .
* @ param string $after HTML output after the date .
*/
2020-02-13 19:07:07 -05:00
$the_date = apply_filters ( 'the_date' , $the_date , $format , $before , $after );
2010-02-01 11:28:54 -05:00
2019-05-22 17:58:50 -04:00
if ( $echo ) {
echo $the_date ;
} else {
return $the_date ;
2008-12-14 07:13:30 -05:00
}
2010-02-01 11:28:54 -05:00
}
/**
2014-03-03 13:00:14 -05:00
* Retrieve the date on which the post was written .
2010-02-01 11:28:54 -05:00
*
* Unlike the_date () this function will always return the date .
2016-05-23 14:57:28 -04:00
* Modify output with the { @ see 'get_the_date' } filter .
2010-02-01 11:28:54 -05:00
*
* @ since 3.0 . 0
*
2020-02-13 19:07:07 -05:00
* @ param string $format Optional . PHP date format defaults to the date_format option if not specified .
* @ param int | WP_Post $post Optional . Post ID or WP_Post object . Default current post .
2020-01-11 13:32:05 -05:00
* @ return string | false Date the current post was written . False on failure .
2010-02-01 11:28:54 -05:00
*/
2020-02-13 19:07:07 -05:00
function get_the_date ( $format = '' , $post = null ) {
2014-03-03 13:00:14 -05:00
$post = get_post ( $post );
2010-02-01 11:28:54 -05:00
2014-08-01 14:40:16 -04:00
if ( ! $post ) {
return false ;
}
2020-02-13 19:07:07 -05:00
if ( '' == $format ) {
2018-08-30 04:50:24 -04:00
$the_date = get_post_time ( get_option ( 'date_format' ), false , $post , true );
2014-03-03 13:00:14 -05:00
} else {
2020-02-13 19:07:07 -05:00
$the_date = get_post_time ( $format , false , $post , true );
2014-03-03 13:00:14 -05:00
}
2010-02-01 11:28:54 -05:00
2014-03-03 13:00:14 -05:00
/**
2016-05-22 14:26:53 -04:00
* Filters the date a post was published .
2014-03-03 13:00:14 -05:00
*
* @ since 3.0 . 0
*
* @ param string $the_date The formatted date .
2020-02-13 19:07:07 -05:00
* @ param string $format PHP date format . Defaults to 'date_format' option
2014-04-15 00:01:15 -04:00
* if not specified .
* @ param int | WP_Post $post The post object or ID .
2014-03-03 13:00:14 -05:00
*/
2020-02-13 19:07:07 -05:00
return apply_filters ( 'get_the_date' , $the_date , $format , $post );
2004-01-27 04:58:01 -05:00
}
2008-09-05 15:19:01 -04:00
/**
2008-09-06 02:38:26 -04:00
* Display the date on which the post was last modified .
2008-09-05 15:19:01 -04:00
*
* @ since 2.1 . 0
*
2020-02-13 19:07:07 -05:00
* @ param string $format Optional . PHP date format defaults to the date_format option if not specified .
2009-12-23 10:22:08 -05:00
* @ param string $before Optional . Output before the date .
2015-05-25 13:18:26 -04:00
* @ param string $after Optional . Output after the date .
* @ param bool $echo Optional , default is display . Whether to echo the date or return it .
* @ return string | void String if retrieving .
2008-09-05 15:19:01 -04:00
*/
2020-02-13 19:07:07 -05:00
function the_modified_date ( $format = '' , $before = '' , $after = '' , $echo = true ) {
$the_modified_date = $before . get_the_modified_date ( $format ) . $after ;
2014-04-15 00:01:15 -04:00
/**
2016-05-22 14:26:53 -04:00
* Filters the date a post was last modified for display .
2014-04-15 00:01:15 -04:00
*
* @ since 2.1 . 0
*
* @ param string $the_modified_date The last modified date .
2020-02-13 19:07:07 -05:00
* @ param string $format PHP date format . Defaults to 'date_format' option
2014-04-15 00:01:15 -04:00
* if not specified .
* @ param string $before HTML output before the date .
* @ param string $after HTML output after the date .
*/
2020-02-13 19:07:07 -05:00
$the_modified_date = apply_filters ( 'the_modified_date' , $the_modified_date , $format , $before , $after );
2010-01-15 17:11:12 -05:00
2017-11-30 18:11:00 -05:00
if ( $echo ) {
2009-12-23 10:22:08 -05:00
echo $the_modified_date ;
2017-11-30 18:11:00 -05:00
} else {
2009-12-23 10:22:08 -05:00
return $the_modified_date ;
2017-11-30 18:11:00 -05:00
}
2010-01-15 17:11:12 -05:00
2006-08-30 12:46:08 -04:00
}
2008-09-05 15:19:01 -04:00
/**
2008-09-06 02:38:26 -04:00
* Retrieve the date on which the post was last modified .
2008-09-05 15:19:01 -04:00
*
* @ since 2.1 . 0
2016-07-20 12:57:32 -04:00
* @ since 4.6 . 0 Added the `$post` parameter .
2008-09-05 15:19:01 -04:00
*
2020-02-13 19:07:07 -05:00
* @ param string $format Optional . PHP date format defaults to the date_format option if not specified .
* @ param int | WP_Post $post Optional . Post ID or WP_Post object . Default current post .
2020-01-11 13:32:05 -05:00
* @ return string | false Date the current post was modified . False on failure .
2008-09-05 15:19:01 -04:00
*/
2020-02-13 19:07:07 -05:00
function get_the_modified_date ( $format = '' , $post = null ) {
2016-06-17 01:12:28 -04:00
$post = get_post ( $post );
if ( ! $post ) {
2016-06-26 10:26:29 -04:00
// For backward compatibility, failures go through the filter below.
$the_time = false ;
2020-02-13 19:07:07 -05:00
} elseif ( empty ( $format ) ) {
2016-06-17 01:12:28 -04:00
$the_time = get_post_modified_time ( get_option ( 'date_format' ), false , $post , true );
} else {
2020-02-13 19:07:07 -05:00
$the_time = get_post_modified_time ( $format , false , $post , true );
2016-06-17 01:12:28 -04:00
}
2014-04-15 00:01:15 -04:00
/**
2016-05-22 14:26:53 -04:00
* Filters the date a post was last modified .
2014-04-15 00:01:15 -04:00
*
* @ since 2.1 . 0
2016-07-20 12:57:32 -04:00
* @ since 4.6 . 0 Added the `$post` parameter .
2014-04-15 00:01:15 -04:00
*
2017-06-25 17:50:40 -04:00
* @ param string | bool $the_time The formatted date or false if no post is found .
2020-02-13 19:07:07 -05:00
* @ param string $format PHP date format . Defaults to value specified in
2017-06-25 17:50:40 -04:00
* 'date_format' option .
* @ param WP_Post | null $post WP_Post object or null if no post is found .
2014-04-15 00:01:15 -04:00
*/
2020-02-13 19:07:07 -05:00
return apply_filters ( 'get_the_modified_date' , $the_time , $format , $post );
2006-08-30 12:46:08 -04:00
}
2008-09-05 15:19:01 -04:00
/**
2008-09-06 02:38:26 -04:00
* Display the time at which the post was written .
2008-09-05 15:19:01 -04:00
*
* @ since 0.71
*
2020-02-13 19:07:07 -05:00
* @ param string $format Either 'G' , 'U' , or PHP date format .
2008-09-05 15:19:01 -04:00
*/
2020-02-13 19:07:07 -05:00
function the_time ( $format = '' ) {
2014-04-15 00:01:15 -04:00
/**
2016-05-22 14:26:53 -04:00
* Filters the time a post was written for display .
2014-04-15 00:01:15 -04:00
*
* @ since 0.71
*
* @ param string $get_the_time The formatted time .
2020-02-13 19:07:07 -05:00
* @ param string $format The time format . Accepts 'G' , 'U' ,
* or PHP date format .
2014-04-15 00:01:15 -04:00
*/
2020-02-13 19:07:07 -05:00
echo apply_filters ( 'the_time' , get_the_time ( $format ), $format );
2005-01-07 17:01:59 -05:00
}
2008-09-05 15:19:01 -04:00
/**
2008-09-06 02:38:26 -04:00
* Retrieve the time at which the post was written .
2008-09-05 15:19:01 -04:00
*
* @ since 1.5 . 0
*
2020-02-13 19:07:07 -05:00
* @ param string $format Optional . Format to use for retrieving the time the post
* was written . Either 'G' , 'U' , or PHP date format defaults
* to the value specified in the time_format option . Default empty .
* @ param int | WP_Post $post WP_Post object or ID . Default is global `$post` object .
* @ return string | int | false Formatted date string or Unix timestamp if `$format` is 'U' or 'G' .
* False on failure .
2008-09-05 15:19:01 -04:00
*/
2020-02-13 19:07:07 -05:00
function get_the_time ( $format = '' , $post = null ) {
2017-11-30 18:11:00 -05:00
$post = get_post ( $post );
2008-11-02 16:05:38 -05:00
2014-08-01 14:40:16 -04:00
if ( ! $post ) {
return false ;
}
2020-02-13 19:07:07 -05:00
if ( '' == $format ) {
2017-11-30 18:11:00 -05:00
$the_time = get_post_time ( get_option ( 'time_format' ), false , $post , true );
} else {
2020-02-13 19:07:07 -05:00
$the_time = get_post_time ( $format , false , $post , true );
2017-11-30 18:11:00 -05:00
}
2014-04-15 00:01:15 -04:00
/**
2016-05-22 14:26:53 -04:00
* Filters the time a post was written .
2014-04-15 00:01:15 -04:00
*
* @ since 1.5 . 0
*
* @ param string $the_time The formatted time .
2020-02-13 19:07:07 -05:00
* @ param string $format Format to use for retrieving the time the post was written .
* Accepts 'G' , 'U' , or PHP date format value specified
2014-04-15 00:01:15 -04:00
* in 'time_format' option . Default empty .
* @ param int | WP_Post $post WP_Post object or ID .
*/
2020-02-13 19:07:07 -05:00
return apply_filters ( 'get_the_time' , $the_time , $format , $post );
2005-01-07 17:01:59 -05:00
}
2008-09-05 15:19:01 -04:00
/**
2008-09-06 02:38:26 -04:00
* Retrieve the time at which the post was written .
2008-09-05 15:19:01 -04:00
*
2008-09-05 17:47:53 -04:00
* @ since 2.0 . 0
2008-09-05 15:19:01 -04:00
*
2020-02-13 19:07:07 -05:00
* @ param string $format Optional . Format to use for retrieving the time the post
* was written . Either 'G' , 'U' , or PHP date format . Default 'U' .
2014-02-09 16:03:13 -05:00
* @ param bool $gmt Optional . Whether to retrieve the GMT time . Default false .
2019-09-17 07:14:54 -04:00
* @ param int | WP_Post $post WP_Post object or ID . Default is global `$post` object .
2014-02-09 16:03:13 -05:00
* @ param bool $translate Whether to translate the time string . Default false .
2020-02-13 19:07:07 -05:00
* @ return string | int | false Formatted date string or Unix timestamp if `$format` is 'U' or 'G' .
* False on failure .
2008-09-05 15:19:01 -04:00
*/
2020-02-13 19:07:07 -05:00
function get_post_time ( $format = 'U' , $gmt = false , $post = null , $translate = false ) {
2017-11-30 18:11:00 -05:00
$post = get_post ( $post );
2008-11-02 16:05:38 -05:00
2014-08-01 14:40:16 -04:00
if ( ! $post ) {
return false ;
}
2019-10-25 09:08:05 -04:00
$source = ( $gmt ) ? 'gmt' : 'local' ;
$datetime = get_post_datetime ( $post , 'date' , $source );
2019-09-17 07:14:54 -04:00
if ( false === $datetime ) {
return false ;
2017-11-30 18:11:00 -05:00
}
2005-01-18 21:21:36 -05:00
2020-02-13 19:07:07 -05:00
if ( 'U' === $format || 'G' === $format ) {
2019-09-17 07:14:54 -04:00
$time = $datetime -> getTimestamp ();
// Returns a sum of timestamp with timezone offset. Ideally should never be used.
if ( ! $gmt ) {
$time += $datetime -> getOffset ();
}
} elseif ( $translate ) {
2020-02-13 19:07:07 -05:00
$time = wp_date ( $format , $datetime -> getTimestamp (), $gmt ? new DateTimeZone ( 'UTC' ) : null );
2019-09-17 07:14:54 -04:00
} else {
if ( $gmt ) {
$datetime = $datetime -> setTimezone ( new DateTimeZone ( 'UTC' ) );
}
2020-02-13 19:07:07 -05:00
$time = $datetime -> format ( $format );
2019-09-17 07:14:54 -04:00
}
2014-04-15 00:01:15 -04:00
/**
2016-05-22 14:26:53 -04:00
* Filters the localized time a post was written .
2014-04-15 00:01:15 -04:00
*
* @ since 2.6 . 0
*
2020-02-13 19:07:07 -05:00
* @ param string $time The formatted time .
* @ param string $format Format to use for retrieving the time the post was written .
* Accepts 'G' , 'U' , or PHP date format . Default 'U' .
* @ param bool $gmt Whether to retrieve the GMT time . Default false .
2014-04-15 00:01:15 -04:00
*/
2020-02-13 19:07:07 -05:00
return apply_filters ( 'get_post_time' , $time , $format , $gmt );
2004-01-27 04:58:01 -05:00
}
2019-09-17 07:14:54 -04:00
/**
* Retrieve post published or modified time as a `DateTimeImmutable` object instance .
*
* The object will be set to the timezone from WordPress settings .
*
2019-10-25 09:08:05 -04:00
* For legacy reasons , this function allows to choose to instantiate from local or UTC time in database .
* Normally this should make no difference to the result . However , the values might get out of sync in database ,
* typically because of timezone setting changes . The parameter ensures the ability to reproduce backwards
* compatible behaviors in such cases .
*
2019-09-17 07:14:54 -04:00
* @ since 5.3 . 0
*
2019-10-25 09:08:05 -04:00
* @ param int | WP_Post $post Optional . WP_Post object or ID . Default is global `$post` object .
* @ param string $field Optional . Published or modified time to use from database . Accepts 'date' or 'modified' .
* Default 'date' .
* @ param string $source Optional . Local or UTC time to use from database . Accepts 'local' or 'gmt' .
* Default 'local' .
2019-09-17 07:14:54 -04:00
* @ return DateTimeImmutable | false Time object on success , false on failure .
*/
2019-10-25 09:08:05 -04:00
function get_post_datetime ( $post = null , $field = 'date' , $source = 'local' ) {
2019-09-17 07:14:54 -04:00
$post = get_post ( $post );
if ( ! $post ) {
return false ;
}
2019-10-25 09:08:05 -04:00
$wp_timezone = wp_timezone ();
if ( 'gmt' === $source ) {
$time = ( 'modified' === $field ) ? $post -> post_modified_gmt : $post -> post_date_gmt ;
$timezone = new DateTimeZone ( 'UTC' );
} else {
$time = ( 'modified' === $field ) ? $post -> post_modified : $post -> post_date ;
$timezone = $wp_timezone ;
}
2019-09-17 07:14:54 -04:00
if ( empty ( $time ) || '0000-00-00 00:00:00' === $time ) {
return false ;
}
2019-10-25 09:08:05 -04:00
$datetime = date_create_immutable_from_format ( 'Y-m-d H:i:s' , $time , $timezone );
if ( false === $datetime ) {
return false ;
}
return $datetime -> setTimezone ( $wp_timezone );
2019-09-17 07:14:54 -04:00
}
/**
* Retrieve post published or modified time as a Unix timestamp .
*
* Note that this function returns a true Unix timestamp , not summed with timezone offset
* like older WP functions .
*
* @ since 5.3 . 0
*
* @ param int | WP_Post $post Optional . WP_Post object or ID . Default is global `$post` object .
2019-10-25 09:08:05 -04:00
* @ param string $field Optional . Published or modified time to use from database . Accepts 'date' or 'modified' .
* Default 'date' .
2019-09-17 07:14:54 -04:00
* @ return int | false Unix timestamp on success , false on failure .
*/
function get_post_timestamp ( $post = null , $field = 'date' ) {
$datetime = get_post_datetime ( $post , $field );
if ( false === $datetime ) {
return false ;
}
return $datetime -> getTimestamp ();
}
2008-09-05 15:19:01 -04:00
/**
2008-09-06 02:38:26 -04:00
* Display the time at which the post was last modified .
2008-09-05 15:19:01 -04:00
*
* @ since 2.0 . 0
*
2020-02-13 19:07:07 -05:00
* @ param string $format Optional . Either 'G' , 'U' , or PHP date format defaults
* to the value specified in the time_format option .
2008-09-05 15:19:01 -04:00
*/
2020-02-13 19:07:07 -05:00
function the_modified_time ( $format = '' ) {
2014-04-15 00:01:15 -04:00
/**
2016-05-22 14:26:53 -04:00
* Filters the localized time a post was last modified , for display .
2014-04-15 00:01:15 -04:00
*
* @ since 2.0 . 0
*
* @ param string $get_the_modified_time The formatted time .
2020-02-13 19:07:07 -05:00
* @ param string $format The time format . Accepts 'G' , 'U' ,
* or PHP date format . Defaults to value
2014-04-15 00:01:15 -04:00
* specified in 'time_format' option .
*/
2020-02-13 19:07:07 -05:00
echo apply_filters ( 'the_modified_time' , get_the_modified_time ( $format ), $format );
2005-11-10 18:31:30 -05:00
}
2008-09-05 15:19:01 -04:00
/**
2008-09-06 02:38:26 -04:00
* Retrieve the time at which the post was last modified .
2008-09-05 15:19:01 -04:00
*
* @ since 2.0 . 0
2016-07-20 12:57:32 -04:00
* @ since 4.6 . 0 Added the `$post` parameter .
2008-09-05 15:19:01 -04:00
*
2020-02-13 19:07:07 -05:00
* @ param string $format Optional . Format to use for retrieving the time the post
* was modified . Either 'G' , 'U' , or PHP date format defaults
* to the value specified in the time_format option . Default empty .
* @ param int | WP_Post $post Optional . Post ID or WP_Post object . Default current post .
2020-01-11 13:32:05 -05:00
* @ return string | false Formatted date string or Unix timestamp . False on failure .
2008-09-05 15:19:01 -04:00
*/
2020-02-13 19:07:07 -05:00
function get_the_modified_time ( $format = '' , $post = null ) {
2016-06-17 01:12:28 -04:00
$post = get_post ( $post );
if ( ! $post ) {
2016-06-26 10:26:29 -04:00
// For backward compatibility, failures go through the filter below.
$the_time = false ;
2020-02-13 19:07:07 -05:00
} elseif ( empty ( $format ) ) {
2016-06-17 01:12:28 -04:00
$the_time = get_post_modified_time ( get_option ( 'time_format' ), false , $post , true );
} else {
2020-02-13 19:07:07 -05:00
$the_time = get_post_modified_time ( $format , false , $post , true );
2016-06-17 01:12:28 -04:00
}
2014-04-15 00:01:15 -04:00
/**
2016-05-22 14:26:53 -04:00
* Filters the localized time a post was last modified .
2014-04-15 00:01:15 -04:00
*
* @ since 2.0 . 0
2016-07-20 12:57:32 -04:00
* @ since 4.6 . 0 Added the `$post` parameter .
2014-04-15 00:01:15 -04:00
*
2017-06-25 17:50:40 -04:00
* @ param string | bool $the_time The formatted time or false if no post is found .
2020-02-13 19:07:07 -05:00
* @ param string $format Format to use for retrieving the time the post was
* written . Accepts 'G' , 'U' , or PHP date format . Defaults
2017-06-25 17:50:40 -04:00
* to value specified in 'time_format' option .
* @ param WP_Post | null $post WP_Post object or null if no post is found .
2014-04-15 00:01:15 -04:00
*/
2020-02-13 19:07:07 -05:00
return apply_filters ( 'get_the_modified_time' , $the_time , $format , $post );
2005-11-10 18:31:30 -05:00
}
2008-09-05 15:19:01 -04:00
/**
2008-09-06 02:38:26 -04:00
* Retrieve the time at which the post was last modified .
2008-09-05 15:19:01 -04:00
*
* @ since 2.0 . 0
*
2020-02-13 19:07:07 -05:00
* @ param string $format Optional . Format to use for retrieving the time the post
* was modified . Either 'G' , 'U' , or PHP date format . Default 'U' .
2014-08-01 14:40:16 -04:00
* @ param bool $gmt Optional . Whether to retrieve the GMT time . Default false .
2019-09-17 07:14:54 -04:00
* @ param int | WP_Post $post WP_Post object or ID . Default is global `$post` object .
2014-08-01 14:40:16 -04:00
* @ param bool $translate Whether to translate the time string . Default false .
2020-02-13 19:07:07 -05:00
* @ return string | int | false Formatted date string or Unix timestamp if `$format` is 'U' or 'G' .
* False on failure .
2008-09-05 15:19:01 -04:00
*/
2020-02-13 19:07:07 -05:00
function get_post_modified_time ( $format = 'U' , $gmt = false , $post = null , $translate = false ) {
2017-11-30 18:11:00 -05:00
$post = get_post ( $post );
2005-11-10 18:31:30 -05:00
2014-08-01 14:40:16 -04:00
if ( ! $post ) {
return false ;
}
2019-10-25 09:08:05 -04:00
$source = ( $gmt ) ? 'gmt' : 'local' ;
$datetime = get_post_datetime ( $post , 'modified' , $source );
2019-09-17 07:14:54 -04:00
if ( false === $datetime ) {
return false ;
2017-11-30 18:11:00 -05:00
}
2019-05-22 20:41:51 -04:00
2020-02-13 19:07:07 -05:00
if ( 'U' === $format || 'G' === $format ) {
2019-09-17 07:14:54 -04:00
$time = $datetime -> getTimestamp ();
// Returns a sum of timestamp with timezone offset. Ideally should never be used.
if ( ! $gmt ) {
$time += $datetime -> getOffset ();
}
} elseif ( $translate ) {
2020-02-13 19:07:07 -05:00
$time = wp_date ( $format , $datetime -> getTimestamp (), $gmt ? new DateTimeZone ( 'UTC' ) : null );
2019-09-17 07:14:54 -04:00
} else {
if ( $gmt ) {
$datetime = $datetime -> setTimezone ( new DateTimeZone ( 'UTC' ) );
}
2020-02-13 19:07:07 -05:00
$time = $datetime -> format ( $format );
2019-09-17 07:14:54 -04:00
}
2005-11-10 18:31:30 -05:00
2014-04-15 00:01:15 -04:00
/**
2016-05-22 14:26:53 -04:00
* Filters the localized time a post was last modified .
2014-04-15 00:01:15 -04:00
*
* @ since 2.8 . 0
*
2020-02-13 19:07:07 -05:00
* @ param string $time The formatted time .
* @ param string $format Format to use for retrieving the time the post was modified .
* Accepts 'G' , 'U' , or PHP date format . Default 'U' .
* @ param bool $gmt Whether to retrieve the GMT time . Default false .
2014-04-15 00:01:15 -04:00
*/
2020-02-13 19:07:07 -05:00
return apply_filters ( 'get_post_modified_time' , $time , $format , $gmt );
2005-11-10 18:31:30 -05:00
}
2008-09-05 15:19:01 -04:00
/**
2008-09-06 02:38:26 -04:00
* Display the weekday on which the post was written .
2008-09-05 15:19:01 -04:00
*
* @ since 0.71
2015-05-25 13:18:26 -04:00
*
2019-08-03 21:46:55 -04:00
* @ global WP_Locale $wp_locale WordPress date and time locale object .
2008-09-05 15:19:01 -04:00
*/
2004-01-27 04:58:01 -05:00
function the_weekday () {
2012-09-04 12:29:28 -04:00
global $wp_locale ;
2019-05-22 17:48:52 -04:00
2019-05-22 20:38:52 -04:00
$post = get_post ();
if ( ! $post ) {
return ;
}
$the_weekday = $wp_locale -> get_weekday ( get_post_time ( 'w' , false , $post ) );
2014-04-15 00:01:15 -04:00
/**
2016-05-22 14:26:53 -04:00
* Filters the weekday on which the post was written , for display .
2014-04-15 00:01:15 -04:00
*
* @ since 0.71
*
2014-05-04 18:21:22 -04:00
* @ param string $the_weekday
2014-04-15 00:01:15 -04:00
*/
2015-05-25 13:18:26 -04:00
echo apply_filters ( 'the_weekday' , $the_weekday );
2004-01-27 04:58:01 -05:00
}
2008-09-05 15:19:01 -04:00
/**
2008-09-06 02:38:26 -04:00
* Display the weekday on which the post was written .
2008-09-05 15:19:01 -04:00
*
2008-09-06 02:38:26 -04:00
* Will only output the weekday if the current post ' s weekday is different from
* the previous one output .
2008-09-05 15:19:01 -04:00
*
* @ since 0.71
*
2019-08-03 21:46:55 -04:00
* @ global WP_Locale $wp_locale WordPress date and time locale object .
2019-05-22 20:38:52 -04:00
* @ global string $currentday The day of the current post in the loop .
* @ global string $previousweekday The day of the previous post in the loop .
2015-05-25 13:18:26 -04:00
*
2019-05-22 17:48:52 -04:00
* @ param string $before Optional . Output before the date .
* @ param string $after Optional . Output after the date .
2010-06-29 20:05:18 -04:00
*/
2017-11-30 18:11:00 -05:00
function the_weekday_date ( $before = '' , $after = '' ) {
2019-05-22 20:38:52 -04:00
global $wp_locale , $currentday , $previousweekday ;
$post = get_post ();
if ( ! $post ) {
return ;
}
2019-05-22 17:58:50 -04:00
2005-10-17 19:41:28 -04:00
$the_weekday_date = '' ;
2019-05-22 17:58:50 -04:00
2019-05-22 20:38:52 -04:00
if ( $currentday !== $previousweekday ) {
2005-10-17 19:41:28 -04:00
$the_weekday_date .= $before ;
2019-05-22 20:38:52 -04:00
$the_weekday_date .= $wp_locale -> get_weekday ( get_post_time ( 'w' , false , $post ) );
2005-10-17 19:41:28 -04:00
$the_weekday_date .= $after ;
2019-05-22 20:38:52 -04:00
$previousweekday = $currentday ;
2005-10-17 19:41:28 -04:00
}
2014-04-15 00:01:15 -04:00
/**
2016-05-22 14:26:53 -04:00
* Filters the localized date on which the post was written , for display .
2014-04-15 00:01:15 -04:00
*
* @ since 0.71
*
2019-05-22 17:48:52 -04:00
* @ param string $the_weekday_date The weekday on which the post was written .
2014-04-15 00:01:15 -04:00
* @ param string $before The HTML to output before the date .
* @ param string $after The HTML to output after the date .
*/
2019-05-22 17:58:50 -04:00
echo apply_filters ( 'the_weekday_date' , $the_weekday_date , $before , $after );
2004-01-27 04:58:01 -05:00
}
2008-09-05 15:19:01 -04:00
/**
2016-05-23 14:57:28 -04:00
* Fire the wp_head action .
*
* See { @ see 'wp_head' } .
2008-09-05 15:19:01 -04:00
*
* @ since 1.2 . 0
*/
2006-06-07 19:17:59 -04:00
function wp_head () {
2014-04-15 00:01:15 -04:00
/**
2016-05-25 12:05:27 -04:00
* Prints scripts or data in the head tag on the front end .
2014-04-15 00:01:15 -04:00
*
* @ since 1.5 . 0
*/
do_action ( 'wp_head' );
2006-06-07 19:17:59 -04:00
}
2008-09-05 15:19:01 -04:00
/**
2016-05-23 14:57:28 -04:00
* Fire the wp_footer action .
*
* See { @ see 'wp_footer' } .
2008-09-05 15:19:01 -04:00
*
* @ since 1.5 . 1
*/
2006-06-07 19:17:59 -04:00
function wp_footer () {
2020-02-09 13:26:08 -05:00
/**
* Sets up the Admin Bar if the current theme does not use `wp_body_open` .
*
* @ since 5.4 . 0
*/
if ( ! did_action ( 'wp_body_open' ) ) {
add_action ( 'wp_footer' , 'wp_admin_bar_render' , 1000 );
}
2014-04-15 00:01:15 -04:00
/**
2016-05-25 12:05:27 -04:00
* Prints scripts or data before the closing body tag on the front end .
2014-04-15 00:01:15 -04:00
*
* @ since 1.5 . 1
*/
do_action ( 'wp_footer' );
2006-06-07 19:17:59 -04:00
}
Bundled Theme: trigger a new `wp_body_open` action immediately after the opening `body` tag.
* Enables inserting (asynchronous) JavaScript right after the opening `body` tag.
* Add a `wp_body_open` helper function that triggers the `wp_body_open` action.
* Call `wp_body_open` in core themes immediately after the opening `body` tag.
Props joostdevalk, valendesigns, nacin, saracup, jorbin, mikeschinkel, jonnybojangles, lgedeon, Willscrlt, Denis-de-Bernardy, lexiqueen, sky_76, welcher, westonruter, ramiy, joyously.
Fixes #12563.
Built from https://develop.svn.wordpress.org/trunk@45042
git-svn-id: http://core.svn.wordpress.org/trunk@44851 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-03-27 17:59:52 -04:00
/**
* Fire the wp_body_open action .
*
2019-10-31 17:20:02 -04:00
* See { @ see 'wp_body_open' } .
Bundled Theme: trigger a new `wp_body_open` action immediately after the opening `body` tag.
* Enables inserting (asynchronous) JavaScript right after the opening `body` tag.
* Add a `wp_body_open` helper function that triggers the `wp_body_open` action.
* Call `wp_body_open` in core themes immediately after the opening `body` tag.
Props joostdevalk, valendesigns, nacin, saracup, jorbin, mikeschinkel, jonnybojangles, lgedeon, Willscrlt, Denis-de-Bernardy, lexiqueen, sky_76, welcher, westonruter, ramiy, joyously.
Fixes #12563.
Built from https://develop.svn.wordpress.org/trunk@45042
git-svn-id: http://core.svn.wordpress.org/trunk@44851 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-03-27 17:59:52 -04:00
*
* @ since 5.2 . 0
*/
function wp_body_open () {
/**
2019-10-31 17:20:02 -04:00
* Triggered after the opening body tag .
Bundled Theme: trigger a new `wp_body_open` action immediately after the opening `body` tag.
* Enables inserting (asynchronous) JavaScript right after the opening `body` tag.
* Add a `wp_body_open` helper function that triggers the `wp_body_open` action.
* Call `wp_body_open` in core themes immediately after the opening `body` tag.
Props joostdevalk, valendesigns, nacin, saracup, jorbin, mikeschinkel, jonnybojangles, lgedeon, Willscrlt, Denis-de-Bernardy, lexiqueen, sky_76, welcher, westonruter, ramiy, joyously.
Fixes #12563.
Built from https://develop.svn.wordpress.org/trunk@45042
git-svn-id: http://core.svn.wordpress.org/trunk@44851 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-03-27 17:59:52 -04:00
*
* @ since 5.2 . 0
*/
do_action ( 'wp_body_open' );
}
2009-01-19 00:04:58 -05:00
/**
* Display the links to the general feeds .
*
* @ since 2.8 . 0
*
* @ param array $args Optional arguments .
*/
2010-01-10 10:50:17 -05:00
function feed_links ( $args = array () ) {
2017-11-30 18:11:00 -05:00
if ( ! current_theme_supports ( 'automatic-feed-links' ) ) {
2010-02-25 03:56:19 -05:00
return ;
2017-11-30 18:11:00 -05:00
}
2010-02-25 03:56:19 -05:00
2009-01-19 00:04:58 -05:00
$defaults = array (
2019-09-02 20:41:05 -04:00
/* translators: Separator between blog name and feed type in feed links. */
2017-11-30 18:11:00 -05:00
'separator' => _x ( '»' , 'feed link' ),
2019-09-02 20:41:05 -04:00
/* translators: 1: Blog title, 2: Separator (raquo). */
2017-11-30 18:11:00 -05:00
'feedtitle' => __ ( '%1$s %2$s Feed' ),
2019-09-02 20:41:05 -04:00
/* translators: 1: Blog title, 2: Separator (raquo). */
2017-11-30 18:11:00 -05:00
'comstitle' => __ ( '%1$s %2$s Comments Feed' ),
2009-01-19 00:04:58 -05:00
);
$args = wp_parse_args ( $args , $defaults );
2015-08-31 22:46:21 -04:00
/**
2016-05-22 14:26:53 -04:00
* Filters whether to display the posts feed link .
2015-08-31 22:46:21 -04:00
*
2015-08-31 23:14:21 -04:00
* @ since 4.4 . 0
2015-08-31 22:46:21 -04:00
*
* @ param bool $show Whether to display the posts feed link . Default true .
*/
if ( apply_filters ( 'feed_links_show_posts_feed' , true ) ) {
echo '<link rel="alternate" type="' . feed_content_type () . '" title="' . esc_attr ( sprintf ( $args [ 'feedtitle' ], get_bloginfo ( 'name' ), $args [ 'separator' ] ) ) . '" href="' . esc_url ( get_feed_link () ) . " \" /> \n " ;
}
/**
2016-05-22 14:26:53 -04:00
* Filters whether to display the comments feed link .
2015-08-31 22:46:21 -04:00
*
2015-08-31 23:14:21 -04:00
* @ since 4.4 . 0
2015-08-31 22:46:21 -04:00
*
* @ param bool $show Whether to display the comments feed link . Default true .
*/
if ( apply_filters ( 'feed_links_show_comments_feed' , true ) ) {
echo '<link rel="alternate" type="' . feed_content_type () . '" title="' . esc_attr ( sprintf ( $args [ 'comstitle' ], get_bloginfo ( 'name' ), $args [ 'separator' ] ) ) . '" href="' . esc_url ( get_feed_link ( 'comments_' . get_default_feed () ) ) . " \" /> \n " ;
}
2009-01-19 00:04:58 -05:00
}
/**
* Display the links to the extra feeds such as category feeds .
*
* @ since 2.8 . 0
*
* @ param array $args Optional arguments .
*/
2010-01-10 10:50:17 -05:00
function feed_links_extra ( $args = array () ) {
2009-01-19 00:04:58 -05:00
$defaults = array (
2019-09-02 20:41:05 -04:00
/* translators: Separator between blog name and feed type in feed links. */
2017-11-30 18:11:00 -05:00
'separator' => _x ( '»' , 'feed link' ),
2019-09-02 20:41:05 -04:00
/* translators: 1: Blog name, 2: Separator (raquo), 3: Post title. */
2017-11-30 18:11:00 -05:00
'singletitle' => __ ( '%1$s %2$s %3$s Comments Feed' ),
2019-09-02 20:41:05 -04:00
/* translators: 1: Blog name, 2: Separator (raquo), 3: Category name. */
2017-11-30 18:11:00 -05:00
'cattitle' => __ ( '%1$s %2$s %3$s Category Feed' ),
2019-09-02 20:41:05 -04:00
/* translators: 1: Blog name, 2: Separator (raquo), 3: Tag name. */
2017-11-30 18:11:00 -05:00
'tagtitle' => __ ( '%1$s %2$s %3$s Tag Feed' ),
2019-09-02 20:41:05 -04:00
/* translators: 1: Blog name, 2: Separator (raquo), 3: Term name, 4: Taxonomy singular name. */
2017-11-30 18:11:00 -05:00
'taxtitle' => __ ( '%1$s %2$s %3$s %4$s Feed' ),
2019-09-02 20:41:05 -04:00
/* translators: 1: Blog name, 2: Separator (raquo), 3: Author name. */
2017-11-30 18:11:00 -05:00
'authortitle' => __ ( '%1$s %2$s Posts by %3$s Feed' ),
2019-09-02 20:41:05 -04:00
/* translators: 1: Blog name, 2: Separator (raquo), 3: Search query. */
2017-11-30 18:11:00 -05:00
'searchtitle' => __ ( '%1$s %2$s Search Results for “%3$s” Feed' ),
2019-09-02 20:41:05 -04:00
/* translators: 1: Blog name, 2: Separator (raquo), 3: Post type name. */
2017-11-30 18:11:00 -05:00
'posttypetitle' => __ ( '%1$s %2$s %3$s Feed' ),
2009-01-19 00:04:58 -05:00
);
$args = wp_parse_args ( $args , $defaults );
2013-09-06 18:07:09 -04:00
if ( is_singular () ) {
2017-11-30 18:11:00 -05:00
$id = 0 ;
2012-08-23 16:01:10 -04:00
$post = get_post ( $id );
2009-01-19 00:04:58 -05:00
2009-03-07 16:34:01 -05:00
if ( comments_open () || pings_open () || $post -> comment_count > 0 ) {
2017-11-30 18:11:00 -05:00
$title = sprintf ( $args [ 'singletitle' ], get_bloginfo ( 'name' ), $args [ 'separator' ], the_title_attribute ( array ( 'echo' => false ) ) );
$href = get_post_comments_feed_link ( $post -> ID );
2009-03-07 16:34:01 -05:00
}
2013-09-06 18:07:09 -04:00
} elseif ( is_post_type_archive () ) {
2013-09-09 23:02:10 -04:00
$post_type = get_query_var ( 'post_type' );
2017-11-30 18:11:00 -05:00
if ( is_array ( $post_type ) ) {
2013-09-09 23:02:10 -04:00
$post_type = reset ( $post_type );
2017-11-30 18:11:00 -05:00
}
2013-09-09 23:02:10 -04:00
$post_type_obj = get_post_type_object ( $post_type );
2017-11-30 18:11:00 -05:00
$title = sprintf ( $args [ 'posttypetitle' ], get_bloginfo ( 'name' ), $args [ 'separator' ], $post_type_obj -> labels -> name );
$href = get_post_type_archive_feed_link ( $post_type_obj -> name );
2009-03-07 16:34:01 -05:00
} elseif ( is_category () ) {
2010-10-31 07:02:17 -04:00
$term = get_queried_object ();
2009-01-19 00:04:58 -05:00
2013-09-09 22:28:11 -04:00
if ( $term ) {
2017-11-30 18:11:00 -05:00
$title = sprintf ( $args [ 'cattitle' ], get_bloginfo ( 'name' ), $args [ 'separator' ], $term -> name );
$href = get_category_feed_link ( $term -> term_id );
2013-09-09 22:28:11 -04:00
}
2009-03-07 16:34:01 -05:00
} elseif ( is_tag () ) {
2010-10-31 07:02:17 -04:00
$term = get_queried_object ();
2009-01-19 00:04:58 -05:00
2013-09-09 22:28:11 -04:00
if ( $term ) {
2017-11-30 18:11:00 -05:00
$title = sprintf ( $args [ 'tagtitle' ], get_bloginfo ( 'name' ), $args [ 'separator' ], $term -> name );
$href = get_tag_feed_link ( $term -> term_id );
2013-09-09 22:28:11 -04:00
}
2016-02-23 21:36:25 -05:00
} elseif ( is_tax () ) {
2019-08-15 20:24:54 -04:00
$term = get_queried_object ();
if ( $term ) {
$tax = get_taxonomy ( $term -> taxonomy );
$title = sprintf ( $args [ 'taxtitle' ], get_bloginfo ( 'name' ), $args [ 'separator' ], $term -> name , $tax -> labels -> singular_name );
$href = get_term_feed_link ( $term -> term_id , $term -> taxonomy );
}
2009-03-07 16:34:01 -05:00
} elseif ( is_author () ) {
2017-11-30 18:11:00 -05:00
$author_id = intval ( get_query_var ( 'author' ) );
2009-01-19 00:04:58 -05:00
2017-11-30 18:11:00 -05:00
$title = sprintf ( $args [ 'authortitle' ], get_bloginfo ( 'name' ), $args [ 'separator' ], get_the_author_meta ( 'display_name' , $author_id ) );
$href = get_author_feed_link ( $author_id );
2009-03-07 16:34:01 -05:00
} elseif ( is_search () ) {
2017-11-30 18:11:00 -05:00
$title = sprintf ( $args [ 'searchtitle' ], get_bloginfo ( 'name' ), $args [ 'separator' ], get_search_query ( false ) );
$href = get_search_feed_link ();
2012-11-17 10:11:29 -05:00
} elseif ( is_post_type_archive () ) {
2017-11-30 18:11:00 -05:00
$title = sprintf ( $args [ 'posttypetitle' ], get_bloginfo ( 'name' ), $args [ 'separator' ], post_type_archive_title ( '' , false ) );
2013-09-09 22:28:11 -04:00
$post_type_obj = get_queried_object ();
2017-11-30 18:11:00 -05:00
if ( $post_type_obj ) {
2013-09-09 22:28:11 -04:00
$href = get_post_type_archive_feed_link ( $post_type_obj -> name );
2017-11-30 18:11:00 -05:00
}
2012-11-17 10:11:29 -05:00
}
2009-03-07 16:34:01 -05:00
2017-11-30 18:11:00 -05:00
if ( isset ( $title ) && isset ( $href ) ) {
2011-10-31 16:22:35 -04:00
echo '<link rel="alternate" type="' . feed_content_type () . '" title="' . esc_attr ( $title ) . '" href="' . esc_url ( $href ) . '" />' . " \n " ;
2017-11-30 18:11:00 -05:00
}
2009-01-19 00:04:58 -05:00
}
2008-09-05 15:19:01 -04:00
/**
2008-09-06 02:38:26 -04:00
* Display the link to the Really Simple Discovery service endpoint .
2008-09-05 15:19:01 -04:00
*
2008-09-05 17:47:53 -04:00
* @ link http :// archipelago . phrasewise . com / rsd
2008-09-05 15:19:01 -04:00
* @ since 2.0 . 0
*/
2005-11-07 04:47:51 -05:00
function rsd_link () {
2015-10-12 21:49:26 -04:00
echo '<link rel="EditURI" type="application/rsd+xml" title="RSD" href="' . esc_url ( site_url ( 'xmlrpc.php?rsd' , 'rpc' ) ) . '" />' . " \n " ;
2007-10-05 13:29:34 -04:00
}
2008-09-05 15:19:01 -04:00
/**
2008-09-06 02:38:26 -04:00
* Display the link to the Windows Live Writer manifest file .
2008-09-05 15:19:01 -04:00
*
2016-06-10 00:50:33 -04:00
* @ link https :// msdn . microsoft . com / en - us / library / bb463265 . aspx
2008-09-05 15:19:01 -04:00
* @ since 2.3 . 1
*/
2007-10-05 13:29:34 -04:00
function wlwmanifest_link () {
2019-08-15 20:21:56 -04:00
echo '<link rel="wlwmanifest" type="application/wlwmanifest+xml" href="' . includes_url ( 'wlwmanifest.xml' ) . '" /> ' . " \n " ;
2005-11-07 04:47:51 -05:00
}
2008-09-05 15:19:01 -04:00
/**
2016-05-23 14:57:28 -04:00
* Displays a noindex meta tag if required by the blog configuration .
2008-09-05 15:19:01 -04:00
*
2008-09-06 02:38:26 -04:00
* If a blog is marked as not being public then the noindex meta tag will be
2016-05-23 14:57:28 -04:00
* output to tell web robots not to index the page content . Add this to the
* { @ see 'wp_head' } action .
*
* Typical usage is as a { @ see 'wp_head' } callback :
*
* add_action ( 'wp_head' , 'noindex' );
2011-11-15 15:44:48 -05:00
*
* @ see wp_no_robots
2008-09-05 15:19:01 -04:00
*
* @ since 2.1 . 0
*/
2006-02-18 02:40:43 -05:00
function noindex () {
// If the blog is not public, tell robots to go away.
2017-11-30 18:11:00 -05:00
if ( '0' == get_option ( 'blog_public' ) ) {
2011-11-15 15:44:48 -05:00
wp_no_robots ();
2017-11-30 18:11:00 -05:00
}
2011-11-15 15:44:48 -05:00
}
/**
* Display a noindex meta tag .
*
* Outputs a noindex meta tag that tells web robots not to index the page content .
2019-09-01 22:27:55 -04:00
* Typical usage is as a { @ see 'wp_head' } callback . add_action ( 'wp_head' , 'wp_no_robots' );
2011-11-15 15:44:48 -05:00
*
* @ since 3.3 . 0
2019-09-01 22:27:55 -04:00
* @ since 5.3 . 0 Echo " noindex,nofollow " if search engine visibility is discouraged .
2011-11-15 15:44:48 -05:00
*/
function wp_no_robots () {
2019-09-01 22:27:55 -04:00
if ( get_option ( 'blog_public' ) ) {
echo " <meta name='robots' content='noindex,follow' /> \n " ;
return ;
}
echo " <meta name='robots' content='noindex,nofollow' /> \n " ;
2006-02-18 02:40:43 -05:00
}
2006-06-07 19:17:59 -04:00
2018-12-12 19:23:24 -05:00
/**
* Display a noindex , noarchive meta tag and referrer origin - when - cross - origin meta tag .
*
* Outputs a noindex , noarchive meta tag that tells web robots not to index or cache the page content .
* Outputs a referrer origin - when - cross - origin meta tag that tells the browser not to send the full
* url as a referrer to other sites when cross - origin assets are loaded .
*
* Typical usage is as a wp_head callback . add_action ( 'wp_head' , 'wp_sensitive_page_meta' );
*
2019-01-17 01:46:50 -05:00
* @ since 5.0 . 1
2018-12-12 19:23:24 -05:00
*/
function wp_sensitive_page_meta () {
?>
< meta name = 'robots' content = 'noindex,noarchive' />
< meta name = 'referrer' content = 'strict-origin-when-cross-origin' />
< ? php
}
Introducing Site Icon, favicon management for WordPress.
This v1 marries Jetpack's Site Icon module with the Media Modal, reusing code
from the Custom Header admin. For now, the core-provided icons will be limited
to a favicon, an iOS app icon, and a Windows tile icon, leaving `.ico` support
and additional icons to plugins to add.
Props obenland, tyxla, flixos90, jancbeck, markjaquith, scruffian.
See #16434.
Built from https://develop.svn.wordpress.org/trunk@32994
git-svn-id: http://core.svn.wordpress.org/trunk@32965 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-06-29 08:58:25 -04:00
/**
* Display site icon meta tags .
*
* @ since 4.3 . 0
*
2016-06-10 00:50:33 -04:00
* @ link https :// www . whatwg . org / specs / web - apps / current - work / multipage / links . html #rel-icon HTML5 specification link icon.
Introducing Site Icon, favicon management for WordPress.
This v1 marries Jetpack's Site Icon module with the Media Modal, reusing code
from the Custom Header admin. For now, the core-provided icons will be limited
to a favicon, an iOS app icon, and a Windows tile icon, leaving `.ico` support
and additional icons to plugins to add.
Props obenland, tyxla, flixos90, jancbeck, markjaquith, scruffian.
See #16434.
Built from https://develop.svn.wordpress.org/trunk@32994
git-svn-id: http://core.svn.wordpress.org/trunk@32965 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-06-29 08:58:25 -04:00
*/
function wp_site_icon () {
2015-07-10 17:33:24 -04:00
if ( ! has_site_icon () && ! is_customize_preview () ) {
Introducing Site Icon, favicon management for WordPress.
This v1 marries Jetpack's Site Icon module with the Media Modal, reusing code
from the Custom Header admin. For now, the core-provided icons will be limited
to a favicon, an iOS app icon, and a Windows tile icon, leaving `.ico` support
and additional icons to plugins to add.
Props obenland, tyxla, flixos90, jancbeck, markjaquith, scruffian.
See #16434.
Built from https://develop.svn.wordpress.org/trunk@32994
git-svn-id: http://core.svn.wordpress.org/trunk@32965 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-06-29 08:58:25 -04:00
return ;
}
2016-10-25 00:47:29 -04:00
$meta_tags = array ();
2017-11-30 18:11:00 -05:00
$icon_32 = get_site_icon_url ( 32 );
2016-10-25 00:47:29 -04:00
if ( empty ( $icon_32 ) && is_customize_preview () ) {
$icon_32 = '/favicon.ico' ; // Serve default favicon URL in customizer so element can be updated for preview.
}
if ( $icon_32 ) {
$meta_tags [] = sprintf ( '<link rel="icon" href="%s" sizes="32x32" />' , esc_url ( $icon_32 ) );
}
$icon_192 = get_site_icon_url ( 192 );
if ( $icon_192 ) {
$meta_tags [] = sprintf ( '<link rel="icon" href="%s" sizes="192x192" />' , esc_url ( $icon_192 ) );
}
$icon_180 = get_site_icon_url ( 180 );
if ( $icon_180 ) {
2019-11-11 05:00:01 -05:00
$meta_tags [] = sprintf ( '<link rel="apple-touch-icon" href="%s" />' , esc_url ( $icon_180 ) );
2016-10-25 00:47:29 -04:00
}
$icon_270 = get_site_icon_url ( 270 );
if ( $icon_270 ) {
$meta_tags [] = sprintf ( '<meta name="msapplication-TileImage" content="%s" />' , esc_url ( $icon_270 ) );
}
Introducing Site Icon, favicon management for WordPress.
This v1 marries Jetpack's Site Icon module with the Media Modal, reusing code
from the Custom Header admin. For now, the core-provided icons will be limited
to a favicon, an iOS app icon, and a Windows tile icon, leaving `.ico` support
and additional icons to plugins to add.
Props obenland, tyxla, flixos90, jancbeck, markjaquith, scruffian.
See #16434.
Built from https://develop.svn.wordpress.org/trunk@32994
git-svn-id: http://core.svn.wordpress.org/trunk@32965 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-06-29 08:58:25 -04:00
/**
2018-08-27 10:28:26 -04:00
* Filters the site icon meta tags , so plugins can add their own .
Introducing Site Icon, favicon management for WordPress.
This v1 marries Jetpack's Site Icon module with the Media Modal, reusing code
from the Custom Header admin. For now, the core-provided icons will be limited
to a favicon, an iOS app icon, and a Windows tile icon, leaving `.ico` support
and additional icons to plugins to add.
Props obenland, tyxla, flixos90, jancbeck, markjaquith, scruffian.
See #16434.
Built from https://develop.svn.wordpress.org/trunk@32994
git-svn-id: http://core.svn.wordpress.org/trunk@32965 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-06-29 08:58:25 -04:00
*
* @ since 4.3 . 0
*
2018-08-27 10:28:26 -04:00
* @ param string [] $meta_tags Array of Site Icon meta tags .
Introducing Site Icon, favicon management for WordPress.
This v1 marries Jetpack's Site Icon module with the Media Modal, reusing code
from the Custom Header admin. For now, the core-provided icons will be limited
to a favicon, an iOS app icon, and a Windows tile icon, leaving `.ico` support
and additional icons to plugins to add.
Props obenland, tyxla, flixos90, jancbeck, markjaquith, scruffian.
See #16434.
Built from https://develop.svn.wordpress.org/trunk@32994
git-svn-id: http://core.svn.wordpress.org/trunk@32965 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2015-06-29 08:58:25 -04:00
*/
$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 " ;
}
}
2016-06-29 15:36:28 -04:00
/**
2016-07-20 12:57:32 -04:00
* Prints resource hints to browsers for pre - fetching , pre - rendering
* and pre - connecting to web sites .
2016-06-29 15:36:28 -04:00
*
2016-07-20 12:57:32 -04:00
* Gives hints to browsers to prefetch specific pages or render them
* in the background , to perform DNS lookups or to begin the connection
* handshake ( DNS , TCP , TLS ) in the background .
2016-06-29 15:36:28 -04:00
*
* These performance improving indicators work by using `<link rel"…">` .
*
* @ since 4.6 . 0
*/
function wp_resource_hints () {
$hints = array (
2016-07-18 22:35:31 -04:00
'dns-prefetch' => wp_dependencies_unique_hosts (),
2016-07-20 14:19:29 -04:00
'preconnect' => array (),
2016-06-29 15:36:28 -04:00
'prefetch' => array (),
'prerender' => array (),
);
2016-07-20 14:19:29 -04:00
/*
* Add DNS prefetch for the Emoji CDN .
* The path is removed in the foreach loop below .
*/
/** This filter is documented in wp-includes/formatting.php */
2019-04-08 01:22:51 -04:00
$hints [ 'dns-prefetch' ][] = apply_filters ( 'emoji_svg_url' , 'https://s.w.org/images/core/emoji/12.0.0-1/svg/' );
2016-07-20 14:19:29 -04:00
2016-06-29 15:36:28 -04:00
foreach ( $hints as $relation_type => $urls ) {
2016-10-19 05:29:30 -04:00
$unique_urls = array ();
2016-06-29 15:36:28 -04:00
/**
2016-07-27 06:36:28 -04:00
* Filters domains and URLs for resource hints of relation type .
2016-06-29 15:36:28 -04:00
*
* @ since 4.6 . 0
*
* @ param array $urls URLs to print for resource hints .
* @ param string $relation_type The relation type the URLs are printed for , e . g . 'preconnect' or 'prerender' .
*/
$urls = apply_filters ( 'wp_resource_hints' , $urls , $relation_type );
2016-07-12 07:32:28 -04:00
foreach ( $urls as $key => $url ) {
2016-10-19 05:29:30 -04:00
$atts = array ();
if ( is_array ( $url ) ) {
if ( isset ( $url [ 'href' ] ) ) {
$atts = $url ;
$url = $url [ 'href' ];
} else {
continue ;
}
}
2016-06-29 15:36:28 -04:00
$url = esc_url ( $url , array ( 'http' , 'https' ) );
2016-10-19 05:29:30 -04:00
2016-07-12 07:32:28 -04:00
if ( ! $url ) {
2016-10-19 05:29:30 -04:00
continue ;
}
if ( isset ( $unique_urls [ $url ] ) ) {
2016-07-12 07:32:28 -04:00
continue ;
}
2016-06-29 15:36:28 -04:00
if ( in_array ( $relation_type , array ( 'preconnect' , 'dns-prefetch' ) ) ) {
2016-06-29 17:05:28 -04:00
$parsed = wp_parse_url ( $url );
2016-10-19 05:29:30 -04:00
2016-06-29 17:05:28 -04:00
if ( empty ( $parsed [ 'host' ] ) ) {
continue ;
}
2016-06-29 15:36:28 -04:00
2016-08-13 14:35:30 -04:00
if ( 'preconnect' === $relation_type && ! empty ( $parsed [ 'scheme' ] ) ) {
2016-06-29 15:36:28 -04:00
$url = $parsed [ 'scheme' ] . '://' . $parsed [ 'host' ];
} else {
2016-08-13 14:35:30 -04:00
// Use protocol-relative URLs for dns-prefetch or if scheme is missing.
$url = '//' . $parsed [ 'host' ];
2016-06-29 15:36:28 -04:00
}
}
2017-11-30 18:11:00 -05:00
$atts [ 'rel' ] = $relation_type ;
2016-10-19 05:29:30 -04:00
$atts [ 'href' ] = $url ;
$unique_urls [ $url ] = $atts ;
2016-07-12 07:32:28 -04:00
}
2016-10-19 05:29:30 -04:00
foreach ( $unique_urls as $atts ) {
$html = '' ;
foreach ( $atts as $attr => $value ) {
if ( ! is_scalar ( $value ) ||
2017-11-30 18:11:00 -05:00
( ! in_array ( $attr , array ( 'as' , 'crossorigin' , 'href' , 'pr' , 'rel' , 'type' ), true ) && ! is_numeric ( $attr ) ) ) {
2017-11-26 18:57:55 -05:00
2016-10-19 05:29:30 -04:00
continue ;
}
$value = ( 'href' === $attr ) ? esc_url ( $value ) : esc_attr ( $value );
if ( ! is_string ( $attr ) ) {
$html .= " $value " ;
} else {
$html .= " $attr =' $value ' " ;
}
}
$html = trim ( $html );
2016-07-12 07:32:28 -04:00
2016-10-19 05:29:30 -04:00
echo " <link $html /> \n " ;
2016-06-29 15:36:28 -04:00
}
}
}
/**
2016-07-20 12:57:32 -04:00
* Retrieves a list of unique hosts of all enqueued scripts and styles .
2016-06-29 15:36:28 -04:00
*
* @ since 4.6 . 0
2016-07-18 22:35:31 -04:00
*
2019-11-05 16:23:02 -05:00
* @ return string [] A list of unique hosts of enqueued scripts and styles .
2016-06-29 15:36:28 -04:00
*/
2016-07-18 22:35:31 -04:00
function wp_dependencies_unique_hosts () {
2016-06-29 15:36:28 -04:00
global $wp_scripts , $wp_styles ;
$unique_hosts = array ();
2016-07-18 22:35:31 -04:00
foreach ( array ( $wp_scripts , $wp_styles ) as $dependencies ) {
if ( $dependencies instanceof WP_Dependencies && ! empty ( $dependencies -> queue ) ) {
foreach ( $dependencies -> queue as $handle ) {
2016-07-31 14:25:28 -04:00
if ( ! isset ( $dependencies -> registered [ $handle ] ) ) {
continue ;
}
2016-07-18 22:35:31 -04:00
/* @var _WP_Dependency $dependency */
$dependency = $dependencies -> registered [ $handle ];
$parsed = wp_parse_url ( $dependency -> src );
2016-06-29 15:36:28 -04:00
2016-07-18 22:35:31 -04:00
if ( ! empty ( $parsed [ 'host' ] ) && ! in_array ( $parsed [ 'host' ], $unique_hosts ) && $parsed [ 'host' ] !== $_SERVER [ 'SERVER_NAME' ] ) {
$unique_hosts [] = $parsed [ 'host' ];
}
2016-06-29 15:36:28 -04:00
}
}
}
return $unique_hosts ;
}
2008-09-05 15:19:01 -04:00
/**
2016-10-03 03:55:27 -04:00
* Whether the user can access the visual editor .
2008-09-05 15:19:01 -04:00
*
2016-10-03 03:55:27 -04:00
* Checks if the user can access the visual editor and that it 's supported by the user' s browser .
2008-09-05 15:19:01 -04:00
*
* @ since 2.0 . 0
*
2016-10-03 03:55:27 -04:00
* @ global bool $wp_rich_edit Whether the user can access the visual editor .
* @ global bool $is_gecko Whether the browser is Gecko - based .
* @ global bool $is_opera Whether the browser is Opera .
* @ global bool $is_safari Whether the browser is Safari .
* @ global bool $is_chrome Whether the browser is Chrome .
* @ global bool $is_IE Whether the browser is Internet Explorer .
* @ global bool $is_edge Whether the browser is Microsoft Edge .
2015-05-25 13:18:26 -04:00
*
2016-10-03 03:55:27 -04:00
* @ return bool True if the user can access the visual editor , false otherwise .
2008-09-05 15:19:01 -04:00
*/
2006-10-23 23:57:19 -04:00
function user_can_richedit () {
2016-08-31 11:22:31 -04:00
global $wp_rich_edit , $is_gecko , $is_opera , $is_safari , $is_chrome , $is_IE , $is_edge ;
2007-06-13 22:25:30 -04:00
2017-11-30 18:11:00 -05:00
if ( ! isset ( $wp_rich_edit ) ) {
2011-10-13 02:37:24 -04:00
$wp_rich_edit = false ;
2020-01-28 19:45:18 -05:00
if ( get_user_option ( 'rich_editing' ) == 'true' || ! is_user_logged_in () ) { // Default to 'true' for logged out users.
2011-10-13 02:37:24 -04:00
if ( $is_safari ) {
2012-06-04 12:04:54 -04:00
$wp_rich_edit = ! wp_is_mobile () || ( preg_match ( '!AppleWebKit/(\d+)!' , $_SERVER [ 'HTTP_USER_AGENT' ], $match ) && intval ( $match [ 1 ] ) >= 534 );
2017-05-08 01:32:46 -04:00
} elseif ( $is_IE ) {
2018-01-18 09:43:31 -05:00
$wp_rich_edit = ( strpos ( $_SERVER [ 'HTTP_USER_AGENT' ], 'Trident/7.0;' ) !== false );
2017-11-30 18:11:00 -05:00
} elseif ( $is_gecko || $is_chrome || $is_edge || ( $is_opera && ! wp_is_mobile () ) ) {
2011-10-13 02:37:24 -04:00
$wp_rich_edit = true ;
}
2007-05-09 21:31:12 -04:00
}
}
2006-09-22 18:24:50 -04:00
2014-04-15 00:01:15 -04:00
/**
2016-10-03 03:55:27 -04:00
* Filters whether the user can access the visual editor .
2014-04-15 00:01:15 -04:00
*
* @ since 2.1 . 0
*
2016-10-03 03:55:27 -04:00
* @ param bool $wp_rich_edit Whether the user can access the visual editor .
2014-04-15 00:01:15 -04:00
*/
return apply_filters ( 'user_can_richedit' , $wp_rich_edit );
2006-09-22 18:24:50 -04:00
}
2008-09-05 15:19:01 -04:00
/**
2011-11-23 14:06:52 -05:00
* Find out which editor should be displayed by default .
*
* Works out which of the two editors to display as the current editor for a
2012-07-05 16:28:01 -04:00
* user . The 'html' setting is for the " Text " editor tab .
2011-11-23 14:06:52 -05:00
*
* @ since 2.5 . 0
*
* @ return string Either 'tinymce' , or 'html' , or 'test'
*/
function wp_default_editor () {
2020-01-28 19:45:18 -05:00
$r = user_can_richedit () ? 'tinymce' : 'html' ; // Defaults.
if ( wp_get_current_user () ) { // Look for cookie.
2017-11-30 18:11:00 -05:00
$ed = get_user_setting ( 'editor' , 'tinymce' );
$r = ( in_array ( $ed , array ( 'tinymce' , 'html' , 'test' ) ) ) ? $ed : $r ;
2011-11-23 14:06:52 -05:00
}
2014-04-15 00:01:15 -04:00
/**
2016-05-22 14:26:53 -04:00
* Filters which editor should be displayed by default .
2014-04-15 00:01:15 -04:00
*
* @ since 2.5 . 0
*
2016-11-04 13:17:56 -04:00
* @ param string $r Which editor should be displayed by default . Either 'tinymce' , 'html' , or 'test' .
2014-04-15 00:01:15 -04:00
*/
return apply_filters ( 'wp_default_editor' , $r );
2011-11-23 14:06:52 -05:00
}
/**
* Renders an editor .
2011-11-10 12:46:23 -05:00
*
* Using this function is the proper way to output all needed components for both TinyMCE and Quicktags .
2014-09-29 09:28:16 -04:00
* _WP_Editors should not be used directly . See https :// core . trac . wordpress . org / ticket / 17144.
2011-11-30 23:51:35 -05:00
*
2011-11-10 12:46:23 -05:00
* NOTE : Once initialized the TinyMCE editor cannot be safely moved in the DOM . For that reason
2016-07-09 20:56:28 -04:00
* running wp_editor () inside of a meta box is not a good idea unless only Quicktags is used .
2011-11-10 12:46:23 -05:00
* On the post edit screen several actions can be used to include additional editors
* containing TinyMCE : 'edit_page_form' , 'edit_form_advanced' and 'dbx_post_sidebar' .
2014-09-29 09:28:16 -04:00
* See https :// core . trac . wordpress . org / ticket / 19173 for more information .
2011-11-30 23:51:35 -05:00
*
2015-12-23 02:53:26 -05:00
* @ see _WP_Editors :: editor ()
2020-02-07 18:30:05 -05:00
* @ see _WP_Editors :: parse_settings ()
2012-01-04 14:03:33 -05:00
* @ since 3.3 . 0
2008-09-05 15:19:01 -04:00
*
2015-05-25 13:18:26 -04:00
* @ param string $content Initial content for the editor .
2020-02-07 18:30:05 -05:00
* @ param string $editor_id HTML ID attribute value for the textarea and TinyMCE .
* Should not contain square brackets .
* @ param array $settings See _WP_Editors :: parse_settings () for description .
2008-09-05 15:19:01 -04:00
*/
2011-08-03 06:19:00 -04:00
function wp_editor ( $content , $editor_id , $settings = array () ) {
2017-11-30 18:11:00 -05:00
if ( ! class_exists ( '_WP_Editors' , false ) ) {
2020-02-06 01:33:11 -05:00
require ABSPATH . WPINC . '/class-wp-editor.php' ;
2017-11-30 18:11:00 -05:00
}
_WP_Editors :: editor ( $content , $editor_id , $settings );
2006-06-07 19:17:59 -04:00
}
2017-04-18 22:38:44 -04:00
/**
* Outputs the editor scripts , stylesheets , and default settings .
*
* The editor can be initialized when needed after page load .
* See wp . editor . initialize () in wp - admin / js / editor . js for initialization options .
*
* @ uses _WP_Editors
* @ since 4.8 . 0
*/
function wp_enqueue_editor () {
if ( ! class_exists ( '_WP_Editors' , false ) ) {
2020-02-06 01:33:11 -05:00
require ABSPATH . WPINC . '/class-wp-editor.php' ;
2017-04-18 22:38:44 -04:00
}
_WP_Editors :: enqueue_default_editor ();
}
Editor: Add CodeMirror-powered code editor with syntax highlighting, linting, and auto-completion.
* Code editor is integrated into the Theme/Plugin Editor, Additional CSS in Customizer, and Custom HTML widget. Code editor is not yet integrated into the post editor, and it may not be until accessibility concerns are addressed.
* The CodeMirror component in the Custom HTML widget is integrated in a similar way to TinyMCE being integrated into the Text widget, adopting the same approach for integrating dynamic JavaScript-initialized fields.
* Linting is performed for JS, CSS, HTML, and JSON via JSHint, CSSLint, HTMLHint, and JSONLint respectively. Linting is not yet supported for PHP.
* When user lacks `unfiltered_html` the capability, the Custom HTML widget will report any Kses-invalid elements and attributes as errors via a custom Kses rule for HTMLHint.
* When linting errors are detected, the user will be prevented from saving the code until the errors are fixed, reducing instances of broken websites.
* The placeholder value is removed from Custom CSS in favor of a fleshed-out section description which now auto-expands when the CSS field is empty. See #39892.
* The CodeMirror library is included as `wp.CodeMirror` to prevent conflicts with any existing `CodeMirror` global.
* An `wp.codeEditor.initialize()` API in JS is provided to convert a `textarea` into CodeMirror, with a `wp_enqueue_code_editor()` function in PHP to manage enqueueing the assets and settings needed to edit a given type of code.
* A user preference is added to manage whether or not "syntax highlighting" is enabled. The feature is opt-out, being enabled by default.
* Allowed file extensions in the theme and plugin editors have been updated to include formats which CodeMirror has modes for: `conf`, `css`, `diff`, `patch`, `html`, `htm`, `http`, `js`, `json`, `jsx`, `less`, `md`, `php`, `phtml`, `php3`, `php4`, `php5`, `php7`, `phps`, `scss`, `sass`, `sh`, `bash`, `sql`, `svg`, `xml`, `yml`, `yaml`, `txt`.
Props westonruter, georgestephanis, obenland, melchoyce, pixolin, mizejewski, michelleweber, afercia, grahamarmfield, samikeijonen, rianrietveld, iseulde.
See #38707.
Fixes #12423, #39892.
Built from https://develop.svn.wordpress.org/trunk@41376
git-svn-id: http://core.svn.wordpress.org/trunk@41209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-13 02:08:47 -04:00
/**
* Enqueue assets needed by the code editor for the given settings .
*
* @ since 4.9 . 0
*
* @ see wp_enqueue_editor ()
2018-12-13 17:24:33 -05:00
* @ see wp_get_code_editor_settings ();
Editor: Add CodeMirror-powered code editor with syntax highlighting, linting, and auto-completion.
* Code editor is integrated into the Theme/Plugin Editor, Additional CSS in Customizer, and Custom HTML widget. Code editor is not yet integrated into the post editor, and it may not be until accessibility concerns are addressed.
* The CodeMirror component in the Custom HTML widget is integrated in a similar way to TinyMCE being integrated into the Text widget, adopting the same approach for integrating dynamic JavaScript-initialized fields.
* Linting is performed for JS, CSS, HTML, and JSON via JSHint, CSSLint, HTMLHint, and JSONLint respectively. Linting is not yet supported for PHP.
* When user lacks `unfiltered_html` the capability, the Custom HTML widget will report any Kses-invalid elements and attributes as errors via a custom Kses rule for HTMLHint.
* When linting errors are detected, the user will be prevented from saving the code until the errors are fixed, reducing instances of broken websites.
* The placeholder value is removed from Custom CSS in favor of a fleshed-out section description which now auto-expands when the CSS field is empty. See #39892.
* The CodeMirror library is included as `wp.CodeMirror` to prevent conflicts with any existing `CodeMirror` global.
* An `wp.codeEditor.initialize()` API in JS is provided to convert a `textarea` into CodeMirror, with a `wp_enqueue_code_editor()` function in PHP to manage enqueueing the assets and settings needed to edit a given type of code.
* A user preference is added to manage whether or not "syntax highlighting" is enabled. The feature is opt-out, being enabled by default.
* Allowed file extensions in the theme and plugin editors have been updated to include formats which CodeMirror has modes for: `conf`, `css`, `diff`, `patch`, `html`, `htm`, `http`, `js`, `json`, `jsx`, `less`, `md`, `php`, `phtml`, `php3`, `php4`, `php5`, `php7`, `phps`, `scss`, `sass`, `sh`, `bash`, `sql`, `svg`, `xml`, `yml`, `yaml`, `txt`.
Props westonruter, georgestephanis, obenland, melchoyce, pixolin, mizejewski, michelleweber, afercia, grahamarmfield, samikeijonen, rianrietveld, iseulde.
See #38707.
Fixes #12423, #39892.
Built from https://develop.svn.wordpress.org/trunk@41376
git-svn-id: http://core.svn.wordpress.org/trunk@41209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-13 02:08:47 -04:00
* @ see _WP_Editors :: parse_settings ()
2018-12-13 17:24:33 -05:00
*
Editor: Add CodeMirror-powered code editor with syntax highlighting, linting, and auto-completion.
* Code editor is integrated into the Theme/Plugin Editor, Additional CSS in Customizer, and Custom HTML widget. Code editor is not yet integrated into the post editor, and it may not be until accessibility concerns are addressed.
* The CodeMirror component in the Custom HTML widget is integrated in a similar way to TinyMCE being integrated into the Text widget, adopting the same approach for integrating dynamic JavaScript-initialized fields.
* Linting is performed for JS, CSS, HTML, and JSON via JSHint, CSSLint, HTMLHint, and JSONLint respectively. Linting is not yet supported for PHP.
* When user lacks `unfiltered_html` the capability, the Custom HTML widget will report any Kses-invalid elements and attributes as errors via a custom Kses rule for HTMLHint.
* When linting errors are detected, the user will be prevented from saving the code until the errors are fixed, reducing instances of broken websites.
* The placeholder value is removed from Custom CSS in favor of a fleshed-out section description which now auto-expands when the CSS field is empty. See #39892.
* The CodeMirror library is included as `wp.CodeMirror` to prevent conflicts with any existing `CodeMirror` global.
* An `wp.codeEditor.initialize()` API in JS is provided to convert a `textarea` into CodeMirror, with a `wp_enqueue_code_editor()` function in PHP to manage enqueueing the assets and settings needed to edit a given type of code.
* A user preference is added to manage whether or not "syntax highlighting" is enabled. The feature is opt-out, being enabled by default.
* Allowed file extensions in the theme and plugin editors have been updated to include formats which CodeMirror has modes for: `conf`, `css`, `diff`, `patch`, `html`, `htm`, `http`, `js`, `json`, `jsx`, `less`, `md`, `php`, `phtml`, `php3`, `php4`, `php5`, `php7`, `phps`, `scss`, `sass`, `sh`, `bash`, `sql`, `svg`, `xml`, `yml`, `yaml`, `txt`.
Props westonruter, georgestephanis, obenland, melchoyce, pixolin, mizejewski, michelleweber, afercia, grahamarmfield, samikeijonen, rianrietveld, iseulde.
See #38707.
Fixes #12423, #39892.
Built from https://develop.svn.wordpress.org/trunk@41376
git-svn-id: http://core.svn.wordpress.org/trunk@41209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-13 02:08:47 -04:00
* @ param array $args {
* Args .
*
2017-09-21 19:04:45 -04:00
* @ type string $type The MIME type of the file to be edited .
* @ type string $file Filename to be edited . Extension is used to sniff the type . Can be supplied as alternative to `$type` param .
* @ type WP_Theme $theme Theme being edited when on theme editor .
* @ type string $plugin Plugin being edited when on plugin editor .
* @ type array $codemirror Additional CodeMirror setting overrides .
* @ type array $csslint CSSLint rule overrides .
* @ type array $jshint JSHint rule overrides .
* @ type array $htmlhint JSHint rule overrides .
Editor: Add CodeMirror-powered code editor with syntax highlighting, linting, and auto-completion.
* Code editor is integrated into the Theme/Plugin Editor, Additional CSS in Customizer, and Custom HTML widget. Code editor is not yet integrated into the post editor, and it may not be until accessibility concerns are addressed.
* The CodeMirror component in the Custom HTML widget is integrated in a similar way to TinyMCE being integrated into the Text widget, adopting the same approach for integrating dynamic JavaScript-initialized fields.
* Linting is performed for JS, CSS, HTML, and JSON via JSHint, CSSLint, HTMLHint, and JSONLint respectively. Linting is not yet supported for PHP.
* When user lacks `unfiltered_html` the capability, the Custom HTML widget will report any Kses-invalid elements and attributes as errors via a custom Kses rule for HTMLHint.
* When linting errors are detected, the user will be prevented from saving the code until the errors are fixed, reducing instances of broken websites.
* The placeholder value is removed from Custom CSS in favor of a fleshed-out section description which now auto-expands when the CSS field is empty. See #39892.
* The CodeMirror library is included as `wp.CodeMirror` to prevent conflicts with any existing `CodeMirror` global.
* An `wp.codeEditor.initialize()` API in JS is provided to convert a `textarea` into CodeMirror, with a `wp_enqueue_code_editor()` function in PHP to manage enqueueing the assets and settings needed to edit a given type of code.
* A user preference is added to manage whether or not "syntax highlighting" is enabled. The feature is opt-out, being enabled by default.
* Allowed file extensions in the theme and plugin editors have been updated to include formats which CodeMirror has modes for: `conf`, `css`, `diff`, `patch`, `html`, `htm`, `http`, `js`, `json`, `jsx`, `less`, `md`, `php`, `phtml`, `php3`, `php4`, `php5`, `php7`, `phps`, `scss`, `sass`, `sh`, `bash`, `sql`, `svg`, `xml`, `yml`, `yaml`, `txt`.
Props westonruter, georgestephanis, obenland, melchoyce, pixolin, mizejewski, michelleweber, afercia, grahamarmfield, samikeijonen, rianrietveld, iseulde.
See #38707.
Fixes #12423, #39892.
Built from https://develop.svn.wordpress.org/trunk@41376
git-svn-id: http://core.svn.wordpress.org/trunk@41209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-13 02:08:47 -04:00
* }
2018-12-13 17:24:33 -05:00
* @ return array | false Settings for the enqueued code editor , or false if the editor was not enqueued .
Editor: Add CodeMirror-powered code editor with syntax highlighting, linting, and auto-completion.
* Code editor is integrated into the Theme/Plugin Editor, Additional CSS in Customizer, and Custom HTML widget. Code editor is not yet integrated into the post editor, and it may not be until accessibility concerns are addressed.
* The CodeMirror component in the Custom HTML widget is integrated in a similar way to TinyMCE being integrated into the Text widget, adopting the same approach for integrating dynamic JavaScript-initialized fields.
* Linting is performed for JS, CSS, HTML, and JSON via JSHint, CSSLint, HTMLHint, and JSONLint respectively. Linting is not yet supported for PHP.
* When user lacks `unfiltered_html` the capability, the Custom HTML widget will report any Kses-invalid elements and attributes as errors via a custom Kses rule for HTMLHint.
* When linting errors are detected, the user will be prevented from saving the code until the errors are fixed, reducing instances of broken websites.
* The placeholder value is removed from Custom CSS in favor of a fleshed-out section description which now auto-expands when the CSS field is empty. See #39892.
* The CodeMirror library is included as `wp.CodeMirror` to prevent conflicts with any existing `CodeMirror` global.
* An `wp.codeEditor.initialize()` API in JS is provided to convert a `textarea` into CodeMirror, with a `wp_enqueue_code_editor()` function in PHP to manage enqueueing the assets and settings needed to edit a given type of code.
* A user preference is added to manage whether or not "syntax highlighting" is enabled. The feature is opt-out, being enabled by default.
* Allowed file extensions in the theme and plugin editors have been updated to include formats which CodeMirror has modes for: `conf`, `css`, `diff`, `patch`, `html`, `htm`, `http`, `js`, `json`, `jsx`, `less`, `md`, `php`, `phtml`, `php3`, `php4`, `php5`, `php7`, `phps`, `scss`, `sass`, `sh`, `bash`, `sql`, `svg`, `xml`, `yml`, `yaml`, `txt`.
Props westonruter, georgestephanis, obenland, melchoyce, pixolin, mizejewski, michelleweber, afercia, grahamarmfield, samikeijonen, rianrietveld, iseulde.
See #38707.
Fixes #12423, #39892.
Built from https://develop.svn.wordpress.org/trunk@41376
git-svn-id: http://core.svn.wordpress.org/trunk@41209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-13 02:08:47 -04:00
*/
function wp_enqueue_code_editor ( $args ) {
if ( is_user_logged_in () && 'false' === wp_get_current_user () -> syntax_highlighting ) {
return false ;
}
2018-12-13 17:24:33 -05:00
$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 ) ) );
/**
* Fires when scripts and styles are enqueued for the code editor .
*
* @ since 4.9 . 0
*
* @ param array $settings Settings for the enqueued code editor .
*/
do_action ( 'wp_enqueue_code_editor' , $settings );
return $settings ;
}
/**
* Generate and return code editor settings .
*
* @ since 5.0 . 0
*
* @ see wp_enqueue_code_editor ()
*
* @ param array $args {
* Args .
*
* @ type string $type The MIME type of the file to be edited .
* @ type string $file Filename to be edited . Extension is used to sniff the type . Can be supplied as alternative to `$type` param .
* @ type WP_Theme $theme Theme being edited when on theme editor .
* @ type string $plugin Plugin being edited when on plugin editor .
* @ type array $codemirror Additional CodeMirror setting overrides .
* @ type array $csslint CSSLint rule overrides .
* @ type array $jshint JSHint rule overrides .
* @ type array $htmlhint JSHint rule overrides .
* }
* @ return array | false Settings for the code editor .
*/
function wp_get_code_editor_settings ( $args ) {
Editor: Add CodeMirror-powered code editor with syntax highlighting, linting, and auto-completion.
* Code editor is integrated into the Theme/Plugin Editor, Additional CSS in Customizer, and Custom HTML widget. Code editor is not yet integrated into the post editor, and it may not be until accessibility concerns are addressed.
* The CodeMirror component in the Custom HTML widget is integrated in a similar way to TinyMCE being integrated into the Text widget, adopting the same approach for integrating dynamic JavaScript-initialized fields.
* Linting is performed for JS, CSS, HTML, and JSON via JSHint, CSSLint, HTMLHint, and JSONLint respectively. Linting is not yet supported for PHP.
* When user lacks `unfiltered_html` the capability, the Custom HTML widget will report any Kses-invalid elements and attributes as errors via a custom Kses rule for HTMLHint.
* When linting errors are detected, the user will be prevented from saving the code until the errors are fixed, reducing instances of broken websites.
* The placeholder value is removed from Custom CSS in favor of a fleshed-out section description which now auto-expands when the CSS field is empty. See #39892.
* The CodeMirror library is included as `wp.CodeMirror` to prevent conflicts with any existing `CodeMirror` global.
* An `wp.codeEditor.initialize()` API in JS is provided to convert a `textarea` into CodeMirror, with a `wp_enqueue_code_editor()` function in PHP to manage enqueueing the assets and settings needed to edit a given type of code.
* A user preference is added to manage whether or not "syntax highlighting" is enabled. The feature is opt-out, being enabled by default.
* Allowed file extensions in the theme and plugin editors have been updated to include formats which CodeMirror has modes for: `conf`, `css`, `diff`, `patch`, `html`, `htm`, `http`, `js`, `json`, `jsx`, `less`, `md`, `php`, `phtml`, `php3`, `php4`, `php5`, `php7`, `phps`, `scss`, `sass`, `sh`, `bash`, `sql`, `svg`, `xml`, `yml`, `yaml`, `txt`.
Props westonruter, georgestephanis, obenland, melchoyce, pixolin, mizejewski, michelleweber, afercia, grahamarmfield, samikeijonen, rianrietveld, iseulde.
See #38707.
Fixes #12423, #39892.
Built from https://develop.svn.wordpress.org/trunk@41376
git-svn-id: http://core.svn.wordpress.org/trunk@41209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-13 02:08:47 -04:00
$settings = array (
'codemirror' => array (
2017-11-30 18:11:00 -05:00
'indentUnit' => 4 ,
'indentWithTabs' => true ,
'inputStyle' => 'contenteditable' ,
'lineNumbers' => true ,
'lineWrapping' => true ,
'styleActiveLine' => true ,
Editor: Add CodeMirror-powered code editor with syntax highlighting, linting, and auto-completion.
* Code editor is integrated into the Theme/Plugin Editor, Additional CSS in Customizer, and Custom HTML widget. Code editor is not yet integrated into the post editor, and it may not be until accessibility concerns are addressed.
* The CodeMirror component in the Custom HTML widget is integrated in a similar way to TinyMCE being integrated into the Text widget, adopting the same approach for integrating dynamic JavaScript-initialized fields.
* Linting is performed for JS, CSS, HTML, and JSON via JSHint, CSSLint, HTMLHint, and JSONLint respectively. Linting is not yet supported for PHP.
* When user lacks `unfiltered_html` the capability, the Custom HTML widget will report any Kses-invalid elements and attributes as errors via a custom Kses rule for HTMLHint.
* When linting errors are detected, the user will be prevented from saving the code until the errors are fixed, reducing instances of broken websites.
* The placeholder value is removed from Custom CSS in favor of a fleshed-out section description which now auto-expands when the CSS field is empty. See #39892.
* The CodeMirror library is included as `wp.CodeMirror` to prevent conflicts with any existing `CodeMirror` global.
* An `wp.codeEditor.initialize()` API in JS is provided to convert a `textarea` into CodeMirror, with a `wp_enqueue_code_editor()` function in PHP to manage enqueueing the assets and settings needed to edit a given type of code.
* A user preference is added to manage whether or not "syntax highlighting" is enabled. The feature is opt-out, being enabled by default.
* Allowed file extensions in the theme and plugin editors have been updated to include formats which CodeMirror has modes for: `conf`, `css`, `diff`, `patch`, `html`, `htm`, `http`, `js`, `json`, `jsx`, `less`, `md`, `php`, `phtml`, `php3`, `php4`, `php5`, `php7`, `phps`, `scss`, `sass`, `sh`, `bash`, `sql`, `svg`, `xml`, `yml`, `yaml`, `txt`.
Props westonruter, georgestephanis, obenland, melchoyce, pixolin, mizejewski, michelleweber, afercia, grahamarmfield, samikeijonen, rianrietveld, iseulde.
See #38707.
Fixes #12423, #39892.
Built from https://develop.svn.wordpress.org/trunk@41376
git-svn-id: http://core.svn.wordpress.org/trunk@41209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-13 02:08:47 -04:00
'continueComments' => true ,
2017-11-30 18:11:00 -05:00
'extraKeys' => array (
Editor: Add CodeMirror-powered code editor with syntax highlighting, linting, and auto-completion.
* Code editor is integrated into the Theme/Plugin Editor, Additional CSS in Customizer, and Custom HTML widget. Code editor is not yet integrated into the post editor, and it may not be until accessibility concerns are addressed.
* The CodeMirror component in the Custom HTML widget is integrated in a similar way to TinyMCE being integrated into the Text widget, adopting the same approach for integrating dynamic JavaScript-initialized fields.
* Linting is performed for JS, CSS, HTML, and JSON via JSHint, CSSLint, HTMLHint, and JSONLint respectively. Linting is not yet supported for PHP.
* When user lacks `unfiltered_html` the capability, the Custom HTML widget will report any Kses-invalid elements and attributes as errors via a custom Kses rule for HTMLHint.
* When linting errors are detected, the user will be prevented from saving the code until the errors are fixed, reducing instances of broken websites.
* The placeholder value is removed from Custom CSS in favor of a fleshed-out section description which now auto-expands when the CSS field is empty. See #39892.
* The CodeMirror library is included as `wp.CodeMirror` to prevent conflicts with any existing `CodeMirror` global.
* An `wp.codeEditor.initialize()` API in JS is provided to convert a `textarea` into CodeMirror, with a `wp_enqueue_code_editor()` function in PHP to manage enqueueing the assets and settings needed to edit a given type of code.
* A user preference is added to manage whether or not "syntax highlighting" is enabled. The feature is opt-out, being enabled by default.
* Allowed file extensions in the theme and plugin editors have been updated to include formats which CodeMirror has modes for: `conf`, `css`, `diff`, `patch`, `html`, `htm`, `http`, `js`, `json`, `jsx`, `less`, `md`, `php`, `phtml`, `php3`, `php4`, `php5`, `php7`, `phps`, `scss`, `sass`, `sh`, `bash`, `sql`, `svg`, `xml`, `yml`, `yaml`, `txt`.
Props westonruter, georgestephanis, obenland, melchoyce, pixolin, mizejewski, michelleweber, afercia, grahamarmfield, samikeijonen, rianrietveld, iseulde.
See #38707.
Fixes #12423, #39892.
Built from https://develop.svn.wordpress.org/trunk@41376
git-svn-id: http://core.svn.wordpress.org/trunk@41209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-13 02:08:47 -04:00
'Ctrl-Space' => 'autocomplete' ,
2017-11-30 18:11:00 -05:00
'Ctrl-/' => 'toggleComment' ,
'Cmd-/' => 'toggleComment' ,
'Alt-F' => 'findPersistent' ,
2018-01-31 17:22:30 -05:00
'Ctrl-F' => 'findPersistent' ,
'Cmd-F' => 'findPersistent' ,
Editor: Add CodeMirror-powered code editor with syntax highlighting, linting, and auto-completion.
* Code editor is integrated into the Theme/Plugin Editor, Additional CSS in Customizer, and Custom HTML widget. Code editor is not yet integrated into the post editor, and it may not be until accessibility concerns are addressed.
* The CodeMirror component in the Custom HTML widget is integrated in a similar way to TinyMCE being integrated into the Text widget, adopting the same approach for integrating dynamic JavaScript-initialized fields.
* Linting is performed for JS, CSS, HTML, and JSON via JSHint, CSSLint, HTMLHint, and JSONLint respectively. Linting is not yet supported for PHP.
* When user lacks `unfiltered_html` the capability, the Custom HTML widget will report any Kses-invalid elements and attributes as errors via a custom Kses rule for HTMLHint.
* When linting errors are detected, the user will be prevented from saving the code until the errors are fixed, reducing instances of broken websites.
* The placeholder value is removed from Custom CSS in favor of a fleshed-out section description which now auto-expands when the CSS field is empty. See #39892.
* The CodeMirror library is included as `wp.CodeMirror` to prevent conflicts with any existing `CodeMirror` global.
* An `wp.codeEditor.initialize()` API in JS is provided to convert a `textarea` into CodeMirror, with a `wp_enqueue_code_editor()` function in PHP to manage enqueueing the assets and settings needed to edit a given type of code.
* A user preference is added to manage whether or not "syntax highlighting" is enabled. The feature is opt-out, being enabled by default.
* Allowed file extensions in the theme and plugin editors have been updated to include formats which CodeMirror has modes for: `conf`, `css`, `diff`, `patch`, `html`, `htm`, `http`, `js`, `json`, `jsx`, `less`, `md`, `php`, `phtml`, `php3`, `php4`, `php5`, `php7`, `phps`, `scss`, `sass`, `sh`, `bash`, `sql`, `svg`, `xml`, `yml`, `yaml`, `txt`.
Props westonruter, georgestephanis, obenland, melchoyce, pixolin, mizejewski, michelleweber, afercia, grahamarmfield, samikeijonen, rianrietveld, iseulde.
See #38707.
Fixes #12423, #39892.
Built from https://develop.svn.wordpress.org/trunk@41376
git-svn-id: http://core.svn.wordpress.org/trunk@41209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-13 02:08:47 -04:00
),
2017-11-30 18:11:00 -05:00
'direction' => 'ltr' , // Code is shown in LTR even in RTL languages.
'gutters' => array (),
Editor: Add CodeMirror-powered code editor with syntax highlighting, linting, and auto-completion.
* Code editor is integrated into the Theme/Plugin Editor, Additional CSS in Customizer, and Custom HTML widget. Code editor is not yet integrated into the post editor, and it may not be until accessibility concerns are addressed.
* The CodeMirror component in the Custom HTML widget is integrated in a similar way to TinyMCE being integrated into the Text widget, adopting the same approach for integrating dynamic JavaScript-initialized fields.
* Linting is performed for JS, CSS, HTML, and JSON via JSHint, CSSLint, HTMLHint, and JSONLint respectively. Linting is not yet supported for PHP.
* When user lacks `unfiltered_html` the capability, the Custom HTML widget will report any Kses-invalid elements and attributes as errors via a custom Kses rule for HTMLHint.
* When linting errors are detected, the user will be prevented from saving the code until the errors are fixed, reducing instances of broken websites.
* The placeholder value is removed from Custom CSS in favor of a fleshed-out section description which now auto-expands when the CSS field is empty. See #39892.
* The CodeMirror library is included as `wp.CodeMirror` to prevent conflicts with any existing `CodeMirror` global.
* An `wp.codeEditor.initialize()` API in JS is provided to convert a `textarea` into CodeMirror, with a `wp_enqueue_code_editor()` function in PHP to manage enqueueing the assets and settings needed to edit a given type of code.
* A user preference is added to manage whether or not "syntax highlighting" is enabled. The feature is opt-out, being enabled by default.
* Allowed file extensions in the theme and plugin editors have been updated to include formats which CodeMirror has modes for: `conf`, `css`, `diff`, `patch`, `html`, `htm`, `http`, `js`, `json`, `jsx`, `less`, `md`, `php`, `phtml`, `php3`, `php4`, `php5`, `php7`, `phps`, `scss`, `sass`, `sh`, `bash`, `sql`, `svg`, `xml`, `yml`, `yaml`, `txt`.
Props westonruter, georgestephanis, obenland, melchoyce, pixolin, mizejewski, michelleweber, afercia, grahamarmfield, samikeijonen, rianrietveld, iseulde.
See #38707.
Fixes #12423, #39892.
Built from https://develop.svn.wordpress.org/trunk@41376
git-svn-id: http://core.svn.wordpress.org/trunk@41209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-13 02:08:47 -04:00
),
2017-11-30 18:11:00 -05:00
'csslint' => array (
'errors' => true , // Parsing errors.
'box-model' => true ,
Editor: Add CodeMirror-powered code editor with syntax highlighting, linting, and auto-completion.
* Code editor is integrated into the Theme/Plugin Editor, Additional CSS in Customizer, and Custom HTML widget. Code editor is not yet integrated into the post editor, and it may not be until accessibility concerns are addressed.
* The CodeMirror component in the Custom HTML widget is integrated in a similar way to TinyMCE being integrated into the Text widget, adopting the same approach for integrating dynamic JavaScript-initialized fields.
* Linting is performed for JS, CSS, HTML, and JSON via JSHint, CSSLint, HTMLHint, and JSONLint respectively. Linting is not yet supported for PHP.
* When user lacks `unfiltered_html` the capability, the Custom HTML widget will report any Kses-invalid elements and attributes as errors via a custom Kses rule for HTMLHint.
* When linting errors are detected, the user will be prevented from saving the code until the errors are fixed, reducing instances of broken websites.
* The placeholder value is removed from Custom CSS in favor of a fleshed-out section description which now auto-expands when the CSS field is empty. See #39892.
* The CodeMirror library is included as `wp.CodeMirror` to prevent conflicts with any existing `CodeMirror` global.
* An `wp.codeEditor.initialize()` API in JS is provided to convert a `textarea` into CodeMirror, with a `wp_enqueue_code_editor()` function in PHP to manage enqueueing the assets and settings needed to edit a given type of code.
* A user preference is added to manage whether or not "syntax highlighting" is enabled. The feature is opt-out, being enabled by default.
* Allowed file extensions in the theme and plugin editors have been updated to include formats which CodeMirror has modes for: `conf`, `css`, `diff`, `patch`, `html`, `htm`, `http`, `js`, `json`, `jsx`, `less`, `md`, `php`, `phtml`, `php3`, `php4`, `php5`, `php7`, `phps`, `scss`, `sass`, `sh`, `bash`, `sql`, `svg`, `xml`, `yml`, `yaml`, `txt`.
Props westonruter, georgestephanis, obenland, melchoyce, pixolin, mizejewski, michelleweber, afercia, grahamarmfield, samikeijonen, rianrietveld, iseulde.
See #38707.
Fixes #12423, #39892.
Built from https://develop.svn.wordpress.org/trunk@41376
git-svn-id: http://core.svn.wordpress.org/trunk@41209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-13 02:08:47 -04:00
'display-property-grouping' => true ,
2017-11-30 18:11:00 -05:00
'duplicate-properties' => true ,
'known-properties' => true ,
'outline-none' => true ,
Editor: Add CodeMirror-powered code editor with syntax highlighting, linting, and auto-completion.
* Code editor is integrated into the Theme/Plugin Editor, Additional CSS in Customizer, and Custom HTML widget. Code editor is not yet integrated into the post editor, and it may not be until accessibility concerns are addressed.
* The CodeMirror component in the Custom HTML widget is integrated in a similar way to TinyMCE being integrated into the Text widget, adopting the same approach for integrating dynamic JavaScript-initialized fields.
* Linting is performed for JS, CSS, HTML, and JSON via JSHint, CSSLint, HTMLHint, and JSONLint respectively. Linting is not yet supported for PHP.
* When user lacks `unfiltered_html` the capability, the Custom HTML widget will report any Kses-invalid elements and attributes as errors via a custom Kses rule for HTMLHint.
* When linting errors are detected, the user will be prevented from saving the code until the errors are fixed, reducing instances of broken websites.
* The placeholder value is removed from Custom CSS in favor of a fleshed-out section description which now auto-expands when the CSS field is empty. See #39892.
* The CodeMirror library is included as `wp.CodeMirror` to prevent conflicts with any existing `CodeMirror` global.
* An `wp.codeEditor.initialize()` API in JS is provided to convert a `textarea` into CodeMirror, with a `wp_enqueue_code_editor()` function in PHP to manage enqueueing the assets and settings needed to edit a given type of code.
* A user preference is added to manage whether or not "syntax highlighting" is enabled. The feature is opt-out, being enabled by default.
* Allowed file extensions in the theme and plugin editors have been updated to include formats which CodeMirror has modes for: `conf`, `css`, `diff`, `patch`, `html`, `htm`, `http`, `js`, `json`, `jsx`, `less`, `md`, `php`, `phtml`, `php3`, `php4`, `php5`, `php7`, `phps`, `scss`, `sass`, `sh`, `bash`, `sql`, `svg`, `xml`, `yml`, `yaml`, `txt`.
Props westonruter, georgestephanis, obenland, melchoyce, pixolin, mizejewski, michelleweber, afercia, grahamarmfield, samikeijonen, rianrietveld, iseulde.
See #38707.
Fixes #12423, #39892.
Built from https://develop.svn.wordpress.org/trunk@41376
git-svn-id: http://core.svn.wordpress.org/trunk@41209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-13 02:08:47 -04:00
),
2017-11-30 18:11:00 -05:00
'jshint' => array (
Editor: Add CodeMirror-powered code editor with syntax highlighting, linting, and auto-completion.
* Code editor is integrated into the Theme/Plugin Editor, Additional CSS in Customizer, and Custom HTML widget. Code editor is not yet integrated into the post editor, and it may not be until accessibility concerns are addressed.
* The CodeMirror component in the Custom HTML widget is integrated in a similar way to TinyMCE being integrated into the Text widget, adopting the same approach for integrating dynamic JavaScript-initialized fields.
* Linting is performed for JS, CSS, HTML, and JSON via JSHint, CSSLint, HTMLHint, and JSONLint respectively. Linting is not yet supported for PHP.
* When user lacks `unfiltered_html` the capability, the Custom HTML widget will report any Kses-invalid elements and attributes as errors via a custom Kses rule for HTMLHint.
* When linting errors are detected, the user will be prevented from saving the code until the errors are fixed, reducing instances of broken websites.
* The placeholder value is removed from Custom CSS in favor of a fleshed-out section description which now auto-expands when the CSS field is empty. See #39892.
* The CodeMirror library is included as `wp.CodeMirror` to prevent conflicts with any existing `CodeMirror` global.
* An `wp.codeEditor.initialize()` API in JS is provided to convert a `textarea` into CodeMirror, with a `wp_enqueue_code_editor()` function in PHP to manage enqueueing the assets and settings needed to edit a given type of code.
* A user preference is added to manage whether or not "syntax highlighting" is enabled. The feature is opt-out, being enabled by default.
* Allowed file extensions in the theme and plugin editors have been updated to include formats which CodeMirror has modes for: `conf`, `css`, `diff`, `patch`, `html`, `htm`, `http`, `js`, `json`, `jsx`, `less`, `md`, `php`, `phtml`, `php3`, `php4`, `php5`, `php7`, `phps`, `scss`, `sass`, `sh`, `bash`, `sql`, `svg`, `xml`, `yml`, `yaml`, `txt`.
Props westonruter, georgestephanis, obenland, melchoyce, pixolin, mizejewski, michelleweber, afercia, grahamarmfield, samikeijonen, rianrietveld, iseulde.
See #38707.
Fixes #12423, #39892.
Built from https://develop.svn.wordpress.org/trunk@41376
git-svn-id: http://core.svn.wordpress.org/trunk@41209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-13 02:08:47 -04:00
// The following are copied from <https://github.com/WordPress/wordpress-develop/blob/4.8.1/.jshintrc>.
2017-11-30 18:11:00 -05:00
'boss' => true ,
'curly' => true ,
'eqeqeq' => true ,
'eqnull' => true ,
'es3' => true ,
'expr' => true ,
'immed' => true ,
'noarg' => true ,
'nonbsp' => true ,
'onevar' => true ,
Editor: Add CodeMirror-powered code editor with syntax highlighting, linting, and auto-completion.
* Code editor is integrated into the Theme/Plugin Editor, Additional CSS in Customizer, and Custom HTML widget. Code editor is not yet integrated into the post editor, and it may not be until accessibility concerns are addressed.
* The CodeMirror component in the Custom HTML widget is integrated in a similar way to TinyMCE being integrated into the Text widget, adopting the same approach for integrating dynamic JavaScript-initialized fields.
* Linting is performed for JS, CSS, HTML, and JSON via JSHint, CSSLint, HTMLHint, and JSONLint respectively. Linting is not yet supported for PHP.
* When user lacks `unfiltered_html` the capability, the Custom HTML widget will report any Kses-invalid elements and attributes as errors via a custom Kses rule for HTMLHint.
* When linting errors are detected, the user will be prevented from saving the code until the errors are fixed, reducing instances of broken websites.
* The placeholder value is removed from Custom CSS in favor of a fleshed-out section description which now auto-expands when the CSS field is empty. See #39892.
* The CodeMirror library is included as `wp.CodeMirror` to prevent conflicts with any existing `CodeMirror` global.
* An `wp.codeEditor.initialize()` API in JS is provided to convert a `textarea` into CodeMirror, with a `wp_enqueue_code_editor()` function in PHP to manage enqueueing the assets and settings needed to edit a given type of code.
* A user preference is added to manage whether or not "syntax highlighting" is enabled. The feature is opt-out, being enabled by default.
* Allowed file extensions in the theme and plugin editors have been updated to include formats which CodeMirror has modes for: `conf`, `css`, `diff`, `patch`, `html`, `htm`, `http`, `js`, `json`, `jsx`, `less`, `md`, `php`, `phtml`, `php3`, `php4`, `php5`, `php7`, `phps`, `scss`, `sass`, `sh`, `bash`, `sql`, `svg`, `xml`, `yml`, `yaml`, `txt`.
Props westonruter, georgestephanis, obenland, melchoyce, pixolin, mizejewski, michelleweber, afercia, grahamarmfield, samikeijonen, rianrietveld, iseulde.
See #38707.
Fixes #12423, #39892.
Built from https://develop.svn.wordpress.org/trunk@41376
git-svn-id: http://core.svn.wordpress.org/trunk@41209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-13 02:08:47 -04:00
'quotmark' => 'single' ,
'trailing' => true ,
2017-11-30 18:11:00 -05:00
'undef' => true ,
'unused' => true ,
Editor: Add CodeMirror-powered code editor with syntax highlighting, linting, and auto-completion.
* Code editor is integrated into the Theme/Plugin Editor, Additional CSS in Customizer, and Custom HTML widget. Code editor is not yet integrated into the post editor, and it may not be until accessibility concerns are addressed.
* The CodeMirror component in the Custom HTML widget is integrated in a similar way to TinyMCE being integrated into the Text widget, adopting the same approach for integrating dynamic JavaScript-initialized fields.
* Linting is performed for JS, CSS, HTML, and JSON via JSHint, CSSLint, HTMLHint, and JSONLint respectively. Linting is not yet supported for PHP.
* When user lacks `unfiltered_html` the capability, the Custom HTML widget will report any Kses-invalid elements and attributes as errors via a custom Kses rule for HTMLHint.
* When linting errors are detected, the user will be prevented from saving the code until the errors are fixed, reducing instances of broken websites.
* The placeholder value is removed from Custom CSS in favor of a fleshed-out section description which now auto-expands when the CSS field is empty. See #39892.
* The CodeMirror library is included as `wp.CodeMirror` to prevent conflicts with any existing `CodeMirror` global.
* An `wp.codeEditor.initialize()` API in JS is provided to convert a `textarea` into CodeMirror, with a `wp_enqueue_code_editor()` function in PHP to manage enqueueing the assets and settings needed to edit a given type of code.
* A user preference is added to manage whether or not "syntax highlighting" is enabled. The feature is opt-out, being enabled by default.
* Allowed file extensions in the theme and plugin editors have been updated to include formats which CodeMirror has modes for: `conf`, `css`, `diff`, `patch`, `html`, `htm`, `http`, `js`, `json`, `jsx`, `less`, `md`, `php`, `phtml`, `php3`, `php4`, `php5`, `php7`, `phps`, `scss`, `sass`, `sh`, `bash`, `sql`, `svg`, `xml`, `yml`, `yaml`, `txt`.
Props westonruter, georgestephanis, obenland, melchoyce, pixolin, mizejewski, michelleweber, afercia, grahamarmfield, samikeijonen, rianrietveld, iseulde.
See #38707.
Fixes #12423, #39892.
Built from https://develop.svn.wordpress.org/trunk@41376
git-svn-id: http://core.svn.wordpress.org/trunk@41209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-13 02:08:47 -04:00
2017-11-30 18:11:00 -05:00
'browser' => true ,
Editor: Add CodeMirror-powered code editor with syntax highlighting, linting, and auto-completion.
* Code editor is integrated into the Theme/Plugin Editor, Additional CSS in Customizer, and Custom HTML widget. Code editor is not yet integrated into the post editor, and it may not be until accessibility concerns are addressed.
* The CodeMirror component in the Custom HTML widget is integrated in a similar way to TinyMCE being integrated into the Text widget, adopting the same approach for integrating dynamic JavaScript-initialized fields.
* Linting is performed for JS, CSS, HTML, and JSON via JSHint, CSSLint, HTMLHint, and JSONLint respectively. Linting is not yet supported for PHP.
* When user lacks `unfiltered_html` the capability, the Custom HTML widget will report any Kses-invalid elements and attributes as errors via a custom Kses rule for HTMLHint.
* When linting errors are detected, the user will be prevented from saving the code until the errors are fixed, reducing instances of broken websites.
* The placeholder value is removed from Custom CSS in favor of a fleshed-out section description which now auto-expands when the CSS field is empty. See #39892.
* The CodeMirror library is included as `wp.CodeMirror` to prevent conflicts with any existing `CodeMirror` global.
* An `wp.codeEditor.initialize()` API in JS is provided to convert a `textarea` into CodeMirror, with a `wp_enqueue_code_editor()` function in PHP to manage enqueueing the assets and settings needed to edit a given type of code.
* A user preference is added to manage whether or not "syntax highlighting" is enabled. The feature is opt-out, being enabled by default.
* Allowed file extensions in the theme and plugin editors have been updated to include formats which CodeMirror has modes for: `conf`, `css`, `diff`, `patch`, `html`, `htm`, `http`, `js`, `json`, `jsx`, `less`, `md`, `php`, `phtml`, `php3`, `php4`, `php5`, `php7`, `phps`, `scss`, `sass`, `sh`, `bash`, `sql`, `svg`, `xml`, `yml`, `yaml`, `txt`.
Props westonruter, georgestephanis, obenland, melchoyce, pixolin, mizejewski, michelleweber, afercia, grahamarmfield, samikeijonen, rianrietveld, iseulde.
See #38707.
Fixes #12423, #39892.
Built from https://develop.svn.wordpress.org/trunk@41376
git-svn-id: http://core.svn.wordpress.org/trunk@41209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-13 02:08:47 -04:00
2017-11-30 18:11:00 -05:00
'globals' => array (
'_' => false ,
Editor: Add CodeMirror-powered code editor with syntax highlighting, linting, and auto-completion.
* Code editor is integrated into the Theme/Plugin Editor, Additional CSS in Customizer, and Custom HTML widget. Code editor is not yet integrated into the post editor, and it may not be until accessibility concerns are addressed.
* The CodeMirror component in the Custom HTML widget is integrated in a similar way to TinyMCE being integrated into the Text widget, adopting the same approach for integrating dynamic JavaScript-initialized fields.
* Linting is performed for JS, CSS, HTML, and JSON via JSHint, CSSLint, HTMLHint, and JSONLint respectively. Linting is not yet supported for PHP.
* When user lacks `unfiltered_html` the capability, the Custom HTML widget will report any Kses-invalid elements and attributes as errors via a custom Kses rule for HTMLHint.
* When linting errors are detected, the user will be prevented from saving the code until the errors are fixed, reducing instances of broken websites.
* The placeholder value is removed from Custom CSS in favor of a fleshed-out section description which now auto-expands when the CSS field is empty. See #39892.
* The CodeMirror library is included as `wp.CodeMirror` to prevent conflicts with any existing `CodeMirror` global.
* An `wp.codeEditor.initialize()` API in JS is provided to convert a `textarea` into CodeMirror, with a `wp_enqueue_code_editor()` function in PHP to manage enqueueing the assets and settings needed to edit a given type of code.
* A user preference is added to manage whether or not "syntax highlighting" is enabled. The feature is opt-out, being enabled by default.
* Allowed file extensions in the theme and plugin editors have been updated to include formats which CodeMirror has modes for: `conf`, `css`, `diff`, `patch`, `html`, `htm`, `http`, `js`, `json`, `jsx`, `less`, `md`, `php`, `phtml`, `php3`, `php4`, `php5`, `php7`, `phps`, `scss`, `sass`, `sh`, `bash`, `sql`, `svg`, `xml`, `yml`, `yaml`, `txt`.
Props westonruter, georgestephanis, obenland, melchoyce, pixolin, mizejewski, michelleweber, afercia, grahamarmfield, samikeijonen, rianrietveld, iseulde.
See #38707.
Fixes #12423, #39892.
Built from https://develop.svn.wordpress.org/trunk@41376
git-svn-id: http://core.svn.wordpress.org/trunk@41209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-13 02:08:47 -04:00
'Backbone' => false ,
2017-11-30 18:11:00 -05:00
'jQuery' => false ,
'JSON' => false ,
'wp' => false ,
Editor: Add CodeMirror-powered code editor with syntax highlighting, linting, and auto-completion.
* Code editor is integrated into the Theme/Plugin Editor, Additional CSS in Customizer, and Custom HTML widget. Code editor is not yet integrated into the post editor, and it may not be until accessibility concerns are addressed.
* The CodeMirror component in the Custom HTML widget is integrated in a similar way to TinyMCE being integrated into the Text widget, adopting the same approach for integrating dynamic JavaScript-initialized fields.
* Linting is performed for JS, CSS, HTML, and JSON via JSHint, CSSLint, HTMLHint, and JSONLint respectively. Linting is not yet supported for PHP.
* When user lacks `unfiltered_html` the capability, the Custom HTML widget will report any Kses-invalid elements and attributes as errors via a custom Kses rule for HTMLHint.
* When linting errors are detected, the user will be prevented from saving the code until the errors are fixed, reducing instances of broken websites.
* The placeholder value is removed from Custom CSS in favor of a fleshed-out section description which now auto-expands when the CSS field is empty. See #39892.
* The CodeMirror library is included as `wp.CodeMirror` to prevent conflicts with any existing `CodeMirror` global.
* An `wp.codeEditor.initialize()` API in JS is provided to convert a `textarea` into CodeMirror, with a `wp_enqueue_code_editor()` function in PHP to manage enqueueing the assets and settings needed to edit a given type of code.
* A user preference is added to manage whether or not "syntax highlighting" is enabled. The feature is opt-out, being enabled by default.
* Allowed file extensions in the theme and plugin editors have been updated to include formats which CodeMirror has modes for: `conf`, `css`, `diff`, `patch`, `html`, `htm`, `http`, `js`, `json`, `jsx`, `less`, `md`, `php`, `phtml`, `php3`, `php4`, `php5`, `php7`, `phps`, `scss`, `sass`, `sh`, `bash`, `sql`, `svg`, `xml`, `yml`, `yaml`, `txt`.
Props westonruter, georgestephanis, obenland, melchoyce, pixolin, mizejewski, michelleweber, afercia, grahamarmfield, samikeijonen, rianrietveld, iseulde.
See #38707.
Fixes #12423, #39892.
Built from https://develop.svn.wordpress.org/trunk@41376
git-svn-id: http://core.svn.wordpress.org/trunk@41209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-13 02:08:47 -04:00
),
),
2017-11-30 18:11:00 -05:00
'htmlhint' => array (
'tagname-lowercase' => true ,
'attr-lowercase' => true ,
2018-01-21 03:01:31 -05:00
'attr-value-double-quotes' => false ,
2017-11-30 18:11:00 -05:00
'doctype-first' => false ,
'tag-pair' => true ,
'spec-char-escape' => true ,
'id-unique' => true ,
'src-not-empty' => true ,
'attr-no-duplication' => true ,
'alt-require' => true ,
Editor: Add CodeMirror-powered code editor with syntax highlighting, linting, and auto-completion.
* Code editor is integrated into the Theme/Plugin Editor, Additional CSS in Customizer, and Custom HTML widget. Code editor is not yet integrated into the post editor, and it may not be until accessibility concerns are addressed.
* The CodeMirror component in the Custom HTML widget is integrated in a similar way to TinyMCE being integrated into the Text widget, adopting the same approach for integrating dynamic JavaScript-initialized fields.
* Linting is performed for JS, CSS, HTML, and JSON via JSHint, CSSLint, HTMLHint, and JSONLint respectively. Linting is not yet supported for PHP.
* When user lacks `unfiltered_html` the capability, the Custom HTML widget will report any Kses-invalid elements and attributes as errors via a custom Kses rule for HTMLHint.
* When linting errors are detected, the user will be prevented from saving the code until the errors are fixed, reducing instances of broken websites.
* The placeholder value is removed from Custom CSS in favor of a fleshed-out section description which now auto-expands when the CSS field is empty. See #39892.
* The CodeMirror library is included as `wp.CodeMirror` to prevent conflicts with any existing `CodeMirror` global.
* An `wp.codeEditor.initialize()` API in JS is provided to convert a `textarea` into CodeMirror, with a `wp_enqueue_code_editor()` function in PHP to manage enqueueing the assets and settings needed to edit a given type of code.
* A user preference is added to manage whether or not "syntax highlighting" is enabled. The feature is opt-out, being enabled by default.
* Allowed file extensions in the theme and plugin editors have been updated to include formats which CodeMirror has modes for: `conf`, `css`, `diff`, `patch`, `html`, `htm`, `http`, `js`, `json`, `jsx`, `less`, `md`, `php`, `phtml`, `php3`, `php4`, `php5`, `php7`, `phps`, `scss`, `sass`, `sh`, `bash`, `sql`, `svg`, `xml`, `yml`, `yaml`, `txt`.
Props westonruter, georgestephanis, obenland, melchoyce, pixolin, mizejewski, michelleweber, afercia, grahamarmfield, samikeijonen, rianrietveld, iseulde.
See #38707.
Fixes #12423, #39892.
Built from https://develop.svn.wordpress.org/trunk@41376
git-svn-id: http://core.svn.wordpress.org/trunk@41209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-13 02:08:47 -04:00
'space-tab-mixed-disabled' => 'tab' ,
2017-11-30 18:11:00 -05:00
'attr-unsafe-chars' => true ,
Editor: Add CodeMirror-powered code editor with syntax highlighting, linting, and auto-completion.
* Code editor is integrated into the Theme/Plugin Editor, Additional CSS in Customizer, and Custom HTML widget. Code editor is not yet integrated into the post editor, and it may not be until accessibility concerns are addressed.
* The CodeMirror component in the Custom HTML widget is integrated in a similar way to TinyMCE being integrated into the Text widget, adopting the same approach for integrating dynamic JavaScript-initialized fields.
* Linting is performed for JS, CSS, HTML, and JSON via JSHint, CSSLint, HTMLHint, and JSONLint respectively. Linting is not yet supported for PHP.
* When user lacks `unfiltered_html` the capability, the Custom HTML widget will report any Kses-invalid elements and attributes as errors via a custom Kses rule for HTMLHint.
* When linting errors are detected, the user will be prevented from saving the code until the errors are fixed, reducing instances of broken websites.
* The placeholder value is removed from Custom CSS in favor of a fleshed-out section description which now auto-expands when the CSS field is empty. See #39892.
* The CodeMirror library is included as `wp.CodeMirror` to prevent conflicts with any existing `CodeMirror` global.
* An `wp.codeEditor.initialize()` API in JS is provided to convert a `textarea` into CodeMirror, with a `wp_enqueue_code_editor()` function in PHP to manage enqueueing the assets and settings needed to edit a given type of code.
* A user preference is added to manage whether or not "syntax highlighting" is enabled. The feature is opt-out, being enabled by default.
* Allowed file extensions in the theme and plugin editors have been updated to include formats which CodeMirror has modes for: `conf`, `css`, `diff`, `patch`, `html`, `htm`, `http`, `js`, `json`, `jsx`, `less`, `md`, `php`, `phtml`, `php3`, `php4`, `php5`, `php7`, `phps`, `scss`, `sass`, `sh`, `bash`, `sql`, `svg`, `xml`, `yml`, `yaml`, `txt`.
Props westonruter, georgestephanis, obenland, melchoyce, pixolin, mizejewski, michelleweber, afercia, grahamarmfield, samikeijonen, rianrietveld, iseulde.
See #38707.
Fixes #12423, #39892.
Built from https://develop.svn.wordpress.org/trunk@41376
git-svn-id: http://core.svn.wordpress.org/trunk@41209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-13 02:08:47 -04:00
),
);
$type = '' ;
if ( isset ( $args [ 'type' ] ) ) {
$type = $args [ 'type' ];
// Remap MIME types to ones that CodeMirror modes will recognize.
if ( 'application/x-patch' === $type || 'text/x-patch' === $type ) {
$type = 'text/x-diff' ;
}
} elseif ( isset ( $args [ 'file' ] ) && false !== strpos ( basename ( $args [ 'file' ] ), '.' ) ) {
$extension = strtolower ( pathinfo ( $args [ 'file' ], PATHINFO_EXTENSION ) );
foreach ( wp_get_mime_types () as $exts => $mime ) {
if ( preg_match ( '!^(' . $exts . ')$!i' , $extension ) ) {
$type = $mime ;
break ;
}
}
// Supply any types that are not matched by wp_get_mime_types().
if ( empty ( $type ) ) {
switch ( $extension ) {
case 'conf' :
$type = 'text/nginx' ;
break ;
case 'css' :
$type = 'text/css' ;
break ;
case 'diff' :
case 'patch' :
$type = 'text/x-diff' ;
break ;
case 'html' :
case 'htm' :
$type = 'text/html' ;
break ;
case 'http' :
$type = 'message/http' ;
break ;
case 'js' :
$type = 'text/javascript' ;
break ;
case 'json' :
$type = 'application/json' ;
break ;
case 'jsx' :
$type = 'text/jsx' ;
break ;
case 'less' :
$type = 'text/x-less' ;
break ;
case 'md' :
$type = 'text/x-gfm' ;
break ;
case 'php' :
case 'phtml' :
case 'php3' :
case 'php4' :
case 'php5' :
case 'php7' :
case 'phps' :
$type = 'application/x-httpd-php' ;
break ;
case 'scss' :
$type = 'text/x-scss' ;
break ;
case 'sass' :
$type = 'text/x-sass' ;
break ;
case 'sh' :
case 'bash' :
$type = 'text/x-sh' ;
break ;
case 'sql' :
$type = 'text/x-sql' ;
break ;
case 'svg' :
$type = 'application/svg+xml' ;
break ;
case 'xml' :
$type = 'text/xml' ;
break ;
case 'yml' :
case 'yaml' :
$type = 'text/x-yaml' ;
break ;
case 'txt' :
default :
$type = 'text/plain' ;
break ;
}
}
}
Theme Editor: Disable CodeMirror CSS linting.
Being a good idea in theory, in practice it does not always work reliably, may not recognize newer CSS properties, and sometimes displays phantom errors with no particular error message.
A plugin can re-enable CSS linting via the `wp_code_editor_settings` filter.
Props skypressatx, ThemeZee, johnbillion, ianbelanger, ZanderZ, starvoters1, raoulunger, prashantvatsh, SergeyBiryukov.
Fixes #44471.
Built from https://develop.svn.wordpress.org/trunk@47305
git-svn-id: http://core.svn.wordpress.org/trunk@47105 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2020-02-18 10:51:08 -05:00
if ( in_array ( $type , array ( 'text/css' , 'text/x-scss' , 'text/x-less' , 'text/x-sass' ), true ) ) {
2017-11-30 18:11:00 -05:00
$settings [ 'codemirror' ] = array_merge (
2018-08-16 21:51:36 -04:00
$settings [ 'codemirror' ],
array (
2017-11-30 18:11:00 -05:00
'mode' => $type ,
'lint' => false ,
'autoCloseBrackets' => true ,
'matchBrackets' => true ,
)
);
Editor: Add CodeMirror-powered code editor with syntax highlighting, linting, and auto-completion.
* Code editor is integrated into the Theme/Plugin Editor, Additional CSS in Customizer, and Custom HTML widget. Code editor is not yet integrated into the post editor, and it may not be until accessibility concerns are addressed.
* The CodeMirror component in the Custom HTML widget is integrated in a similar way to TinyMCE being integrated into the Text widget, adopting the same approach for integrating dynamic JavaScript-initialized fields.
* Linting is performed for JS, CSS, HTML, and JSON via JSHint, CSSLint, HTMLHint, and JSONLint respectively. Linting is not yet supported for PHP.
* When user lacks `unfiltered_html` the capability, the Custom HTML widget will report any Kses-invalid elements and attributes as errors via a custom Kses rule for HTMLHint.
* When linting errors are detected, the user will be prevented from saving the code until the errors are fixed, reducing instances of broken websites.
* The placeholder value is removed from Custom CSS in favor of a fleshed-out section description which now auto-expands when the CSS field is empty. See #39892.
* The CodeMirror library is included as `wp.CodeMirror` to prevent conflicts with any existing `CodeMirror` global.
* An `wp.codeEditor.initialize()` API in JS is provided to convert a `textarea` into CodeMirror, with a `wp_enqueue_code_editor()` function in PHP to manage enqueueing the assets and settings needed to edit a given type of code.
* A user preference is added to manage whether or not "syntax highlighting" is enabled. The feature is opt-out, being enabled by default.
* Allowed file extensions in the theme and plugin editors have been updated to include formats which CodeMirror has modes for: `conf`, `css`, `diff`, `patch`, `html`, `htm`, `http`, `js`, `json`, `jsx`, `less`, `md`, `php`, `phtml`, `php3`, `php4`, `php5`, `php7`, `phps`, `scss`, `sass`, `sh`, `bash`, `sql`, `svg`, `xml`, `yml`, `yaml`, `txt`.
Props westonruter, georgestephanis, obenland, melchoyce, pixolin, mizejewski, michelleweber, afercia, grahamarmfield, samikeijonen, rianrietveld, iseulde.
See #38707.
Fixes #12423, #39892.
Built from https://develop.svn.wordpress.org/trunk@41376
git-svn-id: http://core.svn.wordpress.org/trunk@41209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-13 02:08:47 -04:00
} elseif ( 'text/x-diff' === $type ) {
2017-11-30 18:11:00 -05:00
$settings [ 'codemirror' ] = array_merge (
2018-08-16 21:51:36 -04:00
$settings [ 'codemirror' ],
array (
2017-11-30 18:11:00 -05:00
'mode' => 'diff' ,
)
);
Editor: Add CodeMirror-powered code editor with syntax highlighting, linting, and auto-completion.
* Code editor is integrated into the Theme/Plugin Editor, Additional CSS in Customizer, and Custom HTML widget. Code editor is not yet integrated into the post editor, and it may not be until accessibility concerns are addressed.
* The CodeMirror component in the Custom HTML widget is integrated in a similar way to TinyMCE being integrated into the Text widget, adopting the same approach for integrating dynamic JavaScript-initialized fields.
* Linting is performed for JS, CSS, HTML, and JSON via JSHint, CSSLint, HTMLHint, and JSONLint respectively. Linting is not yet supported for PHP.
* When user lacks `unfiltered_html` the capability, the Custom HTML widget will report any Kses-invalid elements and attributes as errors via a custom Kses rule for HTMLHint.
* When linting errors are detected, the user will be prevented from saving the code until the errors are fixed, reducing instances of broken websites.
* The placeholder value is removed from Custom CSS in favor of a fleshed-out section description which now auto-expands when the CSS field is empty. See #39892.
* The CodeMirror library is included as `wp.CodeMirror` to prevent conflicts with any existing `CodeMirror` global.
* An `wp.codeEditor.initialize()` API in JS is provided to convert a `textarea` into CodeMirror, with a `wp_enqueue_code_editor()` function in PHP to manage enqueueing the assets and settings needed to edit a given type of code.
* A user preference is added to manage whether or not "syntax highlighting" is enabled. The feature is opt-out, being enabled by default.
* Allowed file extensions in the theme and plugin editors have been updated to include formats which CodeMirror has modes for: `conf`, `css`, `diff`, `patch`, `html`, `htm`, `http`, `js`, `json`, `jsx`, `less`, `md`, `php`, `phtml`, `php3`, `php4`, `php5`, `php7`, `phps`, `scss`, `sass`, `sh`, `bash`, `sql`, `svg`, `xml`, `yml`, `yaml`, `txt`.
Props westonruter, georgestephanis, obenland, melchoyce, pixolin, mizejewski, michelleweber, afercia, grahamarmfield, samikeijonen, rianrietveld, iseulde.
See #38707.
Fixes #12423, #39892.
Built from https://develop.svn.wordpress.org/trunk@41376
git-svn-id: http://core.svn.wordpress.org/trunk@41209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-13 02:08:47 -04:00
} elseif ( 'text/html' === $type ) {
2017-11-30 18:11:00 -05:00
$settings [ 'codemirror' ] = array_merge (
2018-08-16 21:51:36 -04:00
$settings [ 'codemirror' ],
array (
2017-11-30 18:11:00 -05:00
'mode' => 'htmlmixed' ,
'lint' => true ,
'autoCloseBrackets' => true ,
'autoCloseTags' => true ,
'matchTags' => array (
'bothTags' => true ,
),
)
);
Editor: Add CodeMirror-powered code editor with syntax highlighting, linting, and auto-completion.
* Code editor is integrated into the Theme/Plugin Editor, Additional CSS in Customizer, and Custom HTML widget. Code editor is not yet integrated into the post editor, and it may not be until accessibility concerns are addressed.
* The CodeMirror component in the Custom HTML widget is integrated in a similar way to TinyMCE being integrated into the Text widget, adopting the same approach for integrating dynamic JavaScript-initialized fields.
* Linting is performed for JS, CSS, HTML, and JSON via JSHint, CSSLint, HTMLHint, and JSONLint respectively. Linting is not yet supported for PHP.
* When user lacks `unfiltered_html` the capability, the Custom HTML widget will report any Kses-invalid elements and attributes as errors via a custom Kses rule for HTMLHint.
* When linting errors are detected, the user will be prevented from saving the code until the errors are fixed, reducing instances of broken websites.
* The placeholder value is removed from Custom CSS in favor of a fleshed-out section description which now auto-expands when the CSS field is empty. See #39892.
* The CodeMirror library is included as `wp.CodeMirror` to prevent conflicts with any existing `CodeMirror` global.
* An `wp.codeEditor.initialize()` API in JS is provided to convert a `textarea` into CodeMirror, with a `wp_enqueue_code_editor()` function in PHP to manage enqueueing the assets and settings needed to edit a given type of code.
* A user preference is added to manage whether or not "syntax highlighting" is enabled. The feature is opt-out, being enabled by default.
* Allowed file extensions in the theme and plugin editors have been updated to include formats which CodeMirror has modes for: `conf`, `css`, `diff`, `patch`, `html`, `htm`, `http`, `js`, `json`, `jsx`, `less`, `md`, `php`, `phtml`, `php3`, `php4`, `php5`, `php7`, `phps`, `scss`, `sass`, `sh`, `bash`, `sql`, `svg`, `xml`, `yml`, `yaml`, `txt`.
Props westonruter, georgestephanis, obenland, melchoyce, pixolin, mizejewski, michelleweber, afercia, grahamarmfield, samikeijonen, rianrietveld, iseulde.
See #38707.
Fixes #12423, #39892.
Built from https://develop.svn.wordpress.org/trunk@41376
git-svn-id: http://core.svn.wordpress.org/trunk@41209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-13 02:08:47 -04:00
if ( ! current_user_can ( 'unfiltered_html' ) ) {
$settings [ 'htmlhint' ][ 'kses' ] = wp_kses_allowed_html ( 'post' );
}
} elseif ( 'text/x-gfm' === $type ) {
2017-11-30 18:11:00 -05:00
$settings [ 'codemirror' ] = array_merge (
2018-08-16 21:51:36 -04:00
$settings [ 'codemirror' ],
array (
2017-11-30 18:11:00 -05:00
'mode' => 'gfm' ,
'highlightFormatting' => true ,
)
);
Editor: Add CodeMirror-powered code editor with syntax highlighting, linting, and auto-completion.
* Code editor is integrated into the Theme/Plugin Editor, Additional CSS in Customizer, and Custom HTML widget. Code editor is not yet integrated into the post editor, and it may not be until accessibility concerns are addressed.
* The CodeMirror component in the Custom HTML widget is integrated in a similar way to TinyMCE being integrated into the Text widget, adopting the same approach for integrating dynamic JavaScript-initialized fields.
* Linting is performed for JS, CSS, HTML, and JSON via JSHint, CSSLint, HTMLHint, and JSONLint respectively. Linting is not yet supported for PHP.
* When user lacks `unfiltered_html` the capability, the Custom HTML widget will report any Kses-invalid elements and attributes as errors via a custom Kses rule for HTMLHint.
* When linting errors are detected, the user will be prevented from saving the code until the errors are fixed, reducing instances of broken websites.
* The placeholder value is removed from Custom CSS in favor of a fleshed-out section description which now auto-expands when the CSS field is empty. See #39892.
* The CodeMirror library is included as `wp.CodeMirror` to prevent conflicts with any existing `CodeMirror` global.
* An `wp.codeEditor.initialize()` API in JS is provided to convert a `textarea` into CodeMirror, with a `wp_enqueue_code_editor()` function in PHP to manage enqueueing the assets and settings needed to edit a given type of code.
* A user preference is added to manage whether or not "syntax highlighting" is enabled. The feature is opt-out, being enabled by default.
* Allowed file extensions in the theme and plugin editors have been updated to include formats which CodeMirror has modes for: `conf`, `css`, `diff`, `patch`, `html`, `htm`, `http`, `js`, `json`, `jsx`, `less`, `md`, `php`, `phtml`, `php3`, `php4`, `php5`, `php7`, `phps`, `scss`, `sass`, `sh`, `bash`, `sql`, `svg`, `xml`, `yml`, `yaml`, `txt`.
Props westonruter, georgestephanis, obenland, melchoyce, pixolin, mizejewski, michelleweber, afercia, grahamarmfield, samikeijonen, rianrietveld, iseulde.
See #38707.
Fixes #12423, #39892.
Built from https://develop.svn.wordpress.org/trunk@41376
git-svn-id: http://core.svn.wordpress.org/trunk@41209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-13 02:08:47 -04:00
} elseif ( 'application/javascript' === $type || 'text/javascript' === $type ) {
2017-11-30 18:11:00 -05:00
$settings [ 'codemirror' ] = array_merge (
2018-08-16 21:51:36 -04:00
$settings [ 'codemirror' ],
array (
2017-11-30 18:11:00 -05:00
'mode' => 'javascript' ,
'lint' => true ,
'autoCloseBrackets' => true ,
'matchBrackets' => true ,
)
);
Editor: Add CodeMirror-powered code editor with syntax highlighting, linting, and auto-completion.
* Code editor is integrated into the Theme/Plugin Editor, Additional CSS in Customizer, and Custom HTML widget. Code editor is not yet integrated into the post editor, and it may not be until accessibility concerns are addressed.
* The CodeMirror component in the Custom HTML widget is integrated in a similar way to TinyMCE being integrated into the Text widget, adopting the same approach for integrating dynamic JavaScript-initialized fields.
* Linting is performed for JS, CSS, HTML, and JSON via JSHint, CSSLint, HTMLHint, and JSONLint respectively. Linting is not yet supported for PHP.
* When user lacks `unfiltered_html` the capability, the Custom HTML widget will report any Kses-invalid elements and attributes as errors via a custom Kses rule for HTMLHint.
* When linting errors are detected, the user will be prevented from saving the code until the errors are fixed, reducing instances of broken websites.
* The placeholder value is removed from Custom CSS in favor of a fleshed-out section description which now auto-expands when the CSS field is empty. See #39892.
* The CodeMirror library is included as `wp.CodeMirror` to prevent conflicts with any existing `CodeMirror` global.
* An `wp.codeEditor.initialize()` API in JS is provided to convert a `textarea` into CodeMirror, with a `wp_enqueue_code_editor()` function in PHP to manage enqueueing the assets and settings needed to edit a given type of code.
* A user preference is added to manage whether or not "syntax highlighting" is enabled. The feature is opt-out, being enabled by default.
* Allowed file extensions in the theme and plugin editors have been updated to include formats which CodeMirror has modes for: `conf`, `css`, `diff`, `patch`, `html`, `htm`, `http`, `js`, `json`, `jsx`, `less`, `md`, `php`, `phtml`, `php3`, `php4`, `php5`, `php7`, `phps`, `scss`, `sass`, `sh`, `bash`, `sql`, `svg`, `xml`, `yml`, `yaml`, `txt`.
Props westonruter, georgestephanis, obenland, melchoyce, pixolin, mizejewski, michelleweber, afercia, grahamarmfield, samikeijonen, rianrietveld, iseulde.
See #38707.
Fixes #12423, #39892.
Built from https://develop.svn.wordpress.org/trunk@41376
git-svn-id: http://core.svn.wordpress.org/trunk@41209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-13 02:08:47 -04:00
} elseif ( false !== strpos ( $type , 'json' ) ) {
2017-11-30 18:11:00 -05:00
$settings [ 'codemirror' ] = array_merge (
2018-08-16 21:51:36 -04:00
$settings [ 'codemirror' ],
array (
2017-11-30 18:11:00 -05:00
'mode' => array (
'name' => 'javascript' ,
),
'lint' => true ,
'autoCloseBrackets' => true ,
'matchBrackets' => true ,
)
);
Editor: Add CodeMirror-powered code editor with syntax highlighting, linting, and auto-completion.
* Code editor is integrated into the Theme/Plugin Editor, Additional CSS in Customizer, and Custom HTML widget. Code editor is not yet integrated into the post editor, and it may not be until accessibility concerns are addressed.
* The CodeMirror component in the Custom HTML widget is integrated in a similar way to TinyMCE being integrated into the Text widget, adopting the same approach for integrating dynamic JavaScript-initialized fields.
* Linting is performed for JS, CSS, HTML, and JSON via JSHint, CSSLint, HTMLHint, and JSONLint respectively. Linting is not yet supported for PHP.
* When user lacks `unfiltered_html` the capability, the Custom HTML widget will report any Kses-invalid elements and attributes as errors via a custom Kses rule for HTMLHint.
* When linting errors are detected, the user will be prevented from saving the code until the errors are fixed, reducing instances of broken websites.
* The placeholder value is removed from Custom CSS in favor of a fleshed-out section description which now auto-expands when the CSS field is empty. See #39892.
* The CodeMirror library is included as `wp.CodeMirror` to prevent conflicts with any existing `CodeMirror` global.
* An `wp.codeEditor.initialize()` API in JS is provided to convert a `textarea` into CodeMirror, with a `wp_enqueue_code_editor()` function in PHP to manage enqueueing the assets and settings needed to edit a given type of code.
* A user preference is added to manage whether or not "syntax highlighting" is enabled. The feature is opt-out, being enabled by default.
* Allowed file extensions in the theme and plugin editors have been updated to include formats which CodeMirror has modes for: `conf`, `css`, `diff`, `patch`, `html`, `htm`, `http`, `js`, `json`, `jsx`, `less`, `md`, `php`, `phtml`, `php3`, `php4`, `php5`, `php7`, `phps`, `scss`, `sass`, `sh`, `bash`, `sql`, `svg`, `xml`, `yml`, `yaml`, `txt`.
Props westonruter, georgestephanis, obenland, melchoyce, pixolin, mizejewski, michelleweber, afercia, grahamarmfield, samikeijonen, rianrietveld, iseulde.
See #38707.
Fixes #12423, #39892.
Built from https://develop.svn.wordpress.org/trunk@41376
git-svn-id: http://core.svn.wordpress.org/trunk@41209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-13 02:08:47 -04:00
if ( 'application/ld+json' === $type ) {
$settings [ 'codemirror' ][ 'mode' ][ 'jsonld' ] = true ;
} else {
$settings [ 'codemirror' ][ 'mode' ][ 'json' ] = true ;
}
} elseif ( false !== strpos ( $type , 'jsx' ) ) {
2017-11-30 18:11:00 -05:00
$settings [ 'codemirror' ] = array_merge (
2018-08-16 21:51:36 -04:00
$settings [ 'codemirror' ],
array (
2017-11-30 18:11:00 -05:00
'mode' => 'jsx' ,
'autoCloseBrackets' => true ,
'matchBrackets' => true ,
)
);
Editor: Add CodeMirror-powered code editor with syntax highlighting, linting, and auto-completion.
* Code editor is integrated into the Theme/Plugin Editor, Additional CSS in Customizer, and Custom HTML widget. Code editor is not yet integrated into the post editor, and it may not be until accessibility concerns are addressed.
* The CodeMirror component in the Custom HTML widget is integrated in a similar way to TinyMCE being integrated into the Text widget, adopting the same approach for integrating dynamic JavaScript-initialized fields.
* Linting is performed for JS, CSS, HTML, and JSON via JSHint, CSSLint, HTMLHint, and JSONLint respectively. Linting is not yet supported for PHP.
* When user lacks `unfiltered_html` the capability, the Custom HTML widget will report any Kses-invalid elements and attributes as errors via a custom Kses rule for HTMLHint.
* When linting errors are detected, the user will be prevented from saving the code until the errors are fixed, reducing instances of broken websites.
* The placeholder value is removed from Custom CSS in favor of a fleshed-out section description which now auto-expands when the CSS field is empty. See #39892.
* The CodeMirror library is included as `wp.CodeMirror` to prevent conflicts with any existing `CodeMirror` global.
* An `wp.codeEditor.initialize()` API in JS is provided to convert a `textarea` into CodeMirror, with a `wp_enqueue_code_editor()` function in PHP to manage enqueueing the assets and settings needed to edit a given type of code.
* A user preference is added to manage whether or not "syntax highlighting" is enabled. The feature is opt-out, being enabled by default.
* Allowed file extensions in the theme and plugin editors have been updated to include formats which CodeMirror has modes for: `conf`, `css`, `diff`, `patch`, `html`, `htm`, `http`, `js`, `json`, `jsx`, `less`, `md`, `php`, `phtml`, `php3`, `php4`, `php5`, `php7`, `phps`, `scss`, `sass`, `sh`, `bash`, `sql`, `svg`, `xml`, `yml`, `yaml`, `txt`.
Props westonruter, georgestephanis, obenland, melchoyce, pixolin, mizejewski, michelleweber, afercia, grahamarmfield, samikeijonen, rianrietveld, iseulde.
See #38707.
Fixes #12423, #39892.
Built from https://develop.svn.wordpress.org/trunk@41376
git-svn-id: http://core.svn.wordpress.org/trunk@41209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-13 02:08:47 -04:00
} elseif ( 'text/x-markdown' === $type ) {
2017-11-30 18:11:00 -05:00
$settings [ 'codemirror' ] = array_merge (
2018-08-16 21:51:36 -04:00
$settings [ 'codemirror' ],
array (
2017-11-30 18:11:00 -05:00
'mode' => 'markdown' ,
'highlightFormatting' => true ,
)
);
Editor: Add CodeMirror-powered code editor with syntax highlighting, linting, and auto-completion.
* Code editor is integrated into the Theme/Plugin Editor, Additional CSS in Customizer, and Custom HTML widget. Code editor is not yet integrated into the post editor, and it may not be until accessibility concerns are addressed.
* The CodeMirror component in the Custom HTML widget is integrated in a similar way to TinyMCE being integrated into the Text widget, adopting the same approach for integrating dynamic JavaScript-initialized fields.
* Linting is performed for JS, CSS, HTML, and JSON via JSHint, CSSLint, HTMLHint, and JSONLint respectively. Linting is not yet supported for PHP.
* When user lacks `unfiltered_html` the capability, the Custom HTML widget will report any Kses-invalid elements and attributes as errors via a custom Kses rule for HTMLHint.
* When linting errors are detected, the user will be prevented from saving the code until the errors are fixed, reducing instances of broken websites.
* The placeholder value is removed from Custom CSS in favor of a fleshed-out section description which now auto-expands when the CSS field is empty. See #39892.
* The CodeMirror library is included as `wp.CodeMirror` to prevent conflicts with any existing `CodeMirror` global.
* An `wp.codeEditor.initialize()` API in JS is provided to convert a `textarea` into CodeMirror, with a `wp_enqueue_code_editor()` function in PHP to manage enqueueing the assets and settings needed to edit a given type of code.
* A user preference is added to manage whether or not "syntax highlighting" is enabled. The feature is opt-out, being enabled by default.
* Allowed file extensions in the theme and plugin editors have been updated to include formats which CodeMirror has modes for: `conf`, `css`, `diff`, `patch`, `html`, `htm`, `http`, `js`, `json`, `jsx`, `less`, `md`, `php`, `phtml`, `php3`, `php4`, `php5`, `php7`, `phps`, `scss`, `sass`, `sh`, `bash`, `sql`, `svg`, `xml`, `yml`, `yaml`, `txt`.
Props westonruter, georgestephanis, obenland, melchoyce, pixolin, mizejewski, michelleweber, afercia, grahamarmfield, samikeijonen, rianrietveld, iseulde.
See #38707.
Fixes #12423, #39892.
Built from https://develop.svn.wordpress.org/trunk@41376
git-svn-id: http://core.svn.wordpress.org/trunk@41209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-13 02:08:47 -04:00
} elseif ( 'text/nginx' === $type ) {
2017-11-30 18:11:00 -05:00
$settings [ 'codemirror' ] = array_merge (
2018-08-16 21:51:36 -04:00
$settings [ 'codemirror' ],
array (
2017-11-30 18:11:00 -05:00
'mode' => 'nginx' ,
)
);
Editor: Add CodeMirror-powered code editor with syntax highlighting, linting, and auto-completion.
* Code editor is integrated into the Theme/Plugin Editor, Additional CSS in Customizer, and Custom HTML widget. Code editor is not yet integrated into the post editor, and it may not be until accessibility concerns are addressed.
* The CodeMirror component in the Custom HTML widget is integrated in a similar way to TinyMCE being integrated into the Text widget, adopting the same approach for integrating dynamic JavaScript-initialized fields.
* Linting is performed for JS, CSS, HTML, and JSON via JSHint, CSSLint, HTMLHint, and JSONLint respectively. Linting is not yet supported for PHP.
* When user lacks `unfiltered_html` the capability, the Custom HTML widget will report any Kses-invalid elements and attributes as errors via a custom Kses rule for HTMLHint.
* When linting errors are detected, the user will be prevented from saving the code until the errors are fixed, reducing instances of broken websites.
* The placeholder value is removed from Custom CSS in favor of a fleshed-out section description which now auto-expands when the CSS field is empty. See #39892.
* The CodeMirror library is included as `wp.CodeMirror` to prevent conflicts with any existing `CodeMirror` global.
* An `wp.codeEditor.initialize()` API in JS is provided to convert a `textarea` into CodeMirror, with a `wp_enqueue_code_editor()` function in PHP to manage enqueueing the assets and settings needed to edit a given type of code.
* A user preference is added to manage whether or not "syntax highlighting" is enabled. The feature is opt-out, being enabled by default.
* Allowed file extensions in the theme and plugin editors have been updated to include formats which CodeMirror has modes for: `conf`, `css`, `diff`, `patch`, `html`, `htm`, `http`, `js`, `json`, `jsx`, `less`, `md`, `php`, `phtml`, `php3`, `php4`, `php5`, `php7`, `phps`, `scss`, `sass`, `sh`, `bash`, `sql`, `svg`, `xml`, `yml`, `yaml`, `txt`.
Props westonruter, georgestephanis, obenland, melchoyce, pixolin, mizejewski, michelleweber, afercia, grahamarmfield, samikeijonen, rianrietveld, iseulde.
See #38707.
Fixes #12423, #39892.
Built from https://develop.svn.wordpress.org/trunk@41376
git-svn-id: http://core.svn.wordpress.org/trunk@41209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-13 02:08:47 -04:00
} elseif ( 'application/x-httpd-php' === $type ) {
2017-11-30 18:11:00 -05:00
$settings [ 'codemirror' ] = array_merge (
2018-08-16 21:51:36 -04:00
$settings [ 'codemirror' ],
array (
2017-11-30 18:11:00 -05:00
'mode' => 'php' ,
'autoCloseBrackets' => true ,
'autoCloseTags' => true ,
'matchBrackets' => true ,
'matchTags' => array (
'bothTags' => true ,
),
)
);
Editor: Add CodeMirror-powered code editor with syntax highlighting, linting, and auto-completion.
* Code editor is integrated into the Theme/Plugin Editor, Additional CSS in Customizer, and Custom HTML widget. Code editor is not yet integrated into the post editor, and it may not be until accessibility concerns are addressed.
* The CodeMirror component in the Custom HTML widget is integrated in a similar way to TinyMCE being integrated into the Text widget, adopting the same approach for integrating dynamic JavaScript-initialized fields.
* Linting is performed for JS, CSS, HTML, and JSON via JSHint, CSSLint, HTMLHint, and JSONLint respectively. Linting is not yet supported for PHP.
* When user lacks `unfiltered_html` the capability, the Custom HTML widget will report any Kses-invalid elements and attributes as errors via a custom Kses rule for HTMLHint.
* When linting errors are detected, the user will be prevented from saving the code until the errors are fixed, reducing instances of broken websites.
* The placeholder value is removed from Custom CSS in favor of a fleshed-out section description which now auto-expands when the CSS field is empty. See #39892.
* The CodeMirror library is included as `wp.CodeMirror` to prevent conflicts with any existing `CodeMirror` global.
* An `wp.codeEditor.initialize()` API in JS is provided to convert a `textarea` into CodeMirror, with a `wp_enqueue_code_editor()` function in PHP to manage enqueueing the assets and settings needed to edit a given type of code.
* A user preference is added to manage whether or not "syntax highlighting" is enabled. The feature is opt-out, being enabled by default.
* Allowed file extensions in the theme and plugin editors have been updated to include formats which CodeMirror has modes for: `conf`, `css`, `diff`, `patch`, `html`, `htm`, `http`, `js`, `json`, `jsx`, `less`, `md`, `php`, `phtml`, `php3`, `php4`, `php5`, `php7`, `phps`, `scss`, `sass`, `sh`, `bash`, `sql`, `svg`, `xml`, `yml`, `yaml`, `txt`.
Props westonruter, georgestephanis, obenland, melchoyce, pixolin, mizejewski, michelleweber, afercia, grahamarmfield, samikeijonen, rianrietveld, iseulde.
See #38707.
Fixes #12423, #39892.
Built from https://develop.svn.wordpress.org/trunk@41376
git-svn-id: http://core.svn.wordpress.org/trunk@41209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-13 02:08:47 -04:00
} elseif ( 'text/x-sql' === $type || 'text/x-mysql' === $type ) {
2017-11-30 18:11:00 -05:00
$settings [ 'codemirror' ] = array_merge (
2018-08-16 21:51:36 -04:00
$settings [ 'codemirror' ],
array (
2017-11-30 18:11:00 -05:00
'mode' => 'sql' ,
'autoCloseBrackets' => true ,
'matchBrackets' => true ,
)
);
Editor: Add CodeMirror-powered code editor with syntax highlighting, linting, and auto-completion.
* Code editor is integrated into the Theme/Plugin Editor, Additional CSS in Customizer, and Custom HTML widget. Code editor is not yet integrated into the post editor, and it may not be until accessibility concerns are addressed.
* The CodeMirror component in the Custom HTML widget is integrated in a similar way to TinyMCE being integrated into the Text widget, adopting the same approach for integrating dynamic JavaScript-initialized fields.
* Linting is performed for JS, CSS, HTML, and JSON via JSHint, CSSLint, HTMLHint, and JSONLint respectively. Linting is not yet supported for PHP.
* When user lacks `unfiltered_html` the capability, the Custom HTML widget will report any Kses-invalid elements and attributes as errors via a custom Kses rule for HTMLHint.
* When linting errors are detected, the user will be prevented from saving the code until the errors are fixed, reducing instances of broken websites.
* The placeholder value is removed from Custom CSS in favor of a fleshed-out section description which now auto-expands when the CSS field is empty. See #39892.
* The CodeMirror library is included as `wp.CodeMirror` to prevent conflicts with any existing `CodeMirror` global.
* An `wp.codeEditor.initialize()` API in JS is provided to convert a `textarea` into CodeMirror, with a `wp_enqueue_code_editor()` function in PHP to manage enqueueing the assets and settings needed to edit a given type of code.
* A user preference is added to manage whether or not "syntax highlighting" is enabled. The feature is opt-out, being enabled by default.
* Allowed file extensions in the theme and plugin editors have been updated to include formats which CodeMirror has modes for: `conf`, `css`, `diff`, `patch`, `html`, `htm`, `http`, `js`, `json`, `jsx`, `less`, `md`, `php`, `phtml`, `php3`, `php4`, `php5`, `php7`, `phps`, `scss`, `sass`, `sh`, `bash`, `sql`, `svg`, `xml`, `yml`, `yaml`, `txt`.
Props westonruter, georgestephanis, obenland, melchoyce, pixolin, mizejewski, michelleweber, afercia, grahamarmfield, samikeijonen, rianrietveld, iseulde.
See #38707.
Fixes #12423, #39892.
Built from https://develop.svn.wordpress.org/trunk@41376
git-svn-id: http://core.svn.wordpress.org/trunk@41209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-13 02:08:47 -04:00
} elseif ( false !== strpos ( $type , 'xml' ) ) {
2017-11-30 18:11:00 -05:00
$settings [ 'codemirror' ] = array_merge (
2018-08-16 21:51:36 -04:00
$settings [ 'codemirror' ],
array (
2017-11-30 18:11:00 -05:00
'mode' => 'xml' ,
'autoCloseBrackets' => true ,
'autoCloseTags' => true ,
'matchTags' => array (
'bothTags' => true ,
),
)
);
Editor: Add CodeMirror-powered code editor with syntax highlighting, linting, and auto-completion.
* Code editor is integrated into the Theme/Plugin Editor, Additional CSS in Customizer, and Custom HTML widget. Code editor is not yet integrated into the post editor, and it may not be until accessibility concerns are addressed.
* The CodeMirror component in the Custom HTML widget is integrated in a similar way to TinyMCE being integrated into the Text widget, adopting the same approach for integrating dynamic JavaScript-initialized fields.
* Linting is performed for JS, CSS, HTML, and JSON via JSHint, CSSLint, HTMLHint, and JSONLint respectively. Linting is not yet supported for PHP.
* When user lacks `unfiltered_html` the capability, the Custom HTML widget will report any Kses-invalid elements and attributes as errors via a custom Kses rule for HTMLHint.
* When linting errors are detected, the user will be prevented from saving the code until the errors are fixed, reducing instances of broken websites.
* The placeholder value is removed from Custom CSS in favor of a fleshed-out section description which now auto-expands when the CSS field is empty. See #39892.
* The CodeMirror library is included as `wp.CodeMirror` to prevent conflicts with any existing `CodeMirror` global.
* An `wp.codeEditor.initialize()` API in JS is provided to convert a `textarea` into CodeMirror, with a `wp_enqueue_code_editor()` function in PHP to manage enqueueing the assets and settings needed to edit a given type of code.
* A user preference is added to manage whether or not "syntax highlighting" is enabled. The feature is opt-out, being enabled by default.
* Allowed file extensions in the theme and plugin editors have been updated to include formats which CodeMirror has modes for: `conf`, `css`, `diff`, `patch`, `html`, `htm`, `http`, `js`, `json`, `jsx`, `less`, `md`, `php`, `phtml`, `php3`, `php4`, `php5`, `php7`, `phps`, `scss`, `sass`, `sh`, `bash`, `sql`, `svg`, `xml`, `yml`, `yaml`, `txt`.
Props westonruter, georgestephanis, obenland, melchoyce, pixolin, mizejewski, michelleweber, afercia, grahamarmfield, samikeijonen, rianrietveld, iseulde.
See #38707.
Fixes #12423, #39892.
Built from https://develop.svn.wordpress.org/trunk@41376
git-svn-id: http://core.svn.wordpress.org/trunk@41209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-13 02:08:47 -04:00
} elseif ( 'text/x-yaml' === $type ) {
2017-11-30 18:11:00 -05:00
$settings [ 'codemirror' ] = array_merge (
2018-08-16 21:51:36 -04:00
$settings [ 'codemirror' ],
array (
2017-11-30 18:11:00 -05:00
'mode' => 'yaml' ,
)
);
Editor: Add CodeMirror-powered code editor with syntax highlighting, linting, and auto-completion.
* Code editor is integrated into the Theme/Plugin Editor, Additional CSS in Customizer, and Custom HTML widget. Code editor is not yet integrated into the post editor, and it may not be until accessibility concerns are addressed.
* The CodeMirror component in the Custom HTML widget is integrated in a similar way to TinyMCE being integrated into the Text widget, adopting the same approach for integrating dynamic JavaScript-initialized fields.
* Linting is performed for JS, CSS, HTML, and JSON via JSHint, CSSLint, HTMLHint, and JSONLint respectively. Linting is not yet supported for PHP.
* When user lacks `unfiltered_html` the capability, the Custom HTML widget will report any Kses-invalid elements and attributes as errors via a custom Kses rule for HTMLHint.
* When linting errors are detected, the user will be prevented from saving the code until the errors are fixed, reducing instances of broken websites.
* The placeholder value is removed from Custom CSS in favor of a fleshed-out section description which now auto-expands when the CSS field is empty. See #39892.
* The CodeMirror library is included as `wp.CodeMirror` to prevent conflicts with any existing `CodeMirror` global.
* An `wp.codeEditor.initialize()` API in JS is provided to convert a `textarea` into CodeMirror, with a `wp_enqueue_code_editor()` function in PHP to manage enqueueing the assets and settings needed to edit a given type of code.
* A user preference is added to manage whether or not "syntax highlighting" is enabled. The feature is opt-out, being enabled by default.
* Allowed file extensions in the theme and plugin editors have been updated to include formats which CodeMirror has modes for: `conf`, `css`, `diff`, `patch`, `html`, `htm`, `http`, `js`, `json`, `jsx`, `less`, `md`, `php`, `phtml`, `php3`, `php4`, `php5`, `php7`, `phps`, `scss`, `sass`, `sh`, `bash`, `sql`, `svg`, `xml`, `yml`, `yaml`, `txt`.
Props westonruter, georgestephanis, obenland, melchoyce, pixolin, mizejewski, michelleweber, afercia, grahamarmfield, samikeijonen, rianrietveld, iseulde.
See #38707.
Fixes #12423, #39892.
Built from https://develop.svn.wordpress.org/trunk@41376
git-svn-id: http://core.svn.wordpress.org/trunk@41209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-13 02:08:47 -04:00
} else {
$settings [ 'codemirror' ][ 'mode' ] = $type ;
}
if ( ! empty ( $settings [ 'codemirror' ][ 'lint' ] ) ) {
$settings [ 'codemirror' ][ 'gutters' ][] = 'CodeMirror-lint-markers' ;
}
// Let settings supplied via args override any defaults.
2017-09-21 19:04:45 -04:00
foreach ( wp_array_slice_assoc ( $args , array ( 'codemirror' , 'csslint' , 'jshint' , 'htmlhint' ) ) as $key => $value ) {
$settings [ $key ] = array_merge (
$settings [ $key ],
$value
);
Editor: Add CodeMirror-powered code editor with syntax highlighting, linting, and auto-completion.
* Code editor is integrated into the Theme/Plugin Editor, Additional CSS in Customizer, and Custom HTML widget. Code editor is not yet integrated into the post editor, and it may not be until accessibility concerns are addressed.
* The CodeMirror component in the Custom HTML widget is integrated in a similar way to TinyMCE being integrated into the Text widget, adopting the same approach for integrating dynamic JavaScript-initialized fields.
* Linting is performed for JS, CSS, HTML, and JSON via JSHint, CSSLint, HTMLHint, and JSONLint respectively. Linting is not yet supported for PHP.
* When user lacks `unfiltered_html` the capability, the Custom HTML widget will report any Kses-invalid elements and attributes as errors via a custom Kses rule for HTMLHint.
* When linting errors are detected, the user will be prevented from saving the code until the errors are fixed, reducing instances of broken websites.
* The placeholder value is removed from Custom CSS in favor of a fleshed-out section description which now auto-expands when the CSS field is empty. See #39892.
* The CodeMirror library is included as `wp.CodeMirror` to prevent conflicts with any existing `CodeMirror` global.
* An `wp.codeEditor.initialize()` API in JS is provided to convert a `textarea` into CodeMirror, with a `wp_enqueue_code_editor()` function in PHP to manage enqueueing the assets and settings needed to edit a given type of code.
* A user preference is added to manage whether or not "syntax highlighting" is enabled. The feature is opt-out, being enabled by default.
* Allowed file extensions in the theme and plugin editors have been updated to include formats which CodeMirror has modes for: `conf`, `css`, `diff`, `patch`, `html`, `htm`, `http`, `js`, `json`, `jsx`, `less`, `md`, `php`, `phtml`, `php3`, `php4`, `php5`, `php7`, `phps`, `scss`, `sass`, `sh`, `bash`, `sql`, `svg`, `xml`, `yml`, `yaml`, `txt`.
Props westonruter, georgestephanis, obenland, melchoyce, pixolin, mizejewski, michelleweber, afercia, grahamarmfield, samikeijonen, rianrietveld, iseulde.
See #38707.
Fixes #12423, #39892.
Built from https://develop.svn.wordpress.org/trunk@41376
git-svn-id: http://core.svn.wordpress.org/trunk@41209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-13 02:08:47 -04:00
}
/**
* Filters settings that are passed into the code editor .
*
* Returning a falsey value will disable the syntax - highlighting code editor .
*
* @ since 4.9 . 0
*
* @ param array $settings The array of settings passed to the code editor . A falsey value disables the editor .
* @ param array $args {
2018-12-13 17:24:33 -05:00
* Args passed when calling `get_code_editor_settings()` .
Editor: Add CodeMirror-powered code editor with syntax highlighting, linting, and auto-completion.
* Code editor is integrated into the Theme/Plugin Editor, Additional CSS in Customizer, and Custom HTML widget. Code editor is not yet integrated into the post editor, and it may not be until accessibility concerns are addressed.
* The CodeMirror component in the Custom HTML widget is integrated in a similar way to TinyMCE being integrated into the Text widget, adopting the same approach for integrating dynamic JavaScript-initialized fields.
* Linting is performed for JS, CSS, HTML, and JSON via JSHint, CSSLint, HTMLHint, and JSONLint respectively. Linting is not yet supported for PHP.
* When user lacks `unfiltered_html` the capability, the Custom HTML widget will report any Kses-invalid elements and attributes as errors via a custom Kses rule for HTMLHint.
* When linting errors are detected, the user will be prevented from saving the code until the errors are fixed, reducing instances of broken websites.
* The placeholder value is removed from Custom CSS in favor of a fleshed-out section description which now auto-expands when the CSS field is empty. See #39892.
* The CodeMirror library is included as `wp.CodeMirror` to prevent conflicts with any existing `CodeMirror` global.
* An `wp.codeEditor.initialize()` API in JS is provided to convert a `textarea` into CodeMirror, with a `wp_enqueue_code_editor()` function in PHP to manage enqueueing the assets and settings needed to edit a given type of code.
* A user preference is added to manage whether or not "syntax highlighting" is enabled. The feature is opt-out, being enabled by default.
* Allowed file extensions in the theme and plugin editors have been updated to include formats which CodeMirror has modes for: `conf`, `css`, `diff`, `patch`, `html`, `htm`, `http`, `js`, `json`, `jsx`, `less`, `md`, `php`, `phtml`, `php3`, `php4`, `php5`, `php7`, `phps`, `scss`, `sass`, `sh`, `bash`, `sql`, `svg`, `xml`, `yml`, `yaml`, `txt`.
Props westonruter, georgestephanis, obenland, melchoyce, pixolin, mizejewski, michelleweber, afercia, grahamarmfield, samikeijonen, rianrietveld, iseulde.
See #38707.
Fixes #12423, #39892.
Built from https://develop.svn.wordpress.org/trunk@41376
git-svn-id: http://core.svn.wordpress.org/trunk@41209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-13 02:08:47 -04:00
*
2017-09-21 19:04:45 -04:00
* @ type string $type The MIME type of the file to be edited .
* @ type string $file Filename being edited .
* @ type WP_Theme $theme Theme being edited when on theme editor .
* @ type string $plugin Plugin being edited when on plugin editor .
* @ type array $codemirror Additional CodeMirror setting overrides .
* @ type array $csslint CSSLint rule overrides .
* @ type array $jshint JSHint rule overrides .
* @ type array $htmlhint JSHint rule overrides .
Editor: Add CodeMirror-powered code editor with syntax highlighting, linting, and auto-completion.
* Code editor is integrated into the Theme/Plugin Editor, Additional CSS in Customizer, and Custom HTML widget. Code editor is not yet integrated into the post editor, and it may not be until accessibility concerns are addressed.
* The CodeMirror component in the Custom HTML widget is integrated in a similar way to TinyMCE being integrated into the Text widget, adopting the same approach for integrating dynamic JavaScript-initialized fields.
* Linting is performed for JS, CSS, HTML, and JSON via JSHint, CSSLint, HTMLHint, and JSONLint respectively. Linting is not yet supported for PHP.
* When user lacks `unfiltered_html` the capability, the Custom HTML widget will report any Kses-invalid elements and attributes as errors via a custom Kses rule for HTMLHint.
* When linting errors are detected, the user will be prevented from saving the code until the errors are fixed, reducing instances of broken websites.
* The placeholder value is removed from Custom CSS in favor of a fleshed-out section description which now auto-expands when the CSS field is empty. See #39892.
* The CodeMirror library is included as `wp.CodeMirror` to prevent conflicts with any existing `CodeMirror` global.
* An `wp.codeEditor.initialize()` API in JS is provided to convert a `textarea` into CodeMirror, with a `wp_enqueue_code_editor()` function in PHP to manage enqueueing the assets and settings needed to edit a given type of code.
* A user preference is added to manage whether or not "syntax highlighting" is enabled. The feature is opt-out, being enabled by default.
* Allowed file extensions in the theme and plugin editors have been updated to include formats which CodeMirror has modes for: `conf`, `css`, `diff`, `patch`, `html`, `htm`, `http`, `js`, `json`, `jsx`, `less`, `md`, `php`, `phtml`, `php3`, `php4`, `php5`, `php7`, `phps`, `scss`, `sass`, `sh`, `bash`, `sql`, `svg`, `xml`, `yml`, `yaml`, `txt`.
Props westonruter, georgestephanis, obenland, melchoyce, pixolin, mizejewski, michelleweber, afercia, grahamarmfield, samikeijonen, rianrietveld, iseulde.
See #38707.
Fixes #12423, #39892.
Built from https://develop.svn.wordpress.org/trunk@41376
git-svn-id: http://core.svn.wordpress.org/trunk@41209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-13 02:08:47 -04:00
* }
*/
2018-12-13 17:24:33 -05:00
return apply_filters ( 'wp_code_editor_settings' , $settings , $args );
Editor: Add CodeMirror-powered code editor with syntax highlighting, linting, and auto-completion.
* Code editor is integrated into the Theme/Plugin Editor, Additional CSS in Customizer, and Custom HTML widget. Code editor is not yet integrated into the post editor, and it may not be until accessibility concerns are addressed.
* The CodeMirror component in the Custom HTML widget is integrated in a similar way to TinyMCE being integrated into the Text widget, adopting the same approach for integrating dynamic JavaScript-initialized fields.
* Linting is performed for JS, CSS, HTML, and JSON via JSHint, CSSLint, HTMLHint, and JSONLint respectively. Linting is not yet supported for PHP.
* When user lacks `unfiltered_html` the capability, the Custom HTML widget will report any Kses-invalid elements and attributes as errors via a custom Kses rule for HTMLHint.
* When linting errors are detected, the user will be prevented from saving the code until the errors are fixed, reducing instances of broken websites.
* The placeholder value is removed from Custom CSS in favor of a fleshed-out section description which now auto-expands when the CSS field is empty. See #39892.
* The CodeMirror library is included as `wp.CodeMirror` to prevent conflicts with any existing `CodeMirror` global.
* An `wp.codeEditor.initialize()` API in JS is provided to convert a `textarea` into CodeMirror, with a `wp_enqueue_code_editor()` function in PHP to manage enqueueing the assets and settings needed to edit a given type of code.
* A user preference is added to manage whether or not "syntax highlighting" is enabled. The feature is opt-out, being enabled by default.
* Allowed file extensions in the theme and plugin editors have been updated to include formats which CodeMirror has modes for: `conf`, `css`, `diff`, `patch`, `html`, `htm`, `http`, `js`, `json`, `jsx`, `less`, `md`, `php`, `phtml`, `php3`, `php4`, `php5`, `php7`, `phps`, `scss`, `sass`, `sh`, `bash`, `sql`, `svg`, `xml`, `yml`, `yaml`, `txt`.
Props westonruter, georgestephanis, obenland, melchoyce, pixolin, mizejewski, michelleweber, afercia, grahamarmfield, samikeijonen, rianrietveld, iseulde.
See #38707.
Fixes #12423, #39892.
Built from https://develop.svn.wordpress.org/trunk@41376
git-svn-id: http://core.svn.wordpress.org/trunk@41209 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2017-09-13 02:08:47 -04:00
}
2008-09-05 15:19:01 -04:00
/**
2016-05-22 13:39:28 -04:00
* Retrieves the contents of the search WordPress query variable .
2008-09-05 15:19:01 -04:00
*
2016-05-22 13:39:28 -04:00
* The search query string is passed through esc_attr () to ensure that it is safe
* for placing in an html attribute .
2010-04-03 19:38:38 -04:00
*
2008-09-05 15:19:01 -04:00
* @ since 2.3 . 0
*
2010-04-03 19:38:38 -04:00
* @ param bool $escaped Whether the result is escaped . Default true .
2017-11-30 18:11:00 -05:00
* Only use when you are later escaping it . Do not use unescaped .
2008-09-05 17:47:53 -04:00
* @ return string
2008-09-05 15:19:01 -04:00
*/
2010-04-03 19:38:38 -04:00
function get_search_query ( $escaped = true ) {
2014-04-15 00:01:15 -04:00
/**
2016-05-22 14:26:53 -04:00
* Filters the contents of the search query variable .
2014-04-15 00:01:15 -04:00
*
* @ since 2.3 . 0
*
* @ param mixed $search Contents of the search query variable .
*/
2010-04-03 19:38:38 -04:00
$query = apply_filters ( 'get_search_query' , get_query_var ( 's' ) );
2014-04-15 00:01:15 -04:00
2017-11-30 18:11:00 -05:00
if ( $escaped ) {
2010-04-03 19:38:38 -04:00
$query = esc_attr ( $query );
2017-11-30 18:11:00 -05:00
}
2010-04-03 19:38:38 -04:00
return $query ;
2007-05-23 23:37:10 -04:00
}
2008-09-05 15:19:01 -04:00
/**
2016-05-22 13:39:28 -04:00
* Displays the contents of the search query variable .
2008-12-09 13:03:31 -05:00
*
2016-05-22 13:39:28 -04:00
* The search query string is passed through esc_attr () to ensure that it is safe
* for placing in an html attribute .
2008-09-05 15:19:01 -04:00
*
* @ since 2.1 . 0
*/
2006-09-07 13:37:26 -04:00
function the_search_query () {
2014-04-15 00:01:15 -04:00
/**
2016-05-22 14:26:53 -04:00
* Filters the contents of the search query variable for display .
2014-04-15 00:01:15 -04:00
*
* @ since 2.3 . 0
*
* @ param mixed $search Contents of the search query variable .
*/
2010-04-03 19:38:38 -04:00
echo esc_attr ( apply_filters ( 'the_search_query' , get_search_query ( false ) ) );
2006-09-07 13:37:26 -04:00
}
2008-09-05 15:19:01 -04:00
/**
2015-07-13 17:39:24 -04:00
* Gets the language attributes for the html tag .
2008-09-05 15:19:01 -04:00
*
2008-09-06 02:38:26 -04:00
* Builds up a set of html attributes containing the text direction and language
* information for the page .
2008-09-05 15:19:01 -04:00
*
2015-06-19 17:36:28 -04:00
* @ since 4.3 . 0
2008-09-05 15:19:01 -04:00
*
2015-07-13 17:39:24 -04:00
* @ param string $doctype Optional . The type of html document . Accepts 'xhtml' or 'html' . Default 'html' .
2008-09-05 15:19:01 -04:00
*/
2015-06-19 17:36:28 -04:00
function get_language_attributes ( $doctype = 'html' ) {
2007-12-19 12:44:02 -05:00
$attributes = array ();
2008-02-05 01:47:27 -05:00
2017-11-30 18:11:00 -05:00
if ( function_exists ( 'is_rtl' ) && is_rtl () ) {
2012-09-18 19:08:46 -04:00
$attributes [] = 'dir="rtl"' ;
2017-11-30 18:11:00 -05:00
}
2008-02-05 01:47:27 -05:00
2019-07-02 19:42:58 -04:00
$lang = get_bloginfo ( 'language' );
if ( $lang ) {
2020-02-09 11:55:09 -05:00
if ( 'text/html' === get_option ( 'html_type' ) || 'html' === $doctype ) {
2017-11-29 10:55:47 -05:00
$attributes [] = 'lang="' . esc_attr ( $lang ) . '"' ;
}
2008-02-05 01:47:27 -05:00
2020-02-09 11:55:09 -05:00
if ( 'text/html' !== get_option ( 'html_type' ) || 'xhtml' === $doctype ) {
2017-11-29 10:55:47 -05:00
$attributes [] = 'xml:lang="' . esc_attr ( $lang ) . '"' ;
}
2007-12-19 12:44:02 -05:00
}
2008-02-05 01:47:27 -05:00
2017-11-30 18:11:00 -05:00
$output = implode ( ' ' , $attributes );
2014-04-15 00:01:15 -04:00
/**
2016-05-22 14:26:53 -04:00
* Filters the language attributes for display in the html tag .
2014-04-15 00:01:15 -04:00
*
* @ since 2.5 . 0
2015-06-19 17:36:28 -04:00
* @ since 4.3 . 0 Added the `$doctype` parameter .
2014-04-15 00:01:15 -04:00
*
* @ param string $output A space - separated list of language attributes .
2015-06-19 17:36:28 -04:00
* @ param string $doctype The type of html document ( xhtml | html ) .
2014-04-15 00:01:15 -04:00
*/
2015-06-19 17:36:28 -04:00
return apply_filters ( 'language_attributes' , $output , $doctype );
}
/**
2015-07-13 17:40:25 -04:00
* Displays the language attributes for the html tag .
2015-06-19 17:36:28 -04:00
*
* Builds up a set of html attributes containing the text direction and language
* information for the page .
*
* @ since 2.1 . 0
2015-06-19 19:01:26 -04:00
* @ since 4.3 . 0 Converted into a wrapper for get_language_attributes () .
2015-06-19 17:36:28 -04:00
*
2015-07-13 17:40:25 -04:00
* @ param string $doctype Optional . The type of html document . Accepts 'xhtml' or 'html' . Default 'html' .
2015-06-19 17:36:28 -04:00
*/
function language_attributes ( $doctype = 'html' ) {
echo get_language_attributes ( $doctype );
2006-09-24 16:16:13 -04:00
}
2006-10-03 03:16:49 -04:00
2008-09-05 15:19:01 -04:00
/**
2008-09-12 00:31:41 -04:00
* Retrieve paginated link for archive post pages .
*
* Technically , the function can be used to create paginated link list for any
* area . The 'base' argument is used to reference the url , which will be used to
* create the paginated links . The 'format' argument is then used for replacing
* the page number . It is however , most likely and by default , to be used on the
* archive post pages .
*
* The 'type' argument controls format of the returned value . The default is
* 'plain' , which is just a string with the links separated by a newline
* character . The other possible values are either 'array' or 'list' . The
* 'array' value will return an array of the paginated link list to offer full
* control of display . The 'list' value will place all of the paginated links in
* an unordered HTML list .
*
* The 'total' argument is the total amount of pages and is an integer . The
* 'current' argument is the current page number and is also an integer .
*
* An example of the 'base' argument is " http://example.com/all_posts.php%_% "
* and the '%_%' is required . The '%_%' will be replaced by the contents of in
* the 'format' argument . An example for the 'format' argument is " ?page=%#% "
* and the '%#%' is also required . The '%#%' will be replaced with the page
* number .
*
* You can include the previous and next links in the list by setting the
* 'prev_next' argument to true , which it is by default . You can set the
* previous text , by using the 'prev_text' argument . You can set the next text
* by setting the 'next_text' argument .
*
* If the 'show_all' argument is set to true , then it will show all of the pages
* instead of a short list of the pages near the current page . By default , the
* 'show_all' is set to false and controlled by the 'end_size' and 'mid_size'
* arguments . The 'end_size' argument is how many numbers on either the start
* and the end list edges , by default is 1. The 'mid_size' argument is how many
* numbers to either side of current page , but not including current page .
*
* It is possible to add query vars to the link by using the 'add_args' argument
2016-05-22 13:39:28 -04:00
* and see add_query_arg () for more information .
2008-09-05 15:19:01 -04:00
*
2014-05-04 18:21:22 -04:00
* The 'before_page_number' and 'after_page_number' arguments allow users to
2014-03-18 19:31:14 -04:00
* augment the links themselves . Typically this might be to add context to the
* numbered links so that screen reader users understand what the links are for .
2014-05-04 18:21:22 -04:00
* The text strings are added before and after the page number - within the
2014-03-18 19:31:14 -04:00
* anchor tag .
*
2008-09-05 15:19:01 -04:00
* @ since 2.1 . 0
2017-09-11 10:29:44 -04:00
* @ since 4.9 . 0 Added the `aria_current` argument .
2008-09-05 15:19:01 -04:00
*
2019-08-03 21:59:56 -04:00
* @ global WP_Query $wp_query WordPress Query object .
2019-08-03 21:19:56 -04:00
* @ global WP_Rewrite $wp_rewrite WordPress rewrite component .
2015-05-25 13:18:26 -04:00
*
2015-03-20 16:04:27 -04:00
* @ param string | array $args {
* Optional . Array or string of arguments for generating paginated links for archives .
*
* @ type string $base Base of the paginated url . Default empty .
* @ type string $format Format for the pagination structure . Default empty .
* @ type int $total The total amount of pages . Default is the value WP_Query ' s
* `max_num_pages` or 1.
* @ type int $current The current page number . Default is 'paged' query var or 1.
2017-09-11 10:29:44 -04:00
* @ type string $aria_current The value for the aria - current attribute . Possible values are 'page' ,
* 'step' , 'location' , 'date' , 'time' , 'true' , 'false' . Default is 'page' .
2015-03-20 16:04:27 -04:00
* @ type bool $show_all Whether to show all pages . Default false .
* @ type int $end_size How many numbers on either the start and the end list edges .
* Default 1.
* @ type int $mid_size How many numbers to either side of the current pages . Default 2.
* @ type bool $prev_next Whether to include the previous and next links in the list . Default true .
2016-10-02 15:10:28 -04:00
* @ type bool $prev_text The previous page text . Default '« Previous' .
* @ type bool $next_text The next page text . Default 'Next »' .
2015-03-20 16:04:27 -04:00
* @ type string $type Controls format of the returned value . Possible values are 'plain' ,
* 'array' and 'list' . Default is 'plain' .
* @ type array $add_args An array of query args to add . Default false .
* @ type string $add_fragment A string to append to each link . Default empty .
* @ type string $before_page_number A string to appear before the page number . Default empty .
* @ type string $after_page_number A string to append after the page number . Default empty .
* }
2020-01-11 13:32:05 -05:00
* @ return string | array | void String of page links or array of page links , depending on 'type' argument .
* Void if total number of pages is less than 2.
2008-09-05 15:19:01 -04:00
*/
2007-06-14 18:46:59 -04:00
function paginate_links ( $args = '' ) {
2014-06-20 13:12:15 -04:00
global $wp_query , $wp_rewrite ;
2015-01-16 10:49:25 -05:00
// Setting up default values based on the current URL.
2014-06-20 13:12:15 -04:00
$pagenum_link = html_entity_decode ( get_pagenum_link () );
$url_parts = explode ( '?' , $pagenum_link );
2015-01-16 10:49:25 -05:00
// Get max pages and current page out of the current query, if available.
$total = isset ( $wp_query -> max_num_pages ) ? $wp_query -> max_num_pages : 1 ;
$current = get_query_var ( 'paged' ) ? intval ( get_query_var ( 'paged' ) ) : 1 ;
2014-06-20 13:12:15 -04:00
2015-01-16 10:49:25 -05:00
// Append the format placeholder to the base URL.
$pagenum_link = trailingslashit ( $url_parts [ 0 ] ) . '%_%' ;
2014-06-20 13:12:15 -04:00
2015-01-16 10:49:25 -05:00
// URL base depends on permalink settings.
2014-06-20 13:12:15 -04:00
$format = $wp_rewrite -> using_index_permalinks () && ! strpos ( $pagenum_link , 'index.php' ) ? 'index.php/' : '' ;
$format .= $wp_rewrite -> using_permalinks () ? user_trailingslashit ( $wp_rewrite -> pagination_base . '/%#%' , 'paged' ) : '?paged=%#%' ;
2007-09-03 19:32:58 -04:00
$defaults = array (
2020-01-28 19:45:18 -05:00
'base' => $pagenum_link , // http://example.com/all_posts.php%_% : %_% is replaced by format (below).
'format' => $format , // ?page=%#% : %#% is replaced by the page number.
2017-09-11 10:29:44 -04:00
'total' => $total ,
'current' => $current ,
'aria_current' => 'page' ,
'show_all' => false ,
'prev_next' => true ,
'prev_text' => __ ( '« Previous' ),
'next_text' => __ ( 'Next »' ),
'end_size' => 1 ,
'mid_size' => 2 ,
'type' => 'plain' ,
2020-01-28 19:45:18 -05:00
'add_args' => array (), // Array of query args to add.
2017-09-11 10:29:44 -04:00
'add_fragment' => '' ,
2014-03-18 19:31:14 -04:00
'before_page_number' => '' ,
2017-09-11 10:29:44 -04:00
'after_page_number' => '' ,
2007-06-14 18:46:59 -04:00
);
$args = wp_parse_args ( $args , $defaults );
2006-10-03 03:16:49 -04:00
2015-02-11 20:39:27 -05:00
if ( ! is_array ( $args [ 'add_args' ] ) ) {
$args [ 'add_args' ] = array ();
}
2015-01-16 10:49:25 -05:00
// Merge additional query vars found in the original URL into 'add_args' array.
if ( isset ( $url_parts [ 1 ] ) ) {
// Find the format argument.
2017-11-30 18:11:00 -05:00
$format = explode ( '?' , str_replace ( '%_%' , $args [ 'format' ], $args [ 'base' ] ) );
2015-05-05 17:59:26 -04:00
$format_query = isset ( $format [ 1 ] ) ? $format [ 1 ] : '' ;
wp_parse_str ( $format_query , $format_args );
// Find the query args of the requested URL.
wp_parse_str ( $url_parts [ 1 ], $url_query_args );
2015-01-16 10:49:25 -05:00
// Remove the format argument from the array of query arguments, to avoid overwriting custom format.
2015-05-05 17:59:26 -04:00
foreach ( $format_args as $format_arg => $format_arg_value ) {
2015-05-22 01:47:25 -04:00
unset ( $url_query_args [ $format_arg ] );
2015-05-05 17:59:26 -04:00
}
$args [ 'add_args' ] = array_merge ( $args [ 'add_args' ], urlencode_deep ( $url_query_args ) );
2015-01-16 10:49:25 -05:00
}
2020-01-28 19:45:18 -05:00
// Who knows what else people pass in $args.
2014-05-14 18:29:14 -04:00
$total = ( int ) $args [ 'total' ];
if ( $total < 2 ) {
2006-10-03 11:40:26 -04:00
return ;
2014-05-14 18:29:14 -04:00
}
$current = ( int ) $args [ 'current' ];
2020-01-28 19:45:18 -05:00
$end_size = ( int ) $args [ 'end_size' ]; // Out of bounds? Make it the default.
2014-05-14 18:29:14 -04:00
if ( $end_size < 1 ) {
$end_size = 1 ;
}
$mid_size = ( int ) $args [ 'mid_size' ];
if ( $mid_size < 0 ) {
$mid_size = 2 ;
}
2019-09-10 15:23:55 -04:00
2017-11-30 18:11:00 -05:00
$add_args = $args [ 'add_args' ];
$r = '' ;
2006-10-03 03:16:49 -04:00
$page_links = array ();
2017-11-30 18:11:00 -05:00
$dots = false ;
2006-10-03 03:16:49 -04:00
2014-05-14 18:29:14 -04:00
if ( $args [ 'prev_next' ] && $current && 1 < $current ) :
2014-06-20 13:12:15 -04:00
$link = str_replace ( '%_%' , 2 == $current ? '' : $args [ 'format' ], $args [ 'base' ] );
$link = str_replace ( '%#%' , $current - 1 , $link );
2017-11-30 18:11:00 -05:00
if ( $add_args ) {
2006-10-03 03:16:49 -04:00
$link = add_query_arg ( $add_args , $link );
2017-11-30 18:11:00 -05:00
}
2014-05-14 18:29:14 -04:00
$link .= $args [ 'add_fragment' ];
2014-04-15 00:01:15 -04:00
2019-09-10 15:23:55 -04:00
$page_links [] = sprintf (
'<a class="prev page-numbers" href="%s">%s</a>' ,
/**
* Filters the paginated links for the given archive pages .
*
* @ since 3.0 . 0
*
* @ param string $link The paginated link URL .
*/
esc_url ( apply_filters ( 'paginate_links' , $link ) ),
$args [ 'prev_text' ]
);
2006-10-03 03:16:49 -04:00
endif ;
2019-09-10 15:23:55 -04:00
2006-10-03 03:16:49 -04:00
for ( $n = 1 ; $n <= $total ; $n ++ ) :
if ( $n == $current ) :
2019-09-10 15:23:55 -04:00
$page_links [] = sprintf (
'<span aria-current="%s" class="page-numbers current">%s</span>' ,
esc_attr ( $args [ 'aria_current' ] ),
$args [ 'before_page_number' ] . number_format_i18n ( $n ) . $args [ 'after_page_number' ]
);
2019-09-10 16:01:54 -04:00
$dots = true ;
2006-10-03 03:16:49 -04:00
else :
2014-05-14 18:29:14 -04:00
if ( $args [ 'show_all' ] || ( $n <= $end_size || ( $current && $n >= $current - $mid_size && $n <= $current + $mid_size ) || $n > $total - $end_size ) ) :
2014-06-20 13:12:15 -04:00
$link = str_replace ( '%_%' , 1 == $n ? '' : $args [ 'format' ], $args [ 'base' ] );
$link = str_replace ( '%#%' , $n , $link );
2017-11-30 18:11:00 -05:00
if ( $add_args ) {
2006-10-03 03:16:49 -04:00
$link = add_query_arg ( $add_args , $link );
2017-11-30 18:11:00 -05:00
}
2014-05-14 18:29:14 -04:00
$link .= $args [ 'add_fragment' ];
2014-04-15 00:01:15 -04:00
2019-09-10 15:23:55 -04:00
$page_links [] = sprintf (
'<a class="page-numbers" href="%s">%s</a>' ,
/** This filter is documented in wp-includes/general-template.php */
esc_url ( apply_filters ( 'paginate_links' , $link ) ),
$args [ 'before_page_number' ] . number_format_i18n ( $n ) . $args [ 'after_page_number' ]
);
2019-09-10 16:01:54 -04:00
$dots = true ;
2014-05-14 18:29:14 -04:00
elseif ( $dots && ! $args [ 'show_all' ] ) :
2011-11-14 16:24:49 -05:00
$page_links [] = '<span class="page-numbers dots">' . __ ( '…' ) . '</span>' ;
2019-09-10 16:01:54 -04:00
$dots = false ;
2006-10-03 03:16:49 -04:00
endif ;
endif ;
endfor ;
2019-09-10 15:23:55 -04:00
2016-10-21 06:46:29 -04:00
if ( $args [ 'prev_next' ] && $current && $current < $total ) :
2014-06-20 13:12:15 -04:00
$link = str_replace ( '%_%' , $args [ 'format' ], $args [ 'base' ] );
$link = str_replace ( '%#%' , $current + 1 , $link );
2017-11-30 18:11:00 -05:00
if ( $add_args ) {
2006-10-03 03:16:49 -04:00
$link = add_query_arg ( $add_args , $link );
2017-11-30 18:11:00 -05:00
}
2014-05-14 18:29:14 -04:00
$link .= $args [ 'add_fragment' ];
2014-04-15 00:01:15 -04:00
2019-09-10 15:23:55 -04:00
$page_links [] = sprintf (
'<a class="next page-numbers" href="%s">%s</a>' ,
/** This filter is documented in wp-includes/general-template.php */
esc_url ( apply_filters ( 'paginate_links' , $link ) ),
$args [ 'next_text' ]
);
2006-10-03 03:16:49 -04:00
endif ;
2019-09-10 15:23:55 -04:00
2014-05-14 18:29:14 -04:00
switch ( $args [ 'type' ] ) {
2017-11-30 18:11:00 -05:00
case 'array' :
2006-10-03 03:16:49 -04:00
return $page_links ;
2014-05-06 17:25:15 -04:00
2017-11-30 18:11:00 -05:00
case 'list' :
2006-10-03 03:16:49 -04:00
$r .= " <ul class='page-numbers'> \n \t <li> " ;
2017-11-30 18:11:00 -05:00
$r .= join ( " </li> \n \t <li> " , $page_links );
2006-10-03 03:16:49 -04:00
$r .= " </li> \n </ul> \n " ;
break ;
2014-05-13 00:29:26 -04:00
2017-11-30 18:11:00 -05:00
default :
$r = join ( " \n " , $page_links );
2006-10-03 03:16:49 -04:00
break ;
2014-05-06 17:25:15 -04:00
}
2019-09-10 15:23:55 -04:00
2006-10-03 03:16:49 -04:00
return $r ;
}
2007-08-28 19:23:38 -04:00
2008-09-05 17:47:53 -04:00
/**
2018-02-27 22:28:31 -05:00
* Registers an admin color scheme css file .
2008-09-05 17:47:53 -04:00
*
2018-02-27 22:28:31 -05:00
* Allows a plugin to register a new admin color scheme . For example :
2014-11-24 00:39:22 -05:00
*
* wp_admin_css_color ( 'classic' , __ ( 'Classic' ), admin_url ( " css/colors-classic.css " ), array (
* '#07273E' , '#14568A' , '#D54E21' , '#2683AE'
* ) );
2008-09-05 17:47:53 -04:00
*
2008-09-06 02:38:26 -04:00
* @ since 2.5 . 0
*
2015-05-25 13:18:26 -04:00
* @ global array $_wp_admin_css_colors
*
* @ param string $key The unique key for this theme .
* @ param string $name The name of the theme .
2015-12-27 11:32:29 -05:00
* @ param string $url The URL of the CSS file containing the color scheme .
* @ param array $colors Optional . An array of CSS color definition strings which are used
* to give the user a feel for the theme .
* @ param array $icons {
* Optional . CSS color definitions used to color any SVG icons .
*
* @ type string $base SVG icon base color .
* @ type string $focus SVG icon color on focus .
* @ type string $current SVG icon color of current admin menu link .
* }
2008-09-05 17:47:53 -04:00
*/
Merge the color schemes component from MP6. Introduces Light, Blue, and Midnight.
Color scheme selection on your own profile page gives you a preview and autosaves the selection.
Also introduces the usage of a preprocessor for core files, namely Sass. For 3.8, we will not expand its implementation past the color schemes. This does require Ruby as well as Sass 3.3.0+ due to the usage of the sourcemap option.
Note that only the default color scheme is available when running out of src. Use build to test the rest as well as the color picker.
props ryelle, melchoyce, tillkruess, drw158, littlethingsstudio, helen. see #25858, #22862.
Built from https://develop.svn.wordpress.org/trunk@26137
git-svn-id: http://core.svn.wordpress.org/trunk@26048 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-11-13 14:38:38 -05:00
function wp_admin_css_color ( $key , $name , $url , $colors = array (), $icons = array () ) {
2008-03-11 17:06:03 -04:00
global $_wp_admin_css_colors ;
2017-11-30 18:11:00 -05:00
if ( ! isset ( $_wp_admin_css_colors ) ) {
2008-03-11 17:06:03 -04:00
$_wp_admin_css_colors = array ();
2017-11-30 18:11:00 -05:00
}
2008-03-11 17:06:03 -04:00
2017-11-30 18:11:00 -05:00
$_wp_admin_css_colors [ $key ] = ( object ) array (
'name' => $name ,
'url' => $url ,
'colors' => $colors ,
Merge the color schemes component from MP6. Introduces Light, Blue, and Midnight.
Color scheme selection on your own profile page gives you a preview and autosaves the selection.
Also introduces the usage of a preprocessor for core files, namely Sass. For 3.8, we will not expand its implementation past the color schemes. This does require Ruby as well as Sass 3.3.0+ due to the usage of the sourcemap option.
Note that only the default color scheme is available when running out of src. Use build to test the rest as well as the color picker.
props ryelle, melchoyce, tillkruess, drw158, littlethingsstudio, helen. see #25858, #22862.
Built from https://develop.svn.wordpress.org/trunk@26137
git-svn-id: http://core.svn.wordpress.org/trunk@26048 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-11-13 14:38:38 -05:00
'icon_colors' => $icons ,
);
2008-03-11 17:06:03 -04:00
}
2010-02-06 00:15:26 -05:00
/**
2018-02-27 22:28:31 -05:00
* Registers the default admin color schemes .
2018-03-18 10:23:33 -04:00
*
2018-02-27 22:28:31 -05:00
* Registers the initial set of eight color schemes in the Profile section
* of the dashboard which allows for styling the admin menu and toolbar .
2018-03-18 10:23:33 -04:00
*
2018-02-27 22:28:31 -05:00
* @ see wp_admin_css_color ()
2010-02-06 00:15:26 -05:00
*
* @ since 3.0 . 0
*/
2010-02-28 01:34:31 -05:00
function register_admin_color_schemes () {
2017-11-30 18:11:00 -05:00
$suffix = is_rtl () ? '-rtl' : '' ;
2015-06-24 22:29:31 -04:00
$suffix .= SCRIPT_DEBUG ? '' : '.min' ;
2013-12-07 04:05:10 -05:00
2017-11-30 18:11:00 -05:00
wp_admin_css_color (
2018-08-16 21:51:36 -04:00
'fresh' ,
_x ( 'Default' , 'admin color scheme' ),
2014-02-06 17:16:11 -05:00
false ,
2015-04-05 17:20:27 -04:00
array ( '#222' , '#333' , '#0073aa' , '#00a0d2' ),
2017-11-30 18:11:00 -05:00
array (
2018-12-20 14:01:48 -05:00
'base' => '#a0a5aa' ,
2017-11-30 18:11:00 -05:00
'focus' => '#00a0d2' ,
'current' => '#fff' ,
)
Merge the color schemes component from MP6. Introduces Light, Blue, and Midnight.
Color scheme selection on your own profile page gives you a preview and autosaves the selection.
Also introduces the usage of a preprocessor for core files, namely Sass. For 3.8, we will not expand its implementation past the color schemes. This does require Ruby as well as Sass 3.3.0+ due to the usage of the sourcemap option.
Note that only the default color scheme is available when running out of src. Use build to test the rest as well as the color picker.
props ryelle, melchoyce, tillkruess, drw158, littlethingsstudio, helen. see #25858, #22862.
Built from https://develop.svn.wordpress.org/trunk@26137
git-svn-id: http://core.svn.wordpress.org/trunk@26048 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-11-13 14:38:38 -05:00
);
2020-01-28 19:45:18 -05:00
// Other color schemes are not available when running out of src.
2016-08-31 01:49:37 -04:00
if ( false !== strpos ( get_bloginfo ( 'version' ), '-src' ) ) {
2013-11-13 19:03:10 -05:00
return ;
2016-08-31 01:49:37 -04:00
}
2013-11-13 19:03:10 -05:00
2017-11-30 18:11:00 -05:00
wp_admin_css_color (
2018-08-16 21:51:36 -04:00
'light' ,
_x ( 'Light' , 'admin color scheme' ),
2013-12-07 04:05:10 -05:00
admin_url ( " css/colors/light/colors $suffix .css " ),
2013-11-13 19:03:10 -05:00
array ( '#e5e5e5' , '#999' , '#d64e07' , '#04a4cc' ),
2017-11-30 18:11:00 -05:00
array (
'base' => '#999' ,
'focus' => '#ccc' ,
'current' => '#ccc' ,
)
2013-11-13 19:03:10 -05:00
);
2017-11-30 18:11:00 -05:00
wp_admin_css_color (
2018-08-16 21:51:36 -04:00
'blue' ,
_x ( 'Blue' , 'admin color scheme' ),
2013-12-07 04:05:10 -05:00
admin_url ( " css/colors/blue/colors $suffix .css " ),
2013-11-13 19:03:10 -05:00
array ( '#096484' , '#4796b3' , '#52accc' , '#74B6CE' ),
2017-11-30 18:11:00 -05:00
array (
'base' => '#e5f8ff' ,
'focus' => '#fff' ,
'current' => '#fff' ,
)
2013-11-13 19:03:10 -05:00
);
2017-11-30 18:11:00 -05:00
wp_admin_css_color (
2018-08-16 21:51:36 -04:00
'midnight' ,
_x ( 'Midnight' , 'admin color scheme' ),
2013-12-07 04:05:10 -05:00
admin_url ( " css/colors/midnight/colors $suffix .css " ),
2013-11-13 19:03:10 -05:00
array ( '#25282b' , '#363b3f' , '#69a8bb' , '#e14d43' ),
2017-11-30 18:11:00 -05:00
array (
'base' => '#f1f2f3' ,
'focus' => '#fff' ,
'current' => '#fff' ,
)
2013-11-13 19:03:10 -05:00
);
Add four more color schemes to round out our collection at eight.
The new schemes are Ectoplasm, Coffee, Ocean, Sunrise. For those following along, the first three were at one point named Ghostbusters, Pixel, and Cape Cod.
See [26137] for the original color schemes.
props ryelle, melchoyce, drw158, littlethingsstudio.
fixes #26468. see #25858, #22862.
Built from https://develop.svn.wordpress.org/trunk@26773
git-svn-id: http://core.svn.wordpress.org/trunk@26660 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-07 02:26:12 -05:00
2017-11-30 18:11:00 -05:00
wp_admin_css_color (
2018-08-16 21:51:36 -04:00
'sunrise' ,
_x ( 'Sunrise' , 'admin color scheme' ),
2013-12-07 04:05:10 -05:00
admin_url ( " css/colors/sunrise/colors $suffix .css " ),
array ( '#b43c38' , '#cf4944' , '#dd823b' , '#ccaf0b' ),
2017-11-30 18:11:00 -05:00
array (
'base' => '#f3f1f1' ,
'focus' => '#fff' ,
'current' => '#fff' ,
)
Add four more color schemes to round out our collection at eight.
The new schemes are Ectoplasm, Coffee, Ocean, Sunrise. For those following along, the first three were at one point named Ghostbusters, Pixel, and Cape Cod.
See [26137] for the original color schemes.
props ryelle, melchoyce, drw158, littlethingsstudio.
fixes #26468. see #25858, #22862.
Built from https://develop.svn.wordpress.org/trunk@26773
git-svn-id: http://core.svn.wordpress.org/trunk@26660 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-07 02:26:12 -05:00
);
2017-11-30 18:11:00 -05:00
wp_admin_css_color (
2018-08-16 21:51:36 -04:00
'ectoplasm' ,
_x ( 'Ectoplasm' , 'admin color scheme' ),
2013-12-07 04:05:10 -05:00
admin_url ( " css/colors/ectoplasm/colors $suffix .css " ),
Add four more color schemes to round out our collection at eight.
The new schemes are Ectoplasm, Coffee, Ocean, Sunrise. For those following along, the first three were at one point named Ghostbusters, Pixel, and Cape Cod.
See [26137] for the original color schemes.
props ryelle, melchoyce, drw158, littlethingsstudio.
fixes #26468. see #25858, #22862.
Built from https://develop.svn.wordpress.org/trunk@26773
git-svn-id: http://core.svn.wordpress.org/trunk@26660 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-07 02:26:12 -05:00
array ( '#413256' , '#523f6d' , '#a3b745' , '#d46f15' ),
2017-11-30 18:11:00 -05:00
array (
'base' => '#ece6f6' ,
'focus' => '#fff' ,
'current' => '#fff' ,
)
Add four more color schemes to round out our collection at eight.
The new schemes are Ectoplasm, Coffee, Ocean, Sunrise. For those following along, the first three were at one point named Ghostbusters, Pixel, and Cape Cod.
See [26137] for the original color schemes.
props ryelle, melchoyce, drw158, littlethingsstudio.
fixes #26468. see #25858, #22862.
Built from https://develop.svn.wordpress.org/trunk@26773
git-svn-id: http://core.svn.wordpress.org/trunk@26660 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-07 02:26:12 -05:00
);
2013-12-07 04:05:10 -05:00
2017-11-30 18:11:00 -05:00
wp_admin_css_color (
2018-08-16 21:51:36 -04:00
'ocean' ,
_x ( 'Ocean' , 'admin color scheme' ),
2013-12-07 04:05:10 -05:00
admin_url ( " css/colors/ocean/colors $suffix .css " ),
Add four more color schemes to round out our collection at eight.
The new schemes are Ectoplasm, Coffee, Ocean, Sunrise. For those following along, the first three were at one point named Ghostbusters, Pixel, and Cape Cod.
See [26137] for the original color schemes.
props ryelle, melchoyce, drw158, littlethingsstudio.
fixes #26468. see #25858, #22862.
Built from https://develop.svn.wordpress.org/trunk@26773
git-svn-id: http://core.svn.wordpress.org/trunk@26660 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-07 02:26:12 -05:00
array ( '#627c83' , '#738e96' , '#9ebaa0' , '#aa9d88' ),
2017-11-30 18:11:00 -05:00
array (
'base' => '#f2fcff' ,
'focus' => '#fff' ,
'current' => '#fff' ,
)
Add four more color schemes to round out our collection at eight.
The new schemes are Ectoplasm, Coffee, Ocean, Sunrise. For those following along, the first three were at one point named Ghostbusters, Pixel, and Cape Cod.
See [26137] for the original color schemes.
props ryelle, melchoyce, drw158, littlethingsstudio.
fixes #26468. see #25858, #22862.
Built from https://develop.svn.wordpress.org/trunk@26773
git-svn-id: http://core.svn.wordpress.org/trunk@26660 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-07 02:26:12 -05:00
);
2017-11-30 18:11:00 -05:00
wp_admin_css_color (
2018-08-16 21:51:36 -04:00
'coffee' ,
_x ( 'Coffee' , 'admin color scheme' ),
2013-12-07 04:05:10 -05:00
admin_url ( " css/colors/coffee/colors $suffix .css " ),
Add four more color schemes to round out our collection at eight.
The new schemes are Ectoplasm, Coffee, Ocean, Sunrise. For those following along, the first three were at one point named Ghostbusters, Pixel, and Cape Cod.
See [26137] for the original color schemes.
props ryelle, melchoyce, drw158, littlethingsstudio.
fixes #26468. see #25858, #22862.
Built from https://develop.svn.wordpress.org/trunk@26773
git-svn-id: http://core.svn.wordpress.org/trunk@26660 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-07 02:26:12 -05:00
array ( '#46403c' , '#59524c' , '#c7a589' , '#9ea476' ),
2017-11-30 18:11:00 -05:00
array (
'base' => '#f3f2f1' ,
'focus' => '#fff' ,
'current' => '#fff' ,
)
Add four more color schemes to round out our collection at eight.
The new schemes are Ectoplasm, Coffee, Ocean, Sunrise. For those following along, the first three were at one point named Ghostbusters, Pixel, and Cape Cod.
See [26137] for the original color schemes.
props ryelle, melchoyce, drw158, littlethingsstudio.
fixes #26468. see #25858, #22862.
Built from https://develop.svn.wordpress.org/trunk@26773
git-svn-id: http://core.svn.wordpress.org/trunk@26660 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2013-12-07 02:26:12 -05:00
);
2010-11-02 17:04:29 -04:00
}
2010-02-06 00:15:26 -05:00
2008-05-25 17:23:22 -04:00
/**
2016-05-23 14:57:28 -04:00
* Displays the URL of a WordPress admin CSS file .
2008-05-25 17:23:22 -04:00
*
2016-05-23 14:57:28 -04:00
* @ see WP_Styles :: _css_href and its { @ see 'style_loader_src' } filter .
2008-05-25 17:23:22 -04:00
*
2008-09-05 15:19:01 -04:00
* @ since 2.3 . 0
*
2008-05-25 17:23:22 -04:00
* @ param string $file file relative to wp - admin / without its " .css " extension .
2015-05-25 13:18:26 -04:00
* @ return string
2008-05-25 17:23:22 -04:00
*/
2007-08-28 19:23:38 -04:00
function wp_admin_css_uri ( $file = 'wp-admin' ) {
2017-11-30 18:11:00 -05:00
if ( defined ( 'WP_INSTALLING' ) ) {
2008-03-11 17:06:03 -04:00
$_file = " ./ $file .css " ;
2007-09-03 16:20:18 -04:00
} else {
2017-11-30 18:11:00 -05:00
$_file = admin_url ( " $file .css " );
2007-09-03 19:32:58 -04:00
}
2017-11-30 18:11:00 -05:00
$_file = add_query_arg ( 'version' , get_bloginfo ( 'version' ), $_file );
2008-03-11 17:06:03 -04:00
2014-04-15 00:01:15 -04:00
/**
2016-05-22 14:26:53 -04:00
* Filters the URI of a WordPress admin CSS file .
2014-04-15 00:01:15 -04:00
*
* @ since 2.3 . 0
*
* @ param string $_file Relative path to the file with query arguments attached .
* @ param string $file Relative path to the file , minus its " .css " extension .
*/
2007-08-28 19:23:38 -04:00
return apply_filters ( 'wp_admin_css_uri' , $_file , $file );
}
2008-05-25 17:23:22 -04:00
/**
2008-09-05 17:47:53 -04:00
* Enqueues or directly prints a stylesheet link to the specified CSS file .
2008-05-25 17:23:22 -04:00
*
2008-09-06 02:38:26 -04:00
* " Intelligently " decides to enqueue or to print the CSS file . If the
2016-05-23 14:57:28 -04:00
* { @ see 'wp_print_styles' } action has * not * yet been called , the CSS file will be
* enqueued . If the { @ see 'wp_print_styles' } action has been called , the CSS link will
2012-01-05 15:50:54 -05:00
* be printed . Printing may be forced by passing true as the $force_echo
2008-09-06 02:38:26 -04:00
* ( second ) parameter .
2008-05-25 17:23:22 -04:00
*
2008-09-06 02:38:26 -04:00
* For backward compatibility with WordPress 2.3 calling method : If the $file
* ( first ) parameter does not correspond to a registered CSS file , we assume
* $file is a file relative to wp - admin / without its " .css " extension . A
* stylesheet link to that generated URL is printed .
2008-05-25 17:23:22 -04:00
*
2008-09-06 02:38:26 -04:00
* @ since 2.3 . 0
2008-05-25 17:23:22 -04:00
*
2015-05-25 13:18:26 -04:00
* @ param string $file Optional . Style handle name or file name ( without " .css " extension ) relative
2017-11-30 18:11:00 -05:00
* to wp - admin /. Defaults to 'wp-admin' .
2015-05-25 13:18:26 -04:00
* @ param bool $force_echo Optional . Force the stylesheet link to be printed rather than enqueued .
2008-05-25 17:23:22 -04:00
*/
2008-05-21 20:06:41 -04:00
function wp_admin_css ( $file = 'wp-admin' , $force_echo = false ) {
2019-09-10 15:23:55 -04:00
// For backward compatibility.
2008-05-21 19:24:23 -04:00
$handle = 0 === strpos ( $file , 'css/' ) ? substr ( $file , 4 ) : $file ;
2008-03-11 17:06:03 -04:00
2015-05-25 13:18:26 -04:00
if ( wp_styles () -> query ( $handle ) ) {
2019-09-10 15:23:55 -04:00
if ( $force_echo || did_action ( 'wp_print_styles' ) ) {
// We already printed the style queue. Print this one immediately.
2008-05-21 19:24:23 -04:00
wp_print_styles ( $handle );
2019-09-10 15:23:55 -04:00
} else {
// Add to style queue.
2008-05-21 19:24:23 -04:00
wp_enqueue_style ( $handle );
2017-11-30 18:11:00 -05:00
}
2008-05-21 19:24:23 -04:00
return ;
2007-08-28 19:23:38 -04:00
}
2008-05-21 19:24:23 -04:00
2019-09-10 15:23:55 -04:00
$stylesheet_link = sprintf (
" <link rel='stylesheet' href='%s' type='text/css' /> \n " ,
esc_url ( wp_admin_css_uri ( $file ) )
);
2014-04-15 00:01:15 -04:00
/**
2016-05-22 14:26:53 -04:00
* Filters the stylesheet link to the specified CSS file .
2014-04-15 00:01:15 -04:00
*
* If the site is set to display right - to - left , the RTL stylesheet link
* will be used instead .
*
* @ since 2.3 . 0
2016-12-27 04:28:40 -05:00
* @ param string $stylesheet_link HTML link element for the stylesheet .
* @ param string $file Style handle name or filename ( without " .css " extension )
* relative to wp - admin /. Defaults to 'wp-admin' .
2014-04-15 00:01:15 -04:00
*/
2019-09-10 15:23:55 -04:00
echo apply_filters ( 'wp_admin_css' , $stylesheet_link , $file );
2014-04-15 00:01:15 -04:00
if ( function_exists ( 'is_rtl' ) && is_rtl () ) {
2019-09-10 15:23:55 -04:00
$rtl_stylesheet_link = sprintf (
" <link rel='stylesheet' href='%s' type='text/css' /> \n " ,
esc_url ( wp_admin_css_uri ( " $file -rtl " ) )
);
2014-04-15 00:01:15 -04:00
/** This filter is documented in wp-includes/general-template.php */
2019-09-10 15:23:55 -04:00
echo apply_filters ( 'wp_admin_css' , $rtl_stylesheet_link , " $file -rtl " );
2014-04-15 00:01:15 -04:00
}
2007-08-28 19:23:38 -04:00
}
2008-05-22 11:27:28 -04:00
/**
2008-12-09 13:03:31 -05:00
* Enqueues the default ThickBox js and css .
*
2008-09-06 02:38:26 -04:00
* If any of the settings need to be changed , this can be done with another js
2012-04-09 22:25:03 -04:00
* file similar to media - upload . js . That file should
2008-09-06 02:38:26 -04:00
* require array ( 'thickbox' ) to ensure it is loaded after .
*
* @ since 2.5 . 0
2008-05-22 11:27:28 -04:00
*/
2008-05-20 13:19:33 -04:00
function add_thickbox () {
wp_enqueue_script ( 'thickbox' );
2008-05-22 11:27:28 -04:00
wp_enqueue_style ( 'thickbox' );
2010-12-15 13:48:40 -05:00
2017-11-30 18:11:00 -05:00
if ( is_network_admin () ) {
2010-12-15 13:48:40 -05:00
add_action ( 'admin_head' , '_thickbox_path_admin_subfolder' );
2017-11-30 18:11:00 -05:00
}
2008-05-20 13:19:33 -04:00
}
2007-10-06 02:55:24 -04:00
/**
2016-05-23 14:57:28 -04:00
* Displays the XHTML generator that is generated on the wp_head hook .
*
* See { @ see 'wp_head' } .
2008-09-06 02:38:26 -04:00
*
* @ since 2.5 . 0
2007-10-06 02:55:24 -04:00
*/
2008-09-05 15:19:01 -04:00
function wp_generator () {
2014-04-15 00:01:15 -04:00
/**
2016-05-22 14:26:53 -04:00
* Filters the output of the XHTML generator tag .
2014-04-15 00:01:15 -04:00
*
* @ since 2.5 . 0
*
* @ param string $generator_type The XHTML generator .
*/
2007-10-06 02:55:24 -04:00
the_generator ( apply_filters ( 'wp_generator_type' , 'xhtml' ) );
}
/**
2008-09-06 02:38:26 -04:00
* Display the generator XML or Comment for RSS , ATOM , etc .
2008-09-05 15:19:01 -04:00
*
2008-09-06 02:38:26 -04:00
* Returns the correct generator type for the requested output format . Allows
2016-05-23 14:57:28 -04:00
* for a plugin to filter generators overall the { @ see 'the_generator' } filter .
2008-09-05 15:19:01 -04:00
*
2008-09-06 02:38:26 -04:00
* @ since 2.5 . 0
2008-09-05 15:19:01 -04:00
*
2008-09-05 17:47:53 -04:00
* @ param string $type The type of generator to output - ( html | xhtml | atom | rss2 | rdf | comment | export ) .
2007-10-06 02:55:24 -04:00
*/
2008-09-05 15:19:01 -04:00
function the_generator ( $type ) {
2014-04-15 00:01:15 -04:00
/**
2016-05-22 14:26:53 -04:00
* Filters the output of the XHTML generator tag for display .
2014-04-15 00:01:15 -04:00
*
* @ since 2.5 . 0
*
* @ param string $generator_type The generator output .
* @ param string $type The type of generator to output . Accepts 'html' ,
* 'xhtml' , 'atom' , 'rss2' , 'rdf' , 'comment' , 'export' .
*/
2017-11-30 18:11:00 -05:00
echo apply_filters ( 'the_generator' , get_the_generator ( $type ), $type ) . " \n " ;
2007-10-06 02:55:24 -04:00
}
/**
2008-09-05 17:47:53 -04:00
* Creates the generator XML or Comment for RSS , ATOM , etc .
2008-09-05 15:19:01 -04:00
*
2008-09-06 02:38:26 -04:00
* Returns the correct generator type for the requested output format . Allows
* for a plugin to filter generators on an individual basis using the
2016-05-23 14:57:28 -04:00
* { @ see 'get_the_generator_$type' } filter .
2008-09-05 15:19:01 -04:00
*
2008-09-06 02:38:26 -04:00
* @ since 2.5 . 0
2008-09-05 15:19:01 -04:00
*
2008-09-05 17:47:53 -04:00
* @ param string $type The type of generator to return - ( html | xhtml | atom | rss2 | rdf | comment | export ) .
2015-05-25 13:18:26 -04:00
* @ return string | void The HTML content for the generator .
2007-10-06 02:55:24 -04:00
*/
2010-02-13 11:45:16 -05:00
function get_the_generator ( $type = '' ) {
if ( empty ( $type ) ) {
$current_filter = current_filter ();
2017-11-30 18:11:00 -05:00
if ( empty ( $current_filter ) ) {
2010-02-13 11:45:16 -05:00
return ;
2017-11-30 18:11:00 -05:00
}
2010-02-13 11:45:16 -05:00
switch ( $current_filter ) {
2017-11-30 18:11:00 -05:00
case 'rss2_head' :
case 'commentsrss2_head' :
2010-02-13 11:45:16 -05:00
$type = 'rss2' ;
break ;
2017-11-30 18:11:00 -05:00
case 'rss_head' :
case 'opml_head' :
2010-02-13 11:45:16 -05:00
$type = 'comment' ;
break ;
2017-11-30 18:11:00 -05:00
case 'rdf_header' :
2010-02-13 11:45:16 -05:00
$type = 'rdf' ;
break ;
2017-11-30 18:11:00 -05:00
case 'atom_head' :
case 'comments_atom_head' :
case 'app_head' :
2010-02-13 11:45:16 -05:00
$type = 'atom' ;
break ;
}
}
switch ( $type ) {
2007-10-06 02:55:24 -04:00
case 'html' :
2018-04-03 10:59:31 -04:00
$gen = '<meta name="generator" content="WordPress ' . esc_attr ( get_bloginfo ( 'version' ) ) . '">' ;
2007-10-06 02:55:24 -04:00
break ;
case 'xhtml' :
2018-04-03 10:59:31 -04:00
$gen = '<meta name="generator" content="WordPress ' . esc_attr ( get_bloginfo ( 'version' ) ) . '" />' ;
2007-10-06 02:55:24 -04:00
break ;
case 'atom' :
2018-04-03 10:59:31 -04:00
$gen = '<generator uri="https://wordpress.org/" version="' . esc_attr ( get_bloginfo_rss ( 'version' ) ) . '">WordPress</generator>' ;
2007-10-06 02:55:24 -04:00
break ;
case 'rss2' :
2018-04-03 10:59:31 -04:00
$gen = '<generator>' . esc_url_raw ( 'https://wordpress.org/?v=' . get_bloginfo_rss ( 'version' ) ) . '</generator>' ;
2007-10-06 02:55:24 -04:00
break ;
case 'rdf' :
2018-04-03 10:59:31 -04:00
$gen = '<admin:generatorAgent rdf:resource="' . esc_url_raw ( 'https://wordpress.org/?v=' . get_bloginfo_rss ( 'version' ) ) . '" />' ;
2007-10-06 02:55:24 -04:00
break ;
case 'comment' :
2018-04-03 10:59:31 -04:00
$gen = '<!-- generator="WordPress/' . esc_attr ( get_bloginfo ( 'version' ) ) . '" -->' ;
2007-10-06 02:55:24 -04:00
break ;
case 'export' :
2019-05-25 20:12:54 -04:00
$gen = '<!-- generator="WordPress/' . esc_attr ( get_bloginfo_rss ( 'version' ) ) . '" created="' . gmdate ( 'Y-m-d H:i' ) . '" -->' ;
2007-10-06 02:55:24 -04:00
break ;
}
2014-04-15 00:01:15 -04:00
/**
2016-05-22 14:26:53 -04:00
* Filters the HTML for the retrieved generator type .
2014-04-15 00:01:15 -04:00
*
2014-11-30 07:10:23 -05:00
* The dynamic portion of the hook name , `$type` , refers to the generator type .
2014-04-15 00:01:15 -04:00
*
* @ since 2.5 . 0
*
2016-05-02 00:00:28 -04:00
* @ param string $gen The HTML markup output to wp_head () .
2014-04-15 00:01:15 -04:00
* @ param string $type The type of generator . Accepts 'html' , 'xhtml' , 'atom' ,
* 'rss2' , 'rdf' , 'comment' , 'export' .
*/
2007-10-06 02:55:24 -04:00
return apply_filters ( " get_the_generator_ { $type } " , $gen , $type );
}
2008-09-05 15:19:01 -04:00
2010-03-11 11:34:27 -05:00
/**
* Outputs the html checked attribute .
*
* Compares the first two arguments and if identical marks as checked
*
2010-12-01 14:24:38 -05:00
* @ since 1.0 . 0
2010-03-11 11:34:27 -05:00
*
* @ param mixed $checked One of the values to compare
* @ param mixed $current ( true ) The other value to compare if not just true
2015-05-25 13:18:26 -04:00
* @ param bool $echo Whether to echo or just return the string
2010-03-11 11:34:27 -05:00
* @ return string html attribute or empty string
*/
function checked ( $checked , $current = true , $echo = true ) {
return __checked_selected_helper ( $checked , $current , $echo , 'checked' );
}
/**
* Outputs the html selected attribute .
*
* Compares the first two arguments and if identical marks as selected
*
2010-12-01 14:24:38 -05:00
* @ since 1.0 . 0
2010-03-11 11:34:27 -05:00
*
2010-09-07 07:21:11 -04:00
* @ param mixed $selected One of the values to compare
2015-05-25 13:18:26 -04:00
* @ param mixed $current ( true ) The other value to compare if not just true
* @ param bool $echo Whether to echo or just return the string
2010-03-11 11:34:27 -05:00
* @ return string html attribute or empty string
*/
function selected ( $selected , $current = true , $echo = true ) {
return __checked_selected_helper ( $selected , $current , $echo , 'selected' );
}
/**
* Outputs the html disabled attribute .
*
* Compares the first two arguments and if identical marks as disabled
*
* @ since 3.0 . 0
*
* @ param mixed $disabled One of the values to compare
2015-05-25 13:18:26 -04:00
* @ param mixed $current ( true ) The other value to compare if not just true
* @ param bool $echo Whether to echo or just return the string
2010-03-11 11:34:27 -05:00
* @ return string html attribute or empty string
*/
function disabled ( $disabled , $current = true , $echo = true ) {
return __checked_selected_helper ( $disabled , $current , $echo , 'disabled' );
}
/**
2017-10-04 09:19:48 -04:00
* Outputs the html readonly attribute .
*
* Compares the first two arguments and if identical marks as readonly
*
* @ since 4.9 . 0
*
* @ param mixed $readonly One of the values to compare
* @ param mixed $current ( true ) The other value to compare if not just true
* @ param bool $echo Whether to echo or just return the string
* @ return string html attribute or empty string
*/
function readonly ( $readonly , $current = true , $echo = true ) {
return __checked_selected_helper ( $readonly , $current , $echo , 'readonly' );
}
/**
* Private helper function for checked , selected , disabled and readonly .
2010-03-11 11:34:27 -05:00
*
* Compares the first two arguments and if identical marks as $type
*
2010-12-01 14:24:38 -05:00
* @ since 2.8 . 0
2010-03-11 11:34:27 -05:00
* @ access private
*
2015-05-25 13:18:26 -04:00
* @ param mixed $helper One of the values to compare
* @ param mixed $current ( true ) The other value to compare if not just true
* @ param bool $echo Whether to echo or just return the string
2017-10-04 09:19:48 -04:00
* @ param string $type The type of checked | selected | disabled | readonly we are doing
2010-03-11 11:34:27 -05:00
* @ return string html attribute or empty string
*/
2019-09-25 09:47:58 -04:00
function __checked_selected_helper ( $helper , $current , $echo , $type ) { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName.FunctionDoubleUnderscore,PHPCompatibility.FunctionNameRestrictions.ReservedFunctionNames.FunctionDoubleUnderscore
2017-11-30 18:11:00 -05:00
if ( ( string ) $helper === ( string ) $current ) {
2010-03-11 11:34:27 -05:00
$result = " $type =' $type ' " ;
2017-11-30 18:11:00 -05:00
} else {
2010-03-11 11:34:27 -05:00
$result = '' ;
2017-11-30 18:11:00 -05:00
}
2010-03-11 11:34:27 -05:00
2017-11-30 18:11:00 -05:00
if ( $echo ) {
2010-03-11 11:34:27 -05:00
echo $result ;
2017-11-30 18:11:00 -05:00
}
2010-03-11 11:34:27 -05:00
return $result ;
}
2013-01-29 01:15:25 -05:00
/**
* Default settings for heartbeat
*
* Outputs the nonce used in the heartbeat XHR
*
* @ since 3.6 . 0
*
* @ param array $settings
* @ return array $settings
*/
function wp_heartbeat_settings ( $settings ) {
2017-11-30 18:11:00 -05:00
if ( ! is_admin () ) {
2013-03-30 19:32:12 -04:00
$settings [ 'ajaxurl' ] = admin_url ( 'admin-ajax.php' , 'relative' );
2017-11-30 18:11:00 -05:00
}
2013-03-30 19:32:12 -04:00
2017-11-30 18:11:00 -05:00
if ( is_user_logged_in () ) {
2013-02-24 23:19:51 -05:00
$settings [ 'nonce' ] = wp_create_nonce ( 'heartbeat-nonce' );
2017-11-30 18:11:00 -05:00
}
2013-02-24 21:32:22 -05:00
2013-02-24 23:19:51 -05:00
return $settings ;
2013-01-29 01:15:25 -05:00
}