--- a/wp/wp-includes/general-template.php Thu Sep 29 08:06:27 2022 +0200
+++ b/wp/wp-includes/general-template.php Fri Sep 05 18:40:08 2025 +0200
@@ -7,10 +7,10 @@
*/
/**
- * Load header template.
+ * Loads header template.
*
* Includes the header template for a theme or if a name is specified then a
- * specialised header will be included.
+ * specialized header will be included.
*
* For the parameter, if the file is called "header-special.php" then specify
* "special".
@@ -19,7 +19,7 @@
* @since 5.5.0 A return value was added.
* @since 5.5.0 The `$args` parameter was added.
*
- * @param string $name The name of the specialised header.
+ * @param string $name The name of the specialized header.
* @param array $args Optional. Additional arguments passed to the header template.
* Default empty array.
* @return void|false Void on success, false if the template does not exist.
@@ -51,10 +51,10 @@
}
/**
- * Load footer template.
+ * Loads footer template.
*
* Includes the footer template for a theme or if a name is specified then a
- * specialised footer will be included.
+ * specialized footer will be included.
*
* For the parameter, if the file is called "footer-special.php" then specify
* "special".
@@ -63,7 +63,7 @@
* @since 5.5.0 A return value was added.
* @since 5.5.0 The `$args` parameter was added.
*
- * @param string $name The name of the specialised footer.
+ * @param string $name The name of the specialized footer.
* @param array $args Optional. Additional arguments passed to the footer template.
* Default empty array.
* @return void|false Void on success, false if the template does not exist.
@@ -95,10 +95,10 @@
}
/**
- * Load sidebar template.
+ * Loads sidebar template.
*
* Includes the sidebar template for a theme or if a name is specified then a
- * specialised sidebar will be included.
+ * specialized sidebar will be included.
*
* For the parameter, if the file is called "sidebar-special.php" then specify
* "special".
@@ -107,7 +107,7 @@
* @since 5.5.0 A return value was added.
* @since 5.5.0 The `$args` parameter was added.
*
- * @param string $name The name of the specialised sidebar.
+ * @param string $name The name of the specialized sidebar.
* @param array $args Optional. Additional arguments passed to the sidebar template.
* Default empty array.
* @return void|false Void on success, false if the template does not exist.
@@ -145,7 +145,7 @@
* in the theme.
*
* 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
+ * specialized part will be included. If the theme contains no {slug}.php file
* then no template will be included.
*
* The template is included using require, not require_once, so you may include the
@@ -158,10 +158,10 @@
* @since 5.5.0 A return value was added.
* @since 5.5.0 The `$args` parameter was added.
*
- * @param string $slug The slug name for the generic template.
- * @param string $name The name of the specialised template.
- * @param array $args Optional. Additional arguments passed to the template.
- * Default empty array.
+ * @param string $slug The slug name for the generic template.
+ * @param string|null $name Optional. The name of the specialized template.
+ * @param array $args Optional. Additional arguments passed to the template.
+ * Default empty array.
* @return void|false Void on success, false if the template does not exist.
*/
function get_template_part( $slug, $name = null, $args = array() ) {
@@ -175,7 +175,8 @@
* @since 5.5.0 The `$args` parameter was added.
*
* @param string $slug The slug name for the generic template.
- * @param string|null $name The name of the specialized template.
+ * @param string|null $name The name of the specialized template or null if
+ * there is none.
* @param array $args Additional arguments passed to the template.
*/
do_action( "get_template_part_{$slug}", $slug, $name, $args );
@@ -195,7 +196,8 @@
* @since 5.5.0 The `$args` parameter was added.
*
* @param string $slug The slug name for the generic template.
- * @param string $name The name of the specialized template.
+ * @param string $name The name of the specialized template or an empty
+ * string if there is none.
* @param string[] $templates Array of template files to search for, in order.
* @param array $args Additional arguments passed to the template.
*/
@@ -207,7 +209,7 @@
}
/**
- * Display search form.
+ * Displays 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
@@ -322,7 +324,10 @@
if ( 'html5' === $format ) {
$form = '<form role="search" ' . $aria_label . 'method="get" class="search-form" action="' . esc_url( home_url( '/' ) ) . '">
<label>
- <span class="screen-reader-text">' . _x( 'Search for:', 'label' ) . '</span>
+ <span class="screen-reader-text">' .
+ /* translators: Hidden accessibility text. */
+ _x( 'Search for:', 'label' ) .
+ '</span>
<input type="search" class="search-field" placeholder="' . esc_attr_x( 'Search …', 'placeholder' ) . '" value="' . get_search_query() . '" name="s" />
</label>
<input type="submit" class="search-submit" value="' . esc_attr_x( 'Search', 'submit button' ) . '" />
@@ -330,7 +335,10 @@
} else {
$form = '<form role="search" ' . $aria_label . 'method="get" id="searchform" class="searchform" action="' . esc_url( home_url( '/' ) ) . '">
<div>
- <label class="screen-reader-text" for="s">' . _x( 'Search for:', 'label' ) . '</label>
+ <label class="screen-reader-text" for="s">' .
+ /* translators: Hidden accessibility text. */
+ _x( 'Search for:', 'label' ) .
+ '</label>
<input type="text" value="' . get_search_query() . '" name="s" id="s" />
<input type="submit" id="searchsubmit" value="' . esc_attr_x( 'Search', 'submit button' ) . '" />
</div>
@@ -362,7 +370,7 @@
}
/**
- * Display the Log In/Out link.
+ * Displays the Log In/Out link.
*
* Displays a link, which allows users to navigate to the Log In page to log in
* or log out depending on whether they are currently logged in.
@@ -370,17 +378,17 @@
* @since 1.5.0
*
* @param string $redirect Optional path to redirect to on login/logout.
- * @param bool $echo Default to echo and not return the link.
- * @return void|string Void if `$echo` argument is true, log in/out link if `$echo` is false.
+ * @param bool $display Default to echo and not return the link.
+ * @return void|string Void if `$display` argument is true, log in/out link if `$display` is false.
*/
-function wp_loginout( $redirect = '', $echo = true ) {
+function wp_loginout( $redirect = '', $display = 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>';
}
- if ( $echo ) {
+ if ( $display ) {
/**
* Filters the HTML output for the Log In/Log Out link.
*
@@ -483,49 +491,58 @@
* The login form HTML is echoed by default. Pass a false value for `$echo` to return it instead.
*
* @since 3.0.0
+ * @since 6.6.0 Added `required_username` and `required_password` arguments.
*
* @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'.
- * @type string $label_username Label for the username or email address field. Default 'Username or Email Address'.
- * @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).
+ * @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'.
+ * @type string $label_username Label for the username or email address field. Default 'Username or Email Address'.
+ * @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).
+ * @type bool $required_username Whether the username field has the 'required' attribute.
+ * Default false.
+ * @type bool $required_password Whether the password field has the 'required' attribute.
+ * Default false.
*
* }
* @return void|string Void if 'echo' argument is true, login form HTML if 'echo' is false.
*/
function wp_login_form( $args = array() ) {
$defaults = array(
- 'echo' => true,
+ 'echo' => true,
// Default 'redirect' value takes the user back to the request URI.
- 'redirect' => ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'],
- 'form_id' => 'loginform',
- 'label_username' => __( 'Username or Email Address' ),
- 'label_password' => __( 'Password' ),
- 'label_remember' => __( 'Remember Me' ),
- 'label_log_in' => __( 'Log In' ),
- 'id_username' => 'user_login',
- 'id_password' => 'user_pass',
- 'id_remember' => 'rememberme',
- 'id_submit' => 'wp-submit',
- 'remember' => true,
- 'value_username' => '',
+ 'redirect' => ( is_ssl() ? 'https://' : 'http://' ) . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'],
+ 'form_id' => 'loginform',
+ 'label_username' => __( 'Username or Email Address' ),
+ 'label_password' => __( 'Password' ),
+ 'label_remember' => __( 'Remember Me' ),
+ 'label_log_in' => __( 'Log In' ),
+ 'id_username' => 'user_login',
+ 'id_password' => 'user_pass',
+ 'id_remember' => 'rememberme',
+ 'id_submit' => 'wp-submit',
+ 'remember' => true,
+ 'value_username' => '',
// Set 'value_remember' to true to default the "Remember me" checkbox to checked.
- 'value_remember' => false,
+ 'value_remember' => false,
+ // Set 'required_username' to true to add the required attribute to username field.
+ 'required_username' => false,
+ // Set 'required_password' to true to add the required attribute to password field.
+ 'required_password' => false,
);
/**
@@ -586,19 +603,21 @@
sprintf(
'<p class="login-username">
<label for="%1$s">%2$s</label>
- <input type="text" name="log" id="%1$s" autocomplete="username" class="input" value="%3$s" size="20" />
+ <input type="text" name="log" id="%1$s" autocomplete="username" class="input" value="%3$s" size="20"%4$s />
</p>',
esc_attr( $args['id_username'] ),
esc_html( $args['label_username'] ),
- esc_attr( $args['value_username'] )
+ esc_attr( $args['value_username'] ),
+ ( $args['required_username'] ? ' required="required"' : '' )
) .
sprintf(
'<p class="login-password">
<label for="%1$s">%2$s</label>
- <input type="password" name="pwd" id="%1$s" autocomplete="current-password" class="input" value="" size="20" />
+ <input type="password" name="pwd" id="%1$s" autocomplete="current-password" spellcheck="false" class="input" value="" size="20"%3$s />
</p>',
esc_attr( $args['id_password'] ),
- esc_html( $args['label_password'] )
+ esc_html( $args['label_password'] ),
+ ( $args['required_password'] ? ' required="required"' : '' )
) .
$login_form_middle .
( $args['remember'] ?
@@ -629,7 +648,7 @@
}
/**
- * Returns the URL that allows the user to retrieve the lost password
+ * Returns the URL that allows the user to reset the lost password.
*
* @since 2.8.0
*
@@ -646,7 +665,7 @@
}
if ( is_multisite() ) {
- $blog_details = get_blog_details();
+ $blog_details = get_site();
$wp_login_path = $blog_details->path . 'wp-login.php';
} else {
$wp_login_path = 'wp-login.php';
@@ -666,20 +685,20 @@
}
/**
- * Display the Registration or Admin link.
+ * Displays the Registration or Admin link.
*
* 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.
*
* @since 1.5.0
*
- * @param string $before Text to output before the link. Default `<li>`.
- * @param string $after Text to output after the link. Default `</li>`.
- * @param bool $echo Default to echo and not return the link.
- * @return void|string Void if `$echo` argument is true, registration or admin link
- * if `$echo` is false.
+ * @param string $before Text to output before the link. Default `<li>`.
+ * @param string $after Text to output after the link. Default `</li>`.
+ * @param bool $display Default to echo and not return the link.
+ * @return void|string Void if `$display` argument is true, registration or admin link
+ * if `$display` is false.
*/
-function wp_register( $before = '<li>', $after = '</li>', $echo = true ) {
+function wp_register( $before = '<li>', $after = '</li>', $display = true ) {
if ( ! is_user_logged_in() ) {
if ( get_option( 'users_can_register' ) ) {
$link = $before . '<a href="' . esc_url( wp_registration_url() ) . '">' . __( 'Register' ) . '</a>' . $after;
@@ -704,7 +723,7 @@
*/
$link = apply_filters( 'register', $link );
- if ( $echo ) {
+ if ( $display ) {
echo $link;
} else {
return $link;
@@ -755,7 +774,7 @@
* - '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
+ * - '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
@@ -898,15 +917,12 @@
break;
}
- $url = true;
- if ( strpos( $show, 'url' ) === false &&
- strpos( $show, 'directory' ) === false &&
- strpos( $show, 'home' ) === false ) {
- $url = false;
- }
-
if ( 'display' === $filter ) {
- if ( $url ) {
+ if (
+ str_contains( $show, 'url' )
+ || str_contains( $show, 'directory' )
+ || str_contains( $show, 'home' )
+ ) {
/**
* Filters the URL returned by get_bloginfo().
*
@@ -950,7 +966,7 @@
$switched_blog = true;
}
- $site_icon_id = get_option( 'site_icon' );
+ $site_icon_id = (int) get_option( 'site_icon' );
if ( $site_icon_id ) {
if ( $size >= 512 ) {
@@ -991,7 +1007,7 @@
}
/**
- * Whether the site has a Site Icon.
+ * Determines whether the site has a Site Icon.
*
* @since 4.3.0
*
@@ -1019,12 +1035,13 @@
}
$custom_logo_id = get_theme_mod( 'custom_logo' );
+ $is_image = ( $custom_logo_id ) ? wp_attachment_is_image( $custom_logo_id ) : false;
if ( $switched_blog ) {
restore_current_blog();
}
- return (bool) $custom_logo_id;
+ return $is_image;
}
/**
@@ -1047,10 +1064,9 @@
$switched_blog = true;
}
- $custom_logo_id = get_theme_mod( 'custom_logo' );
-
// We have a logo. Logo is go.
- if ( $custom_logo_id ) {
+ if ( has_custom_logo() ) {
+ $custom_logo_id = get_theme_mod( 'custom_logo' );
$custom_logo_attr = array(
'class' => 'custom-logo',
'loading' => false,
@@ -1092,21 +1108,25 @@
*/
$image = wp_get_attachment_image( $custom_logo_id, 'full', false, $custom_logo_attr );
- if ( $unlink_homepage_logo && is_front_page() && ! is_paged() ) {
- // If on the home page, don't link the logo to home.
- $html = sprintf(
- '<span class="custom-logo-link">%1$s</span>',
- $image
- );
- } else {
- $aria_current = is_front_page() && ! is_paged() ? ' aria-current="page"' : '';
-
- $html = sprintf(
- '<a href="%1$s" class="custom-logo-link" rel="home"%2$s>%3$s</a>',
- esc_url( home_url( '/' ) ),
- $aria_current,
- $image
- );
+ // Check that we have a proper HTML img element.
+ if ( $image ) {
+
+ if ( $unlink_homepage_logo && is_front_page() && ! is_paged() ) {
+ // If on the home page, don't link the logo to home.
+ $html = sprintf(
+ '<span class="custom-logo-link">%1$s</span>',
+ $image
+ );
+ } else {
+ $aria_current = is_front_page() && ! is_paged() ? ' aria-current="page"' : '';
+
+ $html = sprintf(
+ '<a href="%1$s" class="custom-logo-link" rel="home"%2$s>%3$s</a>',
+ esc_url( home_url( '/' ) ),
+ $aria_current,
+ $image
+ );
+ }
}
} elseif ( is_customize_preview() ) {
// If no logo is set but we're in the Customizer, leave a placeholder (needed for the live preview).
@@ -1293,7 +1313,7 @@
}
/**
- * Display or retrieve page title for all areas of blog.
+ * Displays or retrieves 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
@@ -1314,7 +1334,7 @@
* @param string $sep Optional. How to separate the various items within the page title.
* Default '»'.
* @param bool $display Optional. Whether to display or retrieve title. Default true.
- * @param string $seplocation Optional. Location of the separator ('left' or 'right').
+ * @param string $seplocation Optional. Location of the separator (either 'left' or 'right').
* @return string|void String when `$display` is false, nothing otherwise.
*/
function wp_title( $sep = '»', $display = true, $seplocation = '' ) {
@@ -1434,7 +1454,7 @@
*
* @param string $title Page title.
* @param string $sep Title separator.
- * @param string $seplocation Location of the separator ('left' or 'right').
+ * @param string $seplocation Location of the separator (either 'left' or 'right').
*/
$title = apply_filters( 'wp_title', $title, $sep, $seplocation );
@@ -1447,7 +1467,7 @@
}
/**
- * Display or retrieve page title for post.
+ * Displays or retrieves page title for post.
*
* This is optimized for single.php template file for displaying the post title.
*
@@ -1486,7 +1506,7 @@
}
/**
- * Display or retrieve title for a post type archive.
+ * Displays or retrieves 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.
@@ -1527,7 +1547,7 @@
}
/**
- * Display or retrieve page title for category archive.
+ * Displays or retrieves page title for category archive.
*
* Useful for category template files for displaying the category page title.
* The prefix does not automatically place a space between the prefix, so if
@@ -1544,7 +1564,7 @@
}
/**
- * Display or retrieve page title for tag post archive.
+ * Displays or retrieves page title for tag post archive.
*
* Useful for tag template files for displaying the tag page title. The prefix
* does not automatically place a space between the prefix, so if there should
@@ -1561,7 +1581,7 @@
}
/**
- * Display or retrieve page title for taxonomy term archive.
+ * Displays or retrieves page title for taxonomy term archive.
*
* Useful for taxonomy term template files for displaying the taxonomy term page title.
* The prefix does not automatically place a space between the prefix, so if there should
@@ -1623,7 +1643,7 @@
}
/**
- * Display or retrieve page title for post archive based on date.
+ * Displays or retrieves page title for post archive based on date.
*
* 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
@@ -1666,7 +1686,7 @@
}
/**
- * Display the archive title based on the queried object.
+ * Displays the archive title based on the queried object.
*
* @since 4.1.0
*
@@ -1684,7 +1704,7 @@
}
/**
- * Retrieve the archive title based on the queried object.
+ * Retrieves the archive title based on the queried object.
*
* @since 4.1.0
* @since 5.5.0 The title part is wrapped in a `<span>` element.
@@ -1705,12 +1725,15 @@
$title = get_the_author();
$prefix = _x( 'Author:', 'author archive title prefix' );
} elseif ( is_year() ) {
+ /* translators: See https://www.php.net/manual/datetime.format.php */
$title = get_the_date( _x( 'Y', 'yearly archives date format' ) );
$prefix = _x( 'Year:', 'date archive title prefix' );
} elseif ( is_month() ) {
+ /* translators: See https://www.php.net/manual/datetime.format.php */
$title = get_the_date( _x( 'F Y', 'monthly archives date format' ) );
$prefix = _x( 'Month:', 'date archive title prefix' );
} elseif ( is_day() ) {
+ /* translators: See https://www.php.net/manual/datetime.format.php */
$title = get_the_date( _x( 'F j, Y', 'daily archives date format' ) );
$prefix = _x( 'Day:', 'date archive title prefix' );
} elseif ( is_tax( 'post_format' ) ) {
@@ -1782,7 +1805,7 @@
}
/**
- * Display category, tag, term, or author description.
+ * Displays category, tag, term, or author description.
*
* @since 4.1.0
*
@@ -1863,7 +1886,7 @@
}
/**
- * Retrieve archive link content based on predefined or custom code.
+ * Retrieves 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
@@ -1932,7 +1955,7 @@
}
/**
- * Display archive links based on type and format.
+ * Displays archive links based on type and format.
*
* @since 1.2.0
* @since 4.4.0 The `$post_type` argument was added.
@@ -2048,10 +2071,10 @@
$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' );
+ $results = wp_cache_get( $key, 'post-queries' );
if ( ! $results ) {
$results = $wpdb->get_results( $query );
- wp_cache_set( $key, $results, 'posts' );
+ wp_cache_set( $key, $results, 'post-queries' );
}
if ( $results ) {
$after = $parsed_args['after'];
@@ -2073,10 +2096,10 @@
$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' );
+ $results = wp_cache_get( $key, 'post-queries' );
if ( ! $results ) {
$results = $wpdb->get_results( $query );
- wp_cache_set( $key, $results, 'posts' );
+ wp_cache_set( $key, $results, 'post-queries' );
}
if ( $results ) {
$after = $parsed_args['after'];
@@ -2097,10 +2120,10 @@
$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' );
+ $results = wp_cache_get( $key, 'post-queries' );
if ( ! $results ) {
$results = $wpdb->get_results( $query );
- wp_cache_set( $key, $results, 'posts' );
+ wp_cache_set( $key, $results, 'post-queries' );
}
if ( $results ) {
$after = $parsed_args['after'];
@@ -2123,10 +2146,10 @@
$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' );
+ $results = wp_cache_get( $key, 'post-queries' );
if ( ! $results ) {
$results = $wpdb->get_results( $query );
- wp_cache_set( $key, $results, 'posts' );
+ wp_cache_set( $key, $results, 'post-queries' );
}
$arc_w_last = '';
if ( $results ) {
@@ -2162,10 +2185,10 @@
$query = "SELECT * FROM $wpdb->posts $join $where ORDER BY $orderby $limit";
$key = md5( $query );
$key = "wp_get_archives:$key:$last_changed";
- $results = wp_cache_get( $key, 'posts' );
+ $results = wp_cache_get( $key, 'post-queries' );
if ( ! $results ) {
$results = $wpdb->get_results( $query );
- wp_cache_set( $key, $results, 'posts' );
+ wp_cache_set( $key, $results, 'post-queries' );
}
if ( $results ) {
foreach ( (array) $results as $result ) {
@@ -2192,7 +2215,7 @@
}
/**
- * Get number of days since the start of the week.
+ * Gets number of days since the start of the week.
*
* @since 1.5.0
*
@@ -2205,7 +2228,7 @@
}
/**
- * Display calendar with days that have posts as links.
+ * Displays calendar with days that have posts as links.
*
* 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.
@@ -2220,10 +2243,10 @@
* @global array $posts
*
* @param bool $initial Optional. Whether to use initial calendar names. Default true.
- * @param bool $echo Optional. Whether to display the calendar output. Default true.
- * @return void|string Void if `$echo` argument is true, calendar HTML if `$echo` is false.
+ * @param bool $display Optional. Whether to display the calendar output. Default true.
+ * @return void|string Void if `$display` argument is true, calendar HTML if `$display` is false.
*/
-function get_calendar( $initial = true, $echo = true ) {
+function get_calendar( $initial = true, $display = true ) {
global $wpdb, $m, $monthnum, $year, $wp_locale, $posts;
$key = md5( $m . $monthnum . $year );
@@ -2233,7 +2256,7 @@
/** This filter is documented in wp-includes/general-template.php */
$output = apply_filters( 'get_calendar', $cache[ $key ] );
- if ( $echo ) {
+ if ( $display ) {
echo $output;
return;
}
@@ -2292,16 +2315,16 @@
FROM $wpdb->posts
WHERE post_date < '$thisyear-$thismonth-01'
AND post_type = 'post' AND post_status = 'publish'
- ORDER BY post_date DESC
- LIMIT 1"
+ ORDER BY post_date DESC
+ LIMIT 1"
);
$next = $wpdb->get_row(
"SELECT MONTH(post_date) AS month, YEAR(post_date) AS year
FROM $wpdb->posts
WHERE post_date > '$thisyear-$thismonth-{$last_day} 23:59:59'
AND post_type = 'post' AND post_status = 'publish'
- ORDER BY post_date ASC
- LIMIT 1"
+ ORDER BY post_date ASC
+ LIMIT 1"
);
/* translators: Calendar caption: 1: Month name, 2: 4-digit year. */
@@ -2430,7 +2453,7 @@
$cache[ $key ] = $calendar_output;
wp_cache_set( 'get_calendar', $cache, 'calendar' );
- if ( $echo ) {
+ if ( $display ) {
/**
* Filters the HTML calendar output.
*
@@ -2446,7 +2469,7 @@
}
/**
- * Purge the cached results of get_calendar.
+ * Purges the cached results of get_calendar.
*
* @see get_calendar()
* @since 2.1.0
@@ -2456,12 +2479,13 @@
}
/**
- * Display all of the allowed tags in HTML format with attributes.
+ * Displays all of the allowed tags in HTML format with attributes.
*
* 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.
*
* @since 1.0.1
+ * @since 4.4.0 No longer used in core.
*
* @global array $allowedtags
*
@@ -2494,7 +2518,7 @@
}
/**
- * Display or Retrieve the date the current post was written (once per date)
+ * Displays or retrieves the date the current post was written (once per date)
*
* Will only output the date if the current post's date is different from the
* previous one output.
@@ -2510,13 +2534,13 @@
* @global string $currentday The day of the current post in the loop.
* @global string $previousday The day of the previous post in the loop.
*
- * @param string $format Optional. PHP date format. Defaults to the 'date_format' option.
- * @param string $before Optional. Output before the date. Default empty.
- * @param string $after Optional. Output after the date. Default empty.
- * @param bool $echo Optional. Whether to echo the date or return it. Default true.
+ * @param string $format Optional. PHP date format. Defaults to the 'date_format' option.
+ * @param string $before Optional. Output before the date. Default empty.
+ * @param string $after Optional. Output after the date. Default empty.
+ * @param bool $display Optional. Whether to echo the date or return it. Default true.
* @return string|void String if retrieving.
*/
-function the_date( $format = '', $before = '', $after = '', $echo = true ) {
+function the_date( $format = '', $before = '', $after = '', $display = true ) {
global $currentday, $previousday;
$the_date = '';
@@ -2538,7 +2562,7 @@
*/
$the_date = apply_filters( 'the_date', $the_date, $format, $before, $after );
- if ( $echo ) {
+ if ( $display ) {
echo $the_date;
} else {
return $the_date;
@@ -2546,7 +2570,7 @@
}
/**
- * Retrieve the date on which the post was written.
+ * Retrieves the date on which the post was written.
*
* Unlike the_date() this function will always return the date.
* Modify output with the {@see 'get_the_date'} filter.
@@ -2581,17 +2605,17 @@
}
/**
- * Display the date on which the post was last modified.
+ * Displays the date on which the post was last modified.
*
* @since 2.1.0
*
- * @param string $format Optional. PHP date format. Defaults to the 'date_format' option.
- * @param string $before Optional. Output before the date. Default empty.
- * @param string $after Optional. Output after the date. Default empty.
- * @param bool $echo Optional. Whether to echo the date or return it. Default true.
+ * @param string $format Optional. PHP date format. Defaults to the 'date_format' option.
+ * @param string $before Optional. Output before the date. Default empty.
+ * @param string $after Optional. Output after the date. Default empty.
+ * @param bool $display Optional. Whether to echo the date or return it. Default true.
* @return string|void String if retrieving.
*/
-function the_modified_date( $format = '', $before = '', $after = '', $echo = true ) {
+function the_modified_date( $format = '', $before = '', $after = '', $display = true ) {
$the_modified_date = $before . get_the_modified_date( $format ) . $after;
/**
@@ -2606,16 +2630,15 @@
*/
$the_modified_date = apply_filters( 'the_modified_date', $the_modified_date, $format, $before, $after );
- if ( $echo ) {
+ if ( $display ) {
echo $the_modified_date;
} else {
return $the_modified_date;
}
-
}
/**
- * Retrieve the date on which the post was last modified.
+ * Retrieves the date on which the post was last modified.
*
* @since 2.1.0
* @since 4.6.0 Added the `$post` parameter.
@@ -2650,7 +2673,7 @@
}
/**
- * Display the time at which the post was written.
+ * Displays the time at which the post was written.
*
* @since 0.71
*
@@ -2672,14 +2695,14 @@
}
/**
- * Retrieve the time at which the post was written.
+ * Retrieves the time at which the post was written.
*
* @since 1.5.0
*
* @param string $format Optional. Format to use for retrieving the time the post
* was written. Accepts 'G', 'U', or PHP date format.
* Defaults to the 'time_format' option.
- * @param int|WP_Post $post WP_Post object or ID. Default is global `$post` object.
+ * @param int|WP_Post $post Post ID or post object. Default is global `$post` object.
* @return string|int|false Formatted date string or Unix timestamp if `$format` is 'U' or 'G'.
* False on failure.
*/
@@ -2708,14 +2731,14 @@
}
/**
- * Retrieve the time at which the post was written.
+ * Retrieves the time at which the post was written.
*
* @since 2.0.0
*
* @param string $format Optional. Format to use for retrieving the time the post
* was written. Accepts 'G', 'U', or PHP date format. Default 'U'.
* @param bool $gmt Optional. Whether to retrieve the GMT time. Default false.
- * @param int|WP_Post $post WP_Post object or ID. Default is global `$post` object.
+ * @param int|WP_Post $post Post ID or post object. Default is global `$post` object.
* @param bool $translate Whether to translate the time string. Default false.
* @return string|int|false Formatted date string or Unix timestamp if `$format` is 'U' or 'G'.
* False on failure.
@@ -2765,7 +2788,7 @@
}
/**
- * Retrieve post published or modified time as a `DateTimeImmutable` object instance.
+ * Retrieves post published or modified time as a `DateTimeImmutable` object instance.
*
* The object will be set to the timezone from WordPress settings.
*
@@ -2776,7 +2799,7 @@
*
* @since 5.3.0
*
- * @param int|WP_Post $post Optional. WP_Post object or ID. Default is global `$post` object.
+ * @param int|WP_Post $post Optional. Post ID or post object. 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'.
@@ -2814,14 +2837,14 @@
}
/**
- * Retrieve post published or modified time as a Unix timestamp.
+ * Retrieves 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.
+ * @param int|WP_Post $post Optional. Post ID or post object. Default is global `$post` object.
* @param string $field Optional. Published or modified time to use from database. Accepts 'date' or 'modified'.
* Default 'date'.
* @return int|false Unix timestamp on success, false on failure.
@@ -2837,7 +2860,7 @@
}
/**
- * Display the time at which the post was last modified.
+ * Displays the time at which the post was last modified.
*
* @since 2.0.0
*
@@ -2859,7 +2882,7 @@
}
/**
- * Retrieve the time at which the post was last modified.
+ * Retrieves the time at which the post was last modified.
*
* @since 2.0.0
* @since 4.6.0 Added the `$post` parameter.
@@ -2897,14 +2920,14 @@
}
/**
- * Retrieve the time at which the post was last modified.
+ * Retrieves the time at which the post was last modified.
*
* @since 2.0.0
*
* @param string $format Optional. Format to use for retrieving the time the post
* was modified. Accepts 'G', 'U', or PHP date format. Default 'U'.
* @param bool $gmt Optional. Whether to retrieve the GMT time. Default false.
- * @param int|WP_Post $post WP_Post object or ID. Default is global `$post` object.
+ * @param int|WP_Post $post Post ID or post object. Default is global `$post` object.
* @param bool $translate Whether to translate the time string. Default false.
* @return string|int|false Formatted date string or Unix timestamp if `$format` is 'U' or 'G'.
* False on failure.
@@ -2954,7 +2977,7 @@
}
/**
- * Display the weekday on which the post was written.
+ * Displays the weekday on which the post was written.
*
* @since 0.71
*
@@ -2982,7 +3005,7 @@
}
/**
- * Display the weekday on which the post was written.
+ * Displays the weekday on which the post was written.
*
* Will only output the weekday if the current post's weekday is different from
* the previous one output.
@@ -3027,7 +3050,7 @@
}
/**
- * Fire the wp_head action.
+ * Fires the wp_head action.
*
* See {@see 'wp_head'}.
*
@@ -3043,7 +3066,7 @@
}
/**
- * Fire the wp_footer action.
+ * Fires the wp_footer action.
*
* See {@see 'wp_footer'}.
*
@@ -3059,7 +3082,7 @@
}
/**
- * Fire the wp_body_open action.
+ * Fires the wp_body_open action.
*
* See {@see 'wp_body_open'}.
*
@@ -3075,7 +3098,7 @@
}
/**
- * Display the links to the general feeds.
+ * Displays the links to the general feeds.
*
* @since 2.8.0
*
@@ -3087,11 +3110,11 @@
}
$defaults = array(
- /* translators: Separator between blog name and feed type in feed links. */
+ /* translators: Separator between site name and feed type in feed links. */
'separator' => _x( '»', 'feed link' ),
- /* translators: 1: Blog title, 2: Separator (raquo). */
+ /* translators: 1: Site title, 2: Separator (raquo). */
'feedtitle' => __( '%1$s %2$s Feed' ),
- /* translators: 1: Blog title, 2: Separator (raquo). */
+ /* translators: 1: Site title, 2: Separator (raquo). */
'comstitle' => __( '%1$s %2$s Comments Feed' ),
);
@@ -3105,7 +3128,12 @@
* @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";
+ printf(
+ '<link rel="alternate" type="%s" title="%s" href="%s" />' . "\n",
+ feed_content_type(),
+ esc_attr( sprintf( $args['feedtitle'], get_bloginfo( 'name' ), $args['separator'] ) ),
+ esc_url( get_feed_link() )
+ );
}
/**
@@ -3116,12 +3144,17 @@
* @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";
+ printf(
+ '<link rel="alternate" type="%s" title="%s" href="%s" />' . "\n",
+ feed_content_type(),
+ esc_attr( sprintf( $args['comstitle'], get_bloginfo( 'name' ), $args['separator'] ) ),
+ esc_url( get_feed_link( 'comments_' . get_default_feed() ) )
+ );
}
}
/**
- * Display the links to the extra feeds such as category feeds.
+ * Displays the links to the extra feeds such as category feeds.
*
* @since 2.8.0
*
@@ -3129,21 +3162,21 @@
*/
function feed_links_extra( $args = array() ) {
$defaults = array(
- /* translators: Separator between blog name and feed type in feed links. */
+ /* translators: Separator between site name and feed type in feed links. */
'separator' => _x( '»', 'feed link' ),
- /* translators: 1: Blog name, 2: Separator (raquo), 3: Post title. */
+ /* translators: 1: Site name, 2: Separator (raquo), 3: Post title. */
'singletitle' => __( '%1$s %2$s %3$s Comments Feed' ),
- /* translators: 1: Blog name, 2: Separator (raquo), 3: Category name. */
+ /* translators: 1: Site name, 2: Separator (raquo), 3: Category name. */
'cattitle' => __( '%1$s %2$s %3$s Category Feed' ),
- /* translators: 1: Blog name, 2: Separator (raquo), 3: Tag name. */
+ /* translators: 1: Site name, 2: Separator (raquo), 3: Tag name. */
'tagtitle' => __( '%1$s %2$s %3$s Tag Feed' ),
- /* translators: 1: Blog name, 2: Separator (raquo), 3: Term name, 4: Taxonomy singular name. */
+ /* translators: 1: Site name, 2: Separator (raquo), 3: Term name, 4: Taxonomy singular name. */
'taxtitle' => __( '%1$s %2$s %3$s %4$s Feed' ),
- /* translators: 1: Blog name, 2: Separator (raquo), 3: Author name. */
+ /* translators: 1: Site name, 2: Separator (raquo), 3: Author name. */
'authortitle' => __( '%1$s %2$s Posts by %3$s Feed' ),
- /* translators: 1: Blog name, 2: Separator (raquo), 3: Search query. */
+ /* translators: 1: Site name, 2: Separator (raquo), 3: Search query. */
'searchtitle' => __( '%1$s %2$s Search Results for “%3$s” Feed' ),
- /* translators: 1: Blog name, 2: Separator (raquo), 3: Post type name. */
+ /* translators: 1: Site name, 2: Separator (raquo), 3: Post type name. */
'posttypetitle' => __( '%1$s %2$s %3$s Feed' ),
);
@@ -3156,8 +3189,29 @@
/** This filter is documented in wp-includes/general-template.php */
$show_comments_feed = apply_filters( 'feed_links_show_comments_feed', true );
- if ( $show_comments_feed && ( comments_open() || pings_open() || $post->comment_count > 0 ) ) {
- $title = sprintf( $args['singletitle'], get_bloginfo( 'name' ), $args['separator'], the_title_attribute( array( 'echo' => false ) ) );
+ /**
+ * Filters whether to display the post comments feed link.
+ *
+ * This filter allows to enable or disable the feed link for a singular post
+ * in a way that is independent of {@see 'feed_links_show_comments_feed'}
+ * (which controls the global comments feed). The result of that filter
+ * is accepted as a parameter.
+ *
+ * @since 6.1.0
+ *
+ * @param bool $show_comments_feed Whether to display the post comments feed link. Defaults to
+ * the {@see 'feed_links_show_comments_feed'} filter result.
+ */
+ $show_post_comments_feed = apply_filters( 'feed_links_extra_show_post_comments_feed', $show_comments_feed );
+
+ if ( $show_post_comments_feed && ( comments_open() || pings_open() || $post->comment_count > 0 ) ) {
+ $title = sprintf(
+ $args['singletitle'],
+ get_bloginfo( 'name' ),
+ $args['separator'],
+ the_title_attribute( array( 'echo' => false ) )
+ );
+
$feed_link = get_post_comments_feed_link( $post->ID );
if ( $feed_link ) {
@@ -3165,69 +3219,173 @@
}
}
} elseif ( is_post_type_archive() ) {
- $post_type = get_query_var( 'post_type' );
- if ( is_array( $post_type ) ) {
- $post_type = reset( $post_type );
+ /**
+ * Filters whether to display the post type archive feed link.
+ *
+ * @since 6.1.0
+ *
+ * @param bool $show Whether to display the post type archive feed link. Default true.
+ */
+ $show_post_type_archive_feed = apply_filters( 'feed_links_extra_show_post_type_archive_feed', true );
+
+ if ( $show_post_type_archive_feed ) {
+ $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 );
+
+ $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 );
}
-
- $post_type_obj = get_post_type_object( $post_type );
- $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 );
} elseif ( is_category() ) {
- $term = get_queried_object();
-
- if ( $term ) {
- $title = sprintf( $args['cattitle'], get_bloginfo( 'name' ), $args['separator'], $term->name );
- $href = get_category_feed_link( $term->term_id );
+ /**
+ * Filters whether to display the category feed link.
+ *
+ * @since 6.1.0
+ *
+ * @param bool $show Whether to display the category feed link. Default true.
+ */
+ $show_category_feed = apply_filters( 'feed_links_extra_show_category_feed', true );
+
+ if ( $show_category_feed ) {
+ $term = get_queried_object();
+
+ if ( $term ) {
+ $title = sprintf(
+ $args['cattitle'],
+ get_bloginfo( 'name' ),
+ $args['separator'],
+ $term->name
+ );
+
+ $href = get_category_feed_link( $term->term_id );
+ }
}
} elseif ( is_tag() ) {
- $term = get_queried_object();
-
- if ( $term ) {
- $title = sprintf( $args['tagtitle'], get_bloginfo( 'name' ), $args['separator'], $term->name );
- $href = get_tag_feed_link( $term->term_id );
+ /**
+ * Filters whether to display the tag feed link.
+ *
+ * @since 6.1.0
+ *
+ * @param bool $show Whether to display the tag feed link. Default true.
+ */
+ $show_tag_feed = apply_filters( 'feed_links_extra_show_tag_feed', true );
+
+ if ( $show_tag_feed ) {
+ $term = get_queried_object();
+
+ if ( $term ) {
+ $title = sprintf(
+ $args['tagtitle'],
+ get_bloginfo( 'name' ),
+ $args['separator'],
+ $term->name
+ );
+
+ $href = get_tag_feed_link( $term->term_id );
+ }
}
} elseif ( is_tax() ) {
- $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 );
+ /**
+ * Filters whether to display the custom taxonomy feed link.
+ *
+ * @since 6.1.0
+ *
+ * @param bool $show Whether to display the custom taxonomy feed link. Default true.
+ */
+ $show_tax_feed = apply_filters( 'feed_links_extra_show_tax_feed', true );
+
+ if ( $show_tax_feed ) {
+ $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 );
+ }
}
} elseif ( is_author() ) {
- $author_id = (int) get_query_var( 'author' );
-
- $title = sprintf( $args['authortitle'], get_bloginfo( 'name' ), $args['separator'], get_the_author_meta( 'display_name', $author_id ) );
- $href = get_author_feed_link( $author_id );
+ /**
+ * Filters whether to display the author feed link.
+ *
+ * @since 6.1.0
+ *
+ * @param bool $show Whether to display the author feed link. Default true.
+ */
+ $show_author_feed = apply_filters( 'feed_links_extra_show_author_feed', true );
+
+ if ( $show_author_feed ) {
+ $author_id = (int) get_query_var( 'author' );
+
+ $title = sprintf(
+ $args['authortitle'],
+ get_bloginfo( 'name' ),
+ $args['separator'],
+ get_the_author_meta( 'display_name', $author_id )
+ );
+
+ $href = get_author_feed_link( $author_id );
+ }
} elseif ( is_search() ) {
- $title = sprintf( $args['searchtitle'], get_bloginfo( 'name' ), $args['separator'], get_search_query( false ) );
- $href = get_search_feed_link();
+ /**
+ * Filters whether to display the search results feed link.
+ *
+ * @since 6.1.0
+ *
+ * @param bool $show Whether to display the search results feed link. Default true.
+ */
+ $show_search_feed = apply_filters( 'feed_links_extra_show_search_feed', true );
+
+ if ( $show_search_feed ) {
+ $title = sprintf(
+ $args['searchtitle'],
+ get_bloginfo( 'name' ),
+ $args['separator'],
+ get_search_query( false )
+ );
+
+ $href = get_search_feed_link();
+ }
}
if ( isset( $title ) && isset( $href ) ) {
- echo '<link rel="alternate" type="' . feed_content_type() . '" title="' . esc_attr( $title ) . '" href="' . esc_url( $href ) . '" />' . "\n";
+ printf(
+ '<link rel="alternate" type="%s" title="%s" href="%s" />' . "\n",
+ feed_content_type(),
+ esc_attr( $title ),
+ esc_url( $href )
+ );
}
}
/**
- * Display the link to the Really Simple Discovery service endpoint.
+ * Displays the link to the Really Simple Discovery service endpoint.
*
* @link http://archipelago.phrasewise.com/rsd
* @since 2.0.0
*/
function rsd_link() {
- echo '<link rel="EditURI" type="application/rsd+xml" title="RSD" href="' . esc_url( site_url( 'xmlrpc.php?rsd', 'rpc' ) ) . '" />' . "\n";
-}
-
-/**
- * Display the link to the Windows Live Writer manifest file.
- *
- * @link https://msdn.microsoft.com/en-us/library/bb463265.aspx
- * @since 2.3.1
- */
-function wlwmanifest_link() {
- echo '<link rel="wlwmanifest" type="application/wlwmanifest+xml" href="' . includes_url( 'wlwmanifest.xml' ) . '" /> ' . "\n";
+ printf(
+ '<link rel="EditURI" type="application/rsd+xml" title="RSD" href="%s" />' . "\n",
+ esc_url( site_url( 'xmlrpc.php?rsd', 'rpc' ) )
+ );
}
/**
@@ -3249,7 +3407,7 @@
}
/**
- * Display site icon meta tags.
+ * Displays site icon meta tags.
*
* @since 4.3.0
*
@@ -3298,7 +3456,7 @@
/**
* Prints resource hints to browsers for pre-fetching, pre-rendering
- * and pre-connecting to web sites.
+ * and pre-connecting to websites.
*
* Gives hints to browsers to prefetch specific pages or render them
* in the background, to perform DNS lookups or to begin the connection
@@ -3316,18 +3474,11 @@
'prerender' => array(),
);
- /*
- * 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 */
- $hints['dns-prefetch'][] = apply_filters( 'emoji_svg_url', 'https://s.w.org/images/core/emoji/13.0.0/svg/' );
-
foreach ( $hints as $relation_type => $urls ) {
$unique_urls = array();
/**
- * Filters domains and URLs for resource hints of relation type.
+ * Filters domains and URLs for resource hints of the given relation type.
*
* @since 4.6.0
* @since 4.7.0 The `$urls` parameter accepts arrays of specific HTML attributes
@@ -3347,8 +3498,8 @@
* @type string $type Type of the resource (`text/html`, `text/css`, etc).
* }
* }
- * @param string $relation_type The relation type the URLs are printed for,
- * e.g. 'preconnect' or 'prerender'.
+ * @param string $relation_type The relation type the URLs are printed for. One of
+ * 'dns-prefetch', 'preconnect', 'prefetch', or 'prerender'.
*/
$urls = apply_filters( 'wp_resource_hints', $urls, $relation_type );
@@ -3423,10 +3574,129 @@
}
/**
+ * Prints resource preloads directives to browsers.
+ *
+ * Gives directive to browsers to preload specific resources that website will
+ * need very soon, this ensures that they are available earlier and are less
+ * likely to block the page's render. Preload directives should not be used for
+ * non-render-blocking elements, as then they would compete with the
+ * render-blocking ones, slowing down the render.
+ *
+ * These performance improving indicators work by using `<link rel="preload">`.
+ *
+ * @link https://developer.mozilla.org/en-US/docs/Web/HTML/Link_types/preload
+ * @link https://web.dev/preload-responsive-images/
+ *
+ * @since 6.1.0
+ */
+function wp_preload_resources() {
+ /**
+ * Filters domains and URLs for resource preloads.
+ *
+ * @since 6.1.0
+ * @since 6.6.0 Added the `$fetchpriority` attribute.
+ *
+ * @param array $preload_resources {
+ * Array of resources and their attributes, or URLs to print for resource preloads.
+ *
+ * @type array ...$0 {
+ * Array of resource attributes.
+ *
+ * @type string $href URL to include in resource preloads. Required.
+ * @type string $as How the browser should treat the resource
+ * (`script`, `style`, `image`, `document`, etc).
+ * @type string $crossorigin Indicates the CORS policy of the specified resource.
+ * @type string $type Type of the resource (`text/html`, `text/css`, etc).
+ * @type string $media Accepts media types or media queries. Allows responsive preloading.
+ * @type string $imagesizes Responsive source size to the source Set.
+ * @type string $imagesrcset Responsive image sources to the source set.
+ * @type string $fetchpriority Fetchpriority value for the resource.
+ * }
+ * }
+ */
+ $preload_resources = apply_filters( 'wp_preload_resources', array() );
+
+ if ( ! is_array( $preload_resources ) ) {
+ return;
+ }
+
+ $unique_resources = array();
+
+ // Parse the complete resource list and extract unique resources.
+ foreach ( $preload_resources as $resource ) {
+ if ( ! is_array( $resource ) ) {
+ continue;
+ }
+
+ $attributes = $resource;
+ if ( isset( $resource['href'] ) ) {
+ $href = $resource['href'];
+ if ( isset( $unique_resources[ $href ] ) ) {
+ continue;
+ }
+ $unique_resources[ $href ] = $attributes;
+ // Media can use imagesrcset and not href.
+ } elseif ( ( 'image' === $resource['as'] ) &&
+ ( isset( $resource['imagesrcset'] ) || isset( $resource['imagesizes'] ) )
+ ) {
+ if ( isset( $unique_resources[ $resource['imagesrcset'] ] ) ) {
+ continue;
+ }
+ $unique_resources[ $resource['imagesrcset'] ] = $attributes;
+ } else {
+ continue;
+ }
+ }
+
+ // Build and output the HTML for each unique resource.
+ foreach ( $unique_resources as $unique_resource ) {
+ $html = '';
+
+ foreach ( $unique_resource as $resource_key => $resource_value ) {
+ if ( ! is_scalar( $resource_value ) ) {
+ continue;
+ }
+
+ // Ignore non-supported attributes.
+ $non_supported_attributes = array( 'as', 'crossorigin', 'href', 'imagesrcset', 'imagesizes', 'type', 'media', 'fetchpriority' );
+ if ( ! in_array( $resource_key, $non_supported_attributes, true ) && ! is_numeric( $resource_key ) ) {
+ continue;
+ }
+
+ // imagesrcset only usable when preloading image, ignore otherwise.
+ if ( ( 'imagesrcset' === $resource_key ) && ( ! isset( $unique_resource['as'] ) || ( 'image' !== $unique_resource['as'] ) ) ) {
+ continue;
+ }
+
+ // imagesizes only usable when preloading image and imagesrcset present, ignore otherwise.
+ if ( ( 'imagesizes' === $resource_key ) &&
+ ( ! isset( $unique_resource['as'] ) || ( 'image' !== $unique_resource['as'] ) || ! isset( $unique_resource['imagesrcset'] ) )
+ ) {
+ continue;
+ }
+
+ $resource_value = ( 'href' === $resource_key ) ? esc_url( $resource_value, array( 'http', 'https' ) ) : esc_attr( $resource_value );
+
+ if ( ! is_string( $resource_key ) ) {
+ $html .= " $resource_value";
+ } else {
+ $html .= " $resource_key='$resource_value'";
+ }
+ }
+ $html = trim( $html );
+
+ printf( "<link rel='preload' %s />\n", $html );
+ }
+}
+
+/**
* Retrieves a list of unique hosts of all enqueued scripts and styles.
*
* @since 4.6.0
*
+ * @global WP_Scripts $wp_scripts The WP_Scripts object for printing scripts.
+ * @global WP_Styles $wp_styles The WP_Styles object for printing styles.
+ *
* @return string[] A list of unique hosts of enqueued scripts and styles.
*/
function wp_dependencies_unique_hosts() {
@@ -3458,7 +3728,7 @@
}
/**
- * Whether the user can access the visual editor.
+ * Determines whether the user can access the visual editor.
*
* Checks if the user can access the visual editor and that it's supported by the user's browser.
*
@@ -3484,7 +3754,7 @@
if ( $is_safari ) {
$wp_rich_edit = ! wp_is_mobile() || ( preg_match( '!AppleWebKit/(\d+)!', $_SERVER['HTTP_USER_AGENT'], $match ) && (int) $match[1] >= 534 );
} elseif ( $is_IE ) {
- $wp_rich_edit = ( strpos( $_SERVER['HTTP_USER_AGENT'], 'Trident/7.0;' ) !== false );
+ $wp_rich_edit = str_contains( $_SERVER['HTTP_USER_AGENT'], 'Trident/7.0;' );
} elseif ( $is_gecko || $is_chrome || $is_edge || ( $is_opera && ! wp_is_mobile() ) ) {
$wp_rich_edit = true;
}
@@ -3502,14 +3772,14 @@
}
/**
- * Find out which editor should be displayed by default.
- *
- * Works out which of the two editors to display as the current editor for a
+ * Finds out which editor should be displayed by default.
+ *
+ * Works out which of the editors to display as the current editor for a
* user. The 'html' setting is for the "Text" editor tab.
*
* @since 2.5.0
*
- * @return string Either 'tinymce', or 'html', or 'test'
+ * @return string Either 'tinymce', 'html', or 'test'
*/
function wp_default_editor() {
$r = user_can_richedit() ? 'tinymce' : 'html'; // Defaults.
@@ -3574,7 +3844,7 @@
}
/**
- * Enqueue assets needed by the code editor for the given settings.
+ * Enqueues assets needed by the code editor for the given settings.
*
* @since 4.9.0
*
@@ -3667,7 +3937,7 @@
}
/**
- * Generate and return code editor settings.
+ * Generates and returns code editor settings.
*
* @since 5.0.0
*
@@ -3767,7 +4037,7 @@
if ( 'application/x-patch' === $type || 'text/x-patch' === $type ) {
$type = 'text/x-diff';
}
- } elseif ( isset( $args['file'] ) && false !== strpos( basename( $args['file'] ), '.' ) ) {
+ } elseif ( isset( $args['file'] ) && str_contains( basename( $args['file'] ), '.' ) ) {
$extension = strtolower( pathinfo( $args['file'], PATHINFO_EXTENSION ) );
foreach ( wp_get_mime_types() as $exts => $mime ) {
if ( preg_match( '!^(' . $exts . ')$!i', $extension ) ) {
@@ -3903,7 +4173,7 @@
'matchBrackets' => true,
)
);
- } elseif ( false !== strpos( $type, 'json' ) ) {
+ } elseif ( str_contains( $type, 'json' ) ) {
$settings['codemirror'] = array_merge(
$settings['codemirror'],
array(
@@ -3920,7 +4190,7 @@
} else {
$settings['codemirror']['mode']['json'] = true;
}
- } elseif ( false !== strpos( $type, 'jsx' ) ) {
+ } elseif ( str_contains( $type, 'jsx' ) ) {
$settings['codemirror'] = array_merge(
$settings['codemirror'],
array(
@@ -3966,7 +4236,7 @@
'matchBrackets' => true,
)
);
- } elseif ( false !== strpos( $type, 'xml' ) ) {
+ } elseif ( str_contains( $type, 'xml' ) ) {
$settings['codemirror'] = array_merge(
$settings['codemirror'],
array(
@@ -4082,6 +4352,7 @@
* @since 4.3.0
*
* @param string $doctype Optional. The type of HTML document. Accepts 'xhtml' or 'html'. Default 'html'.
+ * @return string A space-separated list of language attributes.
*/
function get_language_attributes( $doctype = 'html' ) {
$attributes = array();
@@ -4197,8 +4468,8 @@
* 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.
- * @type bool $prev_text The previous page text. Default '« Previous'.
- * @type bool $next_text The next page text. Default 'Next »'.
+ * @type string $prev_text The previous page text. Default '« Previous'.
+ * @type string $next_text The next page text. Default 'Next »'.
* @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.
@@ -4206,8 +4477,8 @@
* @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.
* }
- * @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.
+ * @return string|string[]|void String of page links or array of page links, depending on 'type' argument.
+ * Void if total number of pages is less than 2.
*/
function paginate_links( $args = '' ) {
global $wp_query, $wp_rewrite;
@@ -4553,13 +4824,12 @@
'current' => '#fff',
)
);
-
}
/**
* Displays the URL of a WordPress admin CSS file.
*
- * @see WP_Styles::_css_href and its {@see 'style_loader_src'} filter.
+ * @see WP_Styles::_css_href() and its {@see 'style_loader_src'} filter.
*
* @since 2.3.0
*
@@ -4607,7 +4877,7 @@
*/
function wp_admin_css( $file = 'wp-admin', $force_echo = false ) {
// For backward compatibility.
- $handle = 0 === strpos( $file, 'css/' ) ? substr( $file, 4 ) : $file;
+ $handle = str_starts_with( $file, 'css/' ) ? substr( $file, 4 ) : $file;
if ( wp_styles()->query( $handle ) ) {
if ( $force_echo || did_action( 'wp_print_styles' ) ) {
@@ -4686,7 +4956,7 @@
}
/**
- * Display the generator XML or Comment for RSS, ATOM, etc.
+ * Displays the generator XML or Comment for RSS, ATOM, etc.
*
* Returns the correct generator type for the requested output format. Allows
* for a plugin to filter generators overall the {@see 'the_generator'} filter.
@@ -4759,10 +5029,10 @@
$gen = '<generator uri="https://wordpress.org/" version="' . esc_attr( get_bloginfo_rss( 'version' ) ) . '">WordPress</generator>';
break;
case 'rss2':
- $gen = '<generator>' . esc_url_raw( 'https://wordpress.org/?v=' . get_bloginfo_rss( 'version' ) ) . '</generator>';
+ $gen = '<generator>' . sanitize_url( 'https://wordpress.org/?v=' . get_bloginfo_rss( 'version' ) ) . '</generator>';
break;
case 'rdf':
- $gen = '<admin:generatorAgent rdf:resource="' . esc_url_raw( 'https://wordpress.org/?v=' . get_bloginfo_rss( 'version' ) ) . '" />';
+ $gen = '<admin:generatorAgent rdf:resource="' . sanitize_url( 'https://wordpress.org/?v=' . get_bloginfo_rss( 'version' ) ) . '" />';
break;
case 'comment':
$gen = '<!-- generator="WordPress/' . esc_attr( get_bloginfo( 'version' ) ) . '" -->';
@@ -4806,12 +5076,12 @@
* @param mixed $checked One of the values to compare.
* @param mixed $current Optional. The other value to compare if not just true.
* Default true.
- * @param bool $echo Optional. Whether to echo or just return the string.
+ * @param bool $display Optional. Whether to echo or just return the string.
* Default true.
* @return string HTML attribute or empty string.
*/
-function checked( $checked, $current = true, $echo = true ) {
- return __checked_selected_helper( $checked, $current, $echo, 'checked' );
+function checked( $checked, $current = true, $display = true ) {
+ return __checked_selected_helper( $checked, $current, $display, 'checked' );
}
/**
@@ -4824,12 +5094,12 @@
* @param mixed $selected One of the values to compare.
* @param mixed $current Optional. The other value to compare if not just true.
* Default true.
- * @param bool $echo Optional. Whether to echo or just return the string.
+ * @param bool $display Optional. Whether to echo or just return the string.
* Default true.
* @return string HTML attribute or empty string.
*/
-function selected( $selected, $current = true, $echo = true ) {
- return __checked_selected_helper( $selected, $current, $echo, 'selected' );
+function selected( $selected, $current = true, $display = true ) {
+ return __checked_selected_helper( $selected, $current, $display, 'selected' );
}
/**
@@ -4842,12 +5112,12 @@
* @param mixed $disabled One of the values to compare.
* @param mixed $current Optional. The other value to compare if not just true.
* Default true.
- * @param bool $echo Optional. Whether to echo or just return the string.
+ * @param bool $display Optional. Whether to echo or just return the string.
* Default true.
* @return string HTML attribute or empty string.
*/
-function disabled( $disabled, $current = true, $echo = true ) {
- return __checked_selected_helper( $disabled, $current, $echo, 'disabled' );
+function disabled( $disabled, $current = true, $display = true ) {
+ return __checked_selected_helper( $disabled, $current, $display, 'disabled' );
}
/**
@@ -4857,15 +5127,15 @@
*
* @since 5.9.0
*
- * @param mixed $readonly One of the values to compare.
- * @param mixed $current Optional. The other value to compare if not just true.
- * Default true.
- * @param bool $echo Optional. Whether to echo or just return the string.
- * Default true.
+ * @param mixed $readonly_value One of the values to compare.
+ * @param mixed $current Optional. The other value to compare if not just true.
+ * Default true.
+ * @param bool $display Optional. Whether to echo or just return the string.
+ * Default true.
* @return string HTML attribute or empty string.
*/
-function wp_readonly( $readonly, $current = true, $echo = true ) {
- return __checked_selected_helper( $readonly, $current, $echo, 'readonly' );
+function wp_readonly( $readonly_value, $current = true, $display = true ) {
+ return __checked_selected_helper( $readonly_value, $current, $display, 'readonly' );
}
/*
@@ -4888,18 +5158,18 @@
*
* @param mixed $helper One of the values to compare.
* @param mixed $current The other value to compare if not just true.
- * @param bool $echo Whether to echo or just return the string.
+ * @param bool $display Whether to echo or just return the string.
* @param string $type The type of checked|selected|disabled|readonly we are doing.
* @return string HTML attribute or empty string.
*/
-function __checked_selected_helper( $helper, $current, $echo, $type ) { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName.FunctionDoubleUnderscore,PHPCompatibility.FunctionNameRestrictions.ReservedFunctionNames.FunctionDoubleUnderscore
+function __checked_selected_helper( $helper, $current, $display, $type ) { // phpcs:ignore WordPress.NamingConventions.ValidFunctionName.FunctionDoubleUnderscore,PHPCompatibility.FunctionNameRestrictions.ReservedFunctionNames.FunctionDoubleUnderscore
if ( (string) $helper === (string) $current ) {
$result = " $type='$type'";
} else {
$result = '';
}
- if ( $echo ) {
+ if ( $display ) {
echo $result;
}
@@ -4907,9 +5177,55 @@
}
/**
- * Default settings for heartbeat
- *
- * Outputs the nonce used in the heartbeat XHR
+ * Assigns a visual indicator for required form fields.
+ *
+ * @since 6.1.0
+ *
+ * @return string Indicator glyph wrapped in a `span` tag.
+ */
+function wp_required_field_indicator() {
+ /* translators: Character to identify required form fields. */
+ $glyph = __( '*' );
+ $indicator = '<span class="required">' . esc_html( $glyph ) . '</span>';
+
+ /**
+ * Filters the markup for a visual indicator of required form fields.
+ *
+ * @since 6.1.0
+ *
+ * @param string $indicator Markup for the indicator element.
+ */
+ return apply_filters( 'wp_required_field_indicator', $indicator );
+}
+
+/**
+ * Creates a message to explain required form fields.
+ *
+ * @since 6.1.0
+ *
+ * @return string Message text and glyph wrapped in a `span` tag.
+ */
+function wp_required_field_message() {
+ $message = sprintf(
+ '<span class="required-field-message">%s</span>',
+ /* translators: %s: Asterisk symbol (*). */
+ sprintf( __( 'Required fields are marked %s' ), wp_required_field_indicator() )
+ );
+
+ /**
+ * Filters the message to explain required form fields.
+ *
+ * @since 6.1.0
+ *
+ * @param string $message Message text and glyph wrapped in a `span` tag.
+ */
+ return apply_filters( 'wp_required_field_message', $message );
+}
+
+/**
+ * Default settings for heartbeat.
+ *
+ * Outputs the nonce used in the heartbeat XHR.
*
* @since 3.6.0
*