WordPress/wp-includes/theme-templates.php

232 lines
6.1 KiB
PHP
Raw Permalink Normal View History

<?php
/**
* Sets a custom slug when creating auto-draft template parts.
*
* This is only needed for auto-drafts created by the regular WP editor.
* If this page is to be removed, this will not be necessary.
*
* @since 5.9.0
*
* @param int $post_id Post ID.
*/
function wp_set_unique_slug_on_create_template_part( $post_id ) {
$post = get_post( $post_id );
if ( 'auto-draft' !== $post->post_status ) {
return;
}
if ( ! $post->post_name ) {
wp_update_post(
array(
'ID' => $post_id,
'post_name' => 'custom_slug_' . uniqid(),
)
);
}
$terms = get_the_terms( $post_id, 'wp_theme' );
if ( ! is_array( $terms ) || ! count( $terms ) ) {
wp_set_post_terms( $post_id, get_stylesheet(), 'wp_theme' );
}
}
/**
* Generates a unique slug for templates.
*
* @access private
* @since 5.8.0
*
* @param string $override_slug The filtered value of the slug (starts as `null` from apply_filter).
* @param string $slug The original/un-filtered slug (post_name).
Coding Standards: Rename `$post_ID` variable to `$post_id` in various files. The `$post_ID` variable is [https://github.com/WordPress/WordPress-Coding-Standards/blob/546f59c67854589bb8f6b49a30e642e75ff419ad/WordPress/Sniffs/NamingConventions/ValidVariableNameSniff.php#L54 technically allowed in WPCS], as there is a global of the same name that needs to remain for backward compatibility. However, this name is mostly a remnant of legacy code, and switching to `$post_id` where appropriate brings more consistency with the rest of core. Additionally, this commit resolves a few WPCS warnings in core: {{{ Variable "$post_IDs" is not in valid snake_case format }}} This affects: * Function parameters in: * `add_meta()` * `post_preview()` * `WP_Embed::delete_oembed_caches()` * `WP_Embed::cache_oembed()` * `wp_get_post_cats()` * `wp_set_post_cats()` * `wp_unique_post_slug()` * `wp_set_post_categories()` * `wp_check_post_hierarchy_for_loops()` * `wp_add_trashed_suffix_to_post_name_for_trashed_posts()` * `wp_filter_wp_template_unique_post_slug()` * `wp_xmlrpc_server::add_enclosure_if_new()` * `wp_xmlrpc_server::attach_uploads()` * `wp_xmlrpc_server::mt_getTrackbackPings()` * Internal variables in: * `wp_ajax_inline_save()` * `wp_ajax_set_post_thumbnail()` * `wp_ajax_get_post_thumbnail_html()` * `edit_post()` * `bulk_edit_posts()` * `wp_write_post()` * `WP_Embed::shortcode()` * `wp_insert_post()` * `wp_xmlrpc_server::_insert_post()` * `wp_xmlrpc_server::blogger_getPost()` * `wp_xmlrpc_server::blogger_newPost()` * `wp_xmlrpc_server::blogger_editPost()` * `wp_xmlrpc_server::blogger_deletePost()` * `wp_xmlrpc_server::mw_getPost()` * `wp_xmlrpc_server::mw_newPost()` * `wp_xmlrpc_server::mw_editPost()` * `wp_xmlrpc_server::mt_getPostCategories()` * `wp_xmlrpc_server::mt_setPostCategories()` * `wp_xmlrpc_server::mt_publishPost()` * `wp_xmlrpc_server::pingback_ping()` * Hook parameters in: * `oembed_ttl` * `embed_oembed_html` * `wp_insert_post_parent` * `add_trashed_suffix_to_trashed_posts` * `pre_post_update` * `edit_attachment` * `attachment_updated` * `add_attachment` * `edit_post_{$post->post_type}` * `edit_post` * `post_updated` * `save_post_{$post->post_type}` * `save_post` * `wp_insert_post` * `pre_wp_unique_post_slug` * `wp_unique_post_slug` * `xmlrpc_call_success_blogger_newPost` * `xmlrpc_call_success_blogger_editPost` * `xmlrpc_call_success_blogger_deletePost` * `xmlrpc_call_success_mw_newPost` * `xmlrpc_call_success_mw_editPost` Note: The name change only affects variable names and DocBlocks. The change does not affect the `$post_ID` global still used in a few places. Follow-up to [51399], [52958], [53723], [53729], [55190], [55308], [55334]. Props mahekkalola, tanjimtc71, SergeyBiryukov. Fixes #57692. Built from https://develop.svn.wordpress.org/trunk@55365 git-svn-id: http://core.svn.wordpress.org/trunk@54898 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-02-19 10:05:22 -05:00
* @param int $post_id Post ID.
* @param string $post_status No uniqueness checks are made if the post is still draft or pending.
* @param string $post_type Post type.
* @return string The original, desired slug.
*/
Coding Standards: Rename `$post_ID` variable to `$post_id` in various files. The `$post_ID` variable is [https://github.com/WordPress/WordPress-Coding-Standards/blob/546f59c67854589bb8f6b49a30e642e75ff419ad/WordPress/Sniffs/NamingConventions/ValidVariableNameSniff.php#L54 technically allowed in WPCS], as there is a global of the same name that needs to remain for backward compatibility. However, this name is mostly a remnant of legacy code, and switching to `$post_id` where appropriate brings more consistency with the rest of core. Additionally, this commit resolves a few WPCS warnings in core: {{{ Variable "$post_IDs" is not in valid snake_case format }}} This affects: * Function parameters in: * `add_meta()` * `post_preview()` * `WP_Embed::delete_oembed_caches()` * `WP_Embed::cache_oembed()` * `wp_get_post_cats()` * `wp_set_post_cats()` * `wp_unique_post_slug()` * `wp_set_post_categories()` * `wp_check_post_hierarchy_for_loops()` * `wp_add_trashed_suffix_to_post_name_for_trashed_posts()` * `wp_filter_wp_template_unique_post_slug()` * `wp_xmlrpc_server::add_enclosure_if_new()` * `wp_xmlrpc_server::attach_uploads()` * `wp_xmlrpc_server::mt_getTrackbackPings()` * Internal variables in: * `wp_ajax_inline_save()` * `wp_ajax_set_post_thumbnail()` * `wp_ajax_get_post_thumbnail_html()` * `edit_post()` * `bulk_edit_posts()` * `wp_write_post()` * `WP_Embed::shortcode()` * `wp_insert_post()` * `wp_xmlrpc_server::_insert_post()` * `wp_xmlrpc_server::blogger_getPost()` * `wp_xmlrpc_server::blogger_newPost()` * `wp_xmlrpc_server::blogger_editPost()` * `wp_xmlrpc_server::blogger_deletePost()` * `wp_xmlrpc_server::mw_getPost()` * `wp_xmlrpc_server::mw_newPost()` * `wp_xmlrpc_server::mw_editPost()` * `wp_xmlrpc_server::mt_getPostCategories()` * `wp_xmlrpc_server::mt_setPostCategories()` * `wp_xmlrpc_server::mt_publishPost()` * `wp_xmlrpc_server::pingback_ping()` * Hook parameters in: * `oembed_ttl` * `embed_oembed_html` * `wp_insert_post_parent` * `add_trashed_suffix_to_trashed_posts` * `pre_post_update` * `edit_attachment` * `attachment_updated` * `add_attachment` * `edit_post_{$post->post_type}` * `edit_post` * `post_updated` * `save_post_{$post->post_type}` * `save_post` * `wp_insert_post` * `pre_wp_unique_post_slug` * `wp_unique_post_slug` * `xmlrpc_call_success_blogger_newPost` * `xmlrpc_call_success_blogger_editPost` * `xmlrpc_call_success_blogger_deletePost` * `xmlrpc_call_success_mw_newPost` * `xmlrpc_call_success_mw_editPost` Note: The name change only affects variable names and DocBlocks. The change does not affect the `$post_ID` global still used in a few places. Follow-up to [51399], [52958], [53723], [53729], [55190], [55308], [55334]. Props mahekkalola, tanjimtc71, SergeyBiryukov. Fixes #57692. Built from https://develop.svn.wordpress.org/trunk@55365 git-svn-id: http://core.svn.wordpress.org/trunk@54898 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-02-19 10:05:22 -05:00
function wp_filter_wp_template_unique_post_slug( $override_slug, $slug, $post_id, $post_status, $post_type ) {
if ( 'wp_template' !== $post_type && 'wp_template_part' !== $post_type ) {
return $override_slug;
}
if ( ! $override_slug ) {
$override_slug = $slug;
}
/*
* Template slugs must be unique within the same theme.
* TODO - Figure out how to update this to work for a multi-theme environment.
* Unfortunately using `get_the_terms()` for the 'wp-theme' term does not work
* in the case of new entities since is too early in the process to have been saved
* to the entity. So for now we use the currently activated theme for creation.
*/
$theme = get_stylesheet();
Coding Standards: Rename `$post_ID` variable to `$post_id` in various files. The `$post_ID` variable is [https://github.com/WordPress/WordPress-Coding-Standards/blob/546f59c67854589bb8f6b49a30e642e75ff419ad/WordPress/Sniffs/NamingConventions/ValidVariableNameSniff.php#L54 technically allowed in WPCS], as there is a global of the same name that needs to remain for backward compatibility. However, this name is mostly a remnant of legacy code, and switching to `$post_id` where appropriate brings more consistency with the rest of core. Additionally, this commit resolves a few WPCS warnings in core: {{{ Variable "$post_IDs" is not in valid snake_case format }}} This affects: * Function parameters in: * `add_meta()` * `post_preview()` * `WP_Embed::delete_oembed_caches()` * `WP_Embed::cache_oembed()` * `wp_get_post_cats()` * `wp_set_post_cats()` * `wp_unique_post_slug()` * `wp_set_post_categories()` * `wp_check_post_hierarchy_for_loops()` * `wp_add_trashed_suffix_to_post_name_for_trashed_posts()` * `wp_filter_wp_template_unique_post_slug()` * `wp_xmlrpc_server::add_enclosure_if_new()` * `wp_xmlrpc_server::attach_uploads()` * `wp_xmlrpc_server::mt_getTrackbackPings()` * Internal variables in: * `wp_ajax_inline_save()` * `wp_ajax_set_post_thumbnail()` * `wp_ajax_get_post_thumbnail_html()` * `edit_post()` * `bulk_edit_posts()` * `wp_write_post()` * `WP_Embed::shortcode()` * `wp_insert_post()` * `wp_xmlrpc_server::_insert_post()` * `wp_xmlrpc_server::blogger_getPost()` * `wp_xmlrpc_server::blogger_newPost()` * `wp_xmlrpc_server::blogger_editPost()` * `wp_xmlrpc_server::blogger_deletePost()` * `wp_xmlrpc_server::mw_getPost()` * `wp_xmlrpc_server::mw_newPost()` * `wp_xmlrpc_server::mw_editPost()` * `wp_xmlrpc_server::mt_getPostCategories()` * `wp_xmlrpc_server::mt_setPostCategories()` * `wp_xmlrpc_server::mt_publishPost()` * `wp_xmlrpc_server::pingback_ping()` * Hook parameters in: * `oembed_ttl` * `embed_oembed_html` * `wp_insert_post_parent` * `add_trashed_suffix_to_trashed_posts` * `pre_post_update` * `edit_attachment` * `attachment_updated` * `add_attachment` * `edit_post_{$post->post_type}` * `edit_post` * `post_updated` * `save_post_{$post->post_type}` * `save_post` * `wp_insert_post` * `pre_wp_unique_post_slug` * `wp_unique_post_slug` * `xmlrpc_call_success_blogger_newPost` * `xmlrpc_call_success_blogger_editPost` * `xmlrpc_call_success_blogger_deletePost` * `xmlrpc_call_success_mw_newPost` * `xmlrpc_call_success_mw_editPost` Note: The name change only affects variable names and DocBlocks. The change does not affect the `$post_ID` global still used in a few places. Follow-up to [51399], [52958], [53723], [53729], [55190], [55308], [55334]. Props mahekkalola, tanjimtc71, SergeyBiryukov. Fixes #57692. Built from https://develop.svn.wordpress.org/trunk@55365 git-svn-id: http://core.svn.wordpress.org/trunk@54898 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-02-19 10:05:22 -05:00
$terms = get_the_terms( $post_id, 'wp_theme' );
if ( $terms && ! is_wp_error( $terms ) ) {
$theme = $terms[0]->name;
}
$check_query_args = array(
'post_name__in' => array( $override_slug ),
'post_type' => $post_type,
'posts_per_page' => 1,
'no_found_rows' => true,
Coding Standards: Rename `$post_ID` variable to `$post_id` in various files. The `$post_ID` variable is [https://github.com/WordPress/WordPress-Coding-Standards/blob/546f59c67854589bb8f6b49a30e642e75ff419ad/WordPress/Sniffs/NamingConventions/ValidVariableNameSniff.php#L54 technically allowed in WPCS], as there is a global of the same name that needs to remain for backward compatibility. However, this name is mostly a remnant of legacy code, and switching to `$post_id` where appropriate brings more consistency with the rest of core. Additionally, this commit resolves a few WPCS warnings in core: {{{ Variable "$post_IDs" is not in valid snake_case format }}} This affects: * Function parameters in: * `add_meta()` * `post_preview()` * `WP_Embed::delete_oembed_caches()` * `WP_Embed::cache_oembed()` * `wp_get_post_cats()` * `wp_set_post_cats()` * `wp_unique_post_slug()` * `wp_set_post_categories()` * `wp_check_post_hierarchy_for_loops()` * `wp_add_trashed_suffix_to_post_name_for_trashed_posts()` * `wp_filter_wp_template_unique_post_slug()` * `wp_xmlrpc_server::add_enclosure_if_new()` * `wp_xmlrpc_server::attach_uploads()` * `wp_xmlrpc_server::mt_getTrackbackPings()` * Internal variables in: * `wp_ajax_inline_save()` * `wp_ajax_set_post_thumbnail()` * `wp_ajax_get_post_thumbnail_html()` * `edit_post()` * `bulk_edit_posts()` * `wp_write_post()` * `WP_Embed::shortcode()` * `wp_insert_post()` * `wp_xmlrpc_server::_insert_post()` * `wp_xmlrpc_server::blogger_getPost()` * `wp_xmlrpc_server::blogger_newPost()` * `wp_xmlrpc_server::blogger_editPost()` * `wp_xmlrpc_server::blogger_deletePost()` * `wp_xmlrpc_server::mw_getPost()` * `wp_xmlrpc_server::mw_newPost()` * `wp_xmlrpc_server::mw_editPost()` * `wp_xmlrpc_server::mt_getPostCategories()` * `wp_xmlrpc_server::mt_setPostCategories()` * `wp_xmlrpc_server::mt_publishPost()` * `wp_xmlrpc_server::pingback_ping()` * Hook parameters in: * `oembed_ttl` * `embed_oembed_html` * `wp_insert_post_parent` * `add_trashed_suffix_to_trashed_posts` * `pre_post_update` * `edit_attachment` * `attachment_updated` * `add_attachment` * `edit_post_{$post->post_type}` * `edit_post` * `post_updated` * `save_post_{$post->post_type}` * `save_post` * `wp_insert_post` * `pre_wp_unique_post_slug` * `wp_unique_post_slug` * `xmlrpc_call_success_blogger_newPost` * `xmlrpc_call_success_blogger_editPost` * `xmlrpc_call_success_blogger_deletePost` * `xmlrpc_call_success_mw_newPost` * `xmlrpc_call_success_mw_editPost` Note: The name change only affects variable names and DocBlocks. The change does not affect the `$post_ID` global still used in a few places. Follow-up to [51399], [52958], [53723], [53729], [55190], [55308], [55334]. Props mahekkalola, tanjimtc71, SergeyBiryukov. Fixes #57692. Built from https://develop.svn.wordpress.org/trunk@55365 git-svn-id: http://core.svn.wordpress.org/trunk@54898 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-02-19 10:05:22 -05:00
'post__not_in' => array( $post_id ),
'tax_query' => array(
array(
'taxonomy' => 'wp_theme',
'field' => 'name',
'terms' => $theme,
),
),
);
$check_query = new WP_Query( $check_query_args );
$posts = $check_query->posts;
if ( count( $posts ) > 0 ) {
$suffix = 2;
do {
$query_args = $check_query_args;
$alt_post_name = _truncate_post_slug( $override_slug, 200 - ( strlen( $suffix ) + 1 ) ) . "-$suffix";
$query_args['post_name__in'] = array( $alt_post_name );
$query = new WP_Query( $query_args );
++$suffix;
} while ( count( $query->posts ) > 0 );
$override_slug = $alt_post_name;
}
return $override_slug;
}
/**
* Enqueues the skip-link script & styles.
*
* @access private
* @since 6.4.0
*
* @global string $_wp_current_template_content
*/
function wp_enqueue_block_template_skip_link() {
global $_wp_current_template_content;
// Back-compat for plugins that disable functionality by unhooking this action.
if ( ! has_action( 'wp_footer', 'the_block_template_skip_link' ) ) {
return;
}
remove_action( 'wp_footer', 'the_block_template_skip_link' );
Block Editor: Update the WordPress packages with the fixes for 5.8 beta 2. This includes: **Various** - Fix multi selection for nested blocks https://github.com/WordPress/gutenberg/pull/32536 - Consistently show the drop indicator while dragging blocks https://github.com/WordPress/gutenberg/pull/31896 - Fix horizontal drop indicator https://github.com/WordPress/gutenberg/pull/32589 - Fix Safari flickering issue https://github.com/WordPress/gutenberg/pull/32581 - Silence useSelect zombie bug errors https://github.com/WordPress/gutenberg/pull/32088 **Template Editor** - Clarify the template creation modal https://github.com/WordPress/gutenberg/pull/32427 - Only add skip links for block templates https://github.com/WordPress/gutenberg/pull/32451 **Widgets Editor** - Add block breadcrumb https://github.com/WordPress/gutenberg/pull/32498 https://github.com/WordPress/gutenberg/pull/32528 https://github.com/WordPress/gutenberg/pull/32569 - Saved deleted and restored widgets. https://github.com/WordPress/gutenberg/pull/32534 - Fix unsaved changes detection https://github.com/WordPress/gutenberg/pull/32573 - Fix button spacing in the header https://github.com/WordPress/gutenberg/pull/32585 - Avoid extra undo levels https://github.com/WordPress/gutenberg/pull/32572 - Move Legacy Widget block to the `@wordpress/widgets` package https://github.com/WordPress/gutenberg/pull/32501 - Fix Social Links color inheritance https://github.com/WordPress/gutenberg/pull/32625 - Use Button appender https://github.com/WordPress/gutenberg/pull/32580 **Global Styles (theme.json)** - Separate the presets per origin in the block editor settings https://github.com/WordPress/gutenberg/pull/32358 https://github.com/WordPress/gutenberg/pull/32622 - Use CSS Custom Properties for the preset styles https://github.com/WordPress/gutenberg/pull/32627 **Performance** - Remove is-typing classname to improve typing performance https://github.com/WordPress/gutenberg/pull/32567 Props nosolosw, jorgefilipecosta, aristath, ntsekouras, peterwilsoncc, mcsf. See #53397. Built from https://develop.svn.wordpress.org/trunk@51149 git-svn-id: http://core.svn.wordpress.org/trunk@50758 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2021-06-15 04:52:30 -04:00
// Early exit if not a block theme.
if ( ! current_theme_supports( 'block-templates' ) ) {
return;
}
Block Editor: Update the WordPress packages with the fixes for 5.8 beta 2. This includes: **Various** - Fix multi selection for nested blocks https://github.com/WordPress/gutenberg/pull/32536 - Consistently show the drop indicator while dragging blocks https://github.com/WordPress/gutenberg/pull/31896 - Fix horizontal drop indicator https://github.com/WordPress/gutenberg/pull/32589 - Fix Safari flickering issue https://github.com/WordPress/gutenberg/pull/32581 - Silence useSelect zombie bug errors https://github.com/WordPress/gutenberg/pull/32088 **Template Editor** - Clarify the template creation modal https://github.com/WordPress/gutenberg/pull/32427 - Only add skip links for block templates https://github.com/WordPress/gutenberg/pull/32451 **Widgets Editor** - Add block breadcrumb https://github.com/WordPress/gutenberg/pull/32498 https://github.com/WordPress/gutenberg/pull/32528 https://github.com/WordPress/gutenberg/pull/32569 - Saved deleted and restored widgets. https://github.com/WordPress/gutenberg/pull/32534 - Fix unsaved changes detection https://github.com/WordPress/gutenberg/pull/32573 - Fix button spacing in the header https://github.com/WordPress/gutenberg/pull/32585 - Avoid extra undo levels https://github.com/WordPress/gutenberg/pull/32572 - Move Legacy Widget block to the `@wordpress/widgets` package https://github.com/WordPress/gutenberg/pull/32501 - Fix Social Links color inheritance https://github.com/WordPress/gutenberg/pull/32625 - Use Button appender https://github.com/WordPress/gutenberg/pull/32580 **Global Styles (theme.json)** - Separate the presets per origin in the block editor settings https://github.com/WordPress/gutenberg/pull/32358 https://github.com/WordPress/gutenberg/pull/32622 - Use CSS Custom Properties for the preset styles https://github.com/WordPress/gutenberg/pull/32627 **Performance** - Remove is-typing classname to improve typing performance https://github.com/WordPress/gutenberg/pull/32567 Props nosolosw, jorgefilipecosta, aristath, ntsekouras, peterwilsoncc, mcsf. See #53397. Built from https://develop.svn.wordpress.org/trunk@51149 git-svn-id: http://core.svn.wordpress.org/trunk@50758 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2021-06-15 04:52:30 -04:00
// Early exit if not a block template.
if ( ! $_wp_current_template_content ) {
return;
}
Script Loader: Replace hardcoded output of style tags with calls to `wp_add_inline_style`. In this commit, enhancements have been made by replacing manually constructed style tags with calls to `wp_add_inline_style`. Previously, numerous style tags were generated and output directly in the header, resulting in redundant code and bypassing the core's style enqueueing system. This approach made it challenging for third-party developers to manage and control the output of these style tags. To ensure backward compatibility, the following functions have been deprecated and replaced: - print_embed_styles - print_emoji_styles - wp_admin_bar_header - _admin_bar_bump_cb Backward compatibility shims have also been added, ensuring that if these functions were previously unhooked from there actions, they will continue to not output a style tag. However, for the following functions, conversion to use inline styles was not feasible due to the potential disruption it might cause by changing the style tag IDs, potentially breaking JavaScript functionality for a number of plugins in the repository: - custom-background - wp-custom These changes improve code maintainability and enhance the flexibility and control available to developers when managing style outputs within WordPress core. Props spacedmonkey, hlunter, westonruter, flixos90. Fixes #58775. Built from https://develop.svn.wordpress.org/trunk@56682 git-svn-id: http://core.svn.wordpress.org/trunk@56194 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-09-25 13:06:34 -04:00
$skip_link_styles = '
.skip-link.screen-reader-text {
border: 0;
clip: rect(1px,1px,1px,1px);
clip-path: inset(50%);
height: 1px;
margin: -1px;
overflow: hidden;
padding: 0;
position: absolute !important;
width: 1px;
word-wrap: normal !important;
}
.skip-link.screen-reader-text:focus {
background-color: #eee;
clip: auto !important;
clip-path: none;
color: #444;
display: block;
font-size: 1em;
height: auto;
left: 5px;
line-height: normal;
padding: 15px 23px 14px;
text-decoration: none;
top: 5px;
width: auto;
z-index: 100000;
Script Loader: Replace hardcoded output of style tags with calls to `wp_add_inline_style`. In this commit, enhancements have been made by replacing manually constructed style tags with calls to `wp_add_inline_style`. Previously, numerous style tags were generated and output directly in the header, resulting in redundant code and bypassing the core's style enqueueing system. This approach made it challenging for third-party developers to manage and control the output of these style tags. To ensure backward compatibility, the following functions have been deprecated and replaced: - print_embed_styles - print_emoji_styles - wp_admin_bar_header - _admin_bar_bump_cb Backward compatibility shims have also been added, ensuring that if these functions were previously unhooked from there actions, they will continue to not output a style tag. However, for the following functions, conversion to use inline styles was not feasible due to the potential disruption it might cause by changing the style tag IDs, potentially breaking JavaScript functionality for a number of plugins in the repository: - custom-background - wp-custom These changes improve code maintainability and enhance the flexibility and control available to developers when managing style outputs within WordPress core. Props spacedmonkey, hlunter, westonruter, flixos90. Fixes #58775. Built from https://develop.svn.wordpress.org/trunk@56682 git-svn-id: http://core.svn.wordpress.org/trunk@56194 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-09-25 13:06:34 -04:00
}';
$handle = 'wp-block-template-skip-link';
/**
* Print the skip-link styles.
*/
wp_register_style( $handle, false );
wp_add_inline_style( $handle, $skip_link_styles );
wp_enqueue_style( $handle );
/**
Script Loader: Use `wp_get_script_tag()` and `wp_get_inline_script_tag()`/`wp_print_inline_script_tag()` helper functions to output scripts on the frontend and login screen. Using script tag helper functions allows plugins to employ the `wp_script_attributes` and `wp_inline_script_attributes` filters to inject the `nonce` attribute to apply Content Security Policy (e.g. Strict CSP). Use of helper functions also simplifies logic in `WP_Scripts`. * Update `wp_get_inline_script_tag()` to wrap inline script in CDATA blocks for XHTML-compatibility when not using HTML5. * Ensure the `type` attribute is printed first in `wp_get_inline_script_tag()` for back-compat. * Wrap existing `<script>` tags in output buffering to retain IDE supports. * In `wp_get_inline_script_tag()`, append the newline to `$javascript` before it is passed into the `wp_inline_script_attributes` filter so that the CSP hash can be computed properly. * In `the_block_template_skip_link()`, opt to enqueue the inline script rather than print it. * Add `ext-php` to `composer.json` under `suggest` as previously it was an undeclared dependency for running PHPUnit tests. * Update tests to rely on `DOMDocument` to compare script markup, normalizing unsemantic differences. Props westonruter, spacedmonkey, flixos90, 10upsimon, dmsnell, mukesh27, joemcgill, swissspidy, azaozz. Fixes #58664. See #39941. Built from https://develop.svn.wordpress.org/trunk@56687 git-svn-id: http://core.svn.wordpress.org/trunk@56199 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-09-25 17:05:21 -04:00
* Enqueue the skip-link script.
*/
Script Loader: Use `wp_get_script_tag()` and `wp_get_inline_script_tag()`/`wp_print_inline_script_tag()` helper functions to output scripts on the frontend and login screen. Using script tag helper functions allows plugins to employ the `wp_script_attributes` and `wp_inline_script_attributes` filters to inject the `nonce` attribute to apply Content Security Policy (e.g. Strict CSP). Use of helper functions also simplifies logic in `WP_Scripts`. * Update `wp_get_inline_script_tag()` to wrap inline script in CDATA blocks for XHTML-compatibility when not using HTML5. * Ensure the `type` attribute is printed first in `wp_get_inline_script_tag()` for back-compat. * Wrap existing `<script>` tags in output buffering to retain IDE supports. * In `wp_get_inline_script_tag()`, append the newline to `$javascript` before it is passed into the `wp_inline_script_attributes` filter so that the CSP hash can be computed properly. * In `the_block_template_skip_link()`, opt to enqueue the inline script rather than print it. * Add `ext-php` to `composer.json` under `suggest` as previously it was an undeclared dependency for running PHPUnit tests. * Update tests to rely on `DOMDocument` to compare script markup, normalizing unsemantic differences. Props westonruter, spacedmonkey, flixos90, 10upsimon, dmsnell, mukesh27, joemcgill, swissspidy, azaozz. Fixes #58664. See #39941. Built from https://develop.svn.wordpress.org/trunk@56687 git-svn-id: http://core.svn.wordpress.org/trunk@56199 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-09-25 17:05:21 -04:00
ob_start();
?>
<script>
( function() {
var skipLinkTarget = document.querySelector( 'main' ),
sibling,
skipLinkTargetID,
skipLink;
// Early exit if a skip-link target can't be located.
if ( ! skipLinkTarget ) {
return;
}
/*
* Get the site wrapper.
* The skip-link will be injected in the beginning of it.
*/
sibling = document.querySelector( '.wp-site-blocks' );
Block Editor: Update the WordPress packages with the fixes for 5.8 beta 2. This includes: **Various** - Fix multi selection for nested blocks https://github.com/WordPress/gutenberg/pull/32536 - Consistently show the drop indicator while dragging blocks https://github.com/WordPress/gutenberg/pull/31896 - Fix horizontal drop indicator https://github.com/WordPress/gutenberg/pull/32589 - Fix Safari flickering issue https://github.com/WordPress/gutenberg/pull/32581 - Silence useSelect zombie bug errors https://github.com/WordPress/gutenberg/pull/32088 **Template Editor** - Clarify the template creation modal https://github.com/WordPress/gutenberg/pull/32427 - Only add skip links for block templates https://github.com/WordPress/gutenberg/pull/32451 **Widgets Editor** - Add block breadcrumb https://github.com/WordPress/gutenberg/pull/32498 https://github.com/WordPress/gutenberg/pull/32528 https://github.com/WordPress/gutenberg/pull/32569 - Saved deleted and restored widgets. https://github.com/WordPress/gutenberg/pull/32534 - Fix unsaved changes detection https://github.com/WordPress/gutenberg/pull/32573 - Fix button spacing in the header https://github.com/WordPress/gutenberg/pull/32585 - Avoid extra undo levels https://github.com/WordPress/gutenberg/pull/32572 - Move Legacy Widget block to the `@wordpress/widgets` package https://github.com/WordPress/gutenberg/pull/32501 - Fix Social Links color inheritance https://github.com/WordPress/gutenberg/pull/32625 - Use Button appender https://github.com/WordPress/gutenberg/pull/32580 **Global Styles (theme.json)** - Separate the presets per origin in the block editor settings https://github.com/WordPress/gutenberg/pull/32358 https://github.com/WordPress/gutenberg/pull/32622 - Use CSS Custom Properties for the preset styles https://github.com/WordPress/gutenberg/pull/32627 **Performance** - Remove is-typing classname to improve typing performance https://github.com/WordPress/gutenberg/pull/32567 Props nosolosw, jorgefilipecosta, aristath, ntsekouras, peterwilsoncc, mcsf. See #53397. Built from https://develop.svn.wordpress.org/trunk@51149 git-svn-id: http://core.svn.wordpress.org/trunk@50758 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2021-06-15 04:52:30 -04:00
// Early exit if the root element was not found.
if ( ! sibling ) {
Block Editor: Update the WordPress packages with the fixes for 5.8 beta 2. This includes: **Various** - Fix multi selection for nested blocks https://github.com/WordPress/gutenberg/pull/32536 - Consistently show the drop indicator while dragging blocks https://github.com/WordPress/gutenberg/pull/31896 - Fix horizontal drop indicator https://github.com/WordPress/gutenberg/pull/32589 - Fix Safari flickering issue https://github.com/WordPress/gutenberg/pull/32581 - Silence useSelect zombie bug errors https://github.com/WordPress/gutenberg/pull/32088 **Template Editor** - Clarify the template creation modal https://github.com/WordPress/gutenberg/pull/32427 - Only add skip links for block templates https://github.com/WordPress/gutenberg/pull/32451 **Widgets Editor** - Add block breadcrumb https://github.com/WordPress/gutenberg/pull/32498 https://github.com/WordPress/gutenberg/pull/32528 https://github.com/WordPress/gutenberg/pull/32569 - Saved deleted and restored widgets. https://github.com/WordPress/gutenberg/pull/32534 - Fix unsaved changes detection https://github.com/WordPress/gutenberg/pull/32573 - Fix button spacing in the header https://github.com/WordPress/gutenberg/pull/32585 - Avoid extra undo levels https://github.com/WordPress/gutenberg/pull/32572 - Move Legacy Widget block to the `@wordpress/widgets` package https://github.com/WordPress/gutenberg/pull/32501 - Fix Social Links color inheritance https://github.com/WordPress/gutenberg/pull/32625 - Use Button appender https://github.com/WordPress/gutenberg/pull/32580 **Global Styles (theme.json)** - Separate the presets per origin in the block editor settings https://github.com/WordPress/gutenberg/pull/32358 https://github.com/WordPress/gutenberg/pull/32622 - Use CSS Custom Properties for the preset styles https://github.com/WordPress/gutenberg/pull/32627 **Performance** - Remove is-typing classname to improve typing performance https://github.com/WordPress/gutenberg/pull/32567 Props nosolosw, jorgefilipecosta, aristath, ntsekouras, peterwilsoncc, mcsf. See #53397. Built from https://develop.svn.wordpress.org/trunk@51149 git-svn-id: http://core.svn.wordpress.org/trunk@50758 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2021-06-15 04:52:30 -04:00
return;
}
// Get the skip-link target's ID, and generate one if it doesn't exist.
skipLinkTargetID = skipLinkTarget.id;
if ( ! skipLinkTargetID ) {
skipLinkTargetID = 'wp--skip-link--target';
skipLinkTarget.id = skipLinkTargetID;
}
// Create the skip link.
skipLink = document.createElement( 'a' );
skipLink.classList.add( 'skip-link', 'screen-reader-text' );
skipLink.href = '#' + skipLinkTargetID;
skipLink.innerHTML = '<?php /* translators: Hidden accessibility text. */ esc_html_e( 'Skip to content' ); ?>';
// Inject the skip link.
sibling.parentElement.insertBefore( skipLink, sibling );
}() );
</script>
<?php
$skip_link_script = wp_remove_surrounding_empty_script_tags( ob_get_clean() );
Script Loader: Use `wp_get_script_tag()` and `wp_get_inline_script_tag()`/`wp_print_inline_script_tag()` helper functions to output scripts on the frontend and login screen. Using script tag helper functions allows plugins to employ the `wp_script_attributes` and `wp_inline_script_attributes` filters to inject the `nonce` attribute to apply Content Security Policy (e.g. Strict CSP). Use of helper functions also simplifies logic in `WP_Scripts`. * Update `wp_get_inline_script_tag()` to wrap inline script in CDATA blocks for XHTML-compatibility when not using HTML5. * Ensure the `type` attribute is printed first in `wp_get_inline_script_tag()` for back-compat. * Wrap existing `<script>` tags in output buffering to retain IDE supports. * In `wp_get_inline_script_tag()`, append the newline to `$javascript` before it is passed into the `wp_inline_script_attributes` filter so that the CSP hash can be computed properly. * In `the_block_template_skip_link()`, opt to enqueue the inline script rather than print it. * Add `ext-php` to `composer.json` under `suggest` as previously it was an undeclared dependency for running PHPUnit tests. * Update tests to rely on `DOMDocument` to compare script markup, normalizing unsemantic differences. Props westonruter, spacedmonkey, flixos90, 10upsimon, dmsnell, mukesh27, joemcgill, swissspidy, azaozz. Fixes #58664. See #39941. Built from https://develop.svn.wordpress.org/trunk@56687 git-svn-id: http://core.svn.wordpress.org/trunk@56199 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-09-25 17:05:21 -04:00
$script_handle = 'wp-block-template-skip-link';
wp_register_script( $script_handle, false, array(), false, array( 'in_footer' => true ) );
Script Loader: Use `wp_get_script_tag()` and `wp_get_inline_script_tag()`/`wp_print_inline_script_tag()` helper functions to output scripts on the frontend and login screen. Using script tag helper functions allows plugins to employ the `wp_script_attributes` and `wp_inline_script_attributes` filters to inject the `nonce` attribute to apply Content Security Policy (e.g. Strict CSP). Use of helper functions also simplifies logic in `WP_Scripts`. * Update `wp_get_inline_script_tag()` to wrap inline script in CDATA blocks for XHTML-compatibility when not using HTML5. * Ensure the `type` attribute is printed first in `wp_get_inline_script_tag()` for back-compat. * Wrap existing `<script>` tags in output buffering to retain IDE supports. * In `wp_get_inline_script_tag()`, append the newline to `$javascript` before it is passed into the `wp_inline_script_attributes` filter so that the CSP hash can be computed properly. * In `the_block_template_skip_link()`, opt to enqueue the inline script rather than print it. * Add `ext-php` to `composer.json` under `suggest` as previously it was an undeclared dependency for running PHPUnit tests. * Update tests to rely on `DOMDocument` to compare script markup, normalizing unsemantic differences. Props westonruter, spacedmonkey, flixos90, 10upsimon, dmsnell, mukesh27, joemcgill, swissspidy, azaozz. Fixes #58664. See #39941. Built from https://develop.svn.wordpress.org/trunk@56687 git-svn-id: http://core.svn.wordpress.org/trunk@56199 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-09-25 17:05:21 -04:00
wp_add_inline_script( $script_handle, $skip_link_script );
wp_enqueue_script( $script_handle );
}
/**
* Enables the block templates (editor mode) for themes with theme.json by default.
*
* @access private
* @since 5.8.0
*/
function wp_enable_block_templates() {
Themes: Introduce wp_theme_has_theme_json() for public consumption. Adds `wp_theme_has_theme_json()` for public consumption, to replace the private internal Core-only `WP_Theme_JSON_Resolver::theme_has_support()` method. This new global function checks if a theme or its parent has a `theme.json` file. For performance, results are cached as an integer `1` or `0` in the `'theme_json'` group with `'wp_theme_has_theme_json'` key. This is a non-persistent cache. Why? To make the derived data from `theme.json` is always fresh from the potential modifications done via hooks that can use dynamic data (modify the stylesheet depending on some option, settings depending on user permissions, etc.). Also adds a new public function `wp_clean_theme_json_cache()` to clear the cache on `'switch_theme'` and `start_previewing_theme'`. References: * [https://github.com/WordPress/gutenberg/pull/45168 Gutenberg PR 45168] Add `wp_theme_has_theme_json` as a public API to know whether a theme has a `theme.json`. * [https://github.com/WordPress/gutenberg/pull/45380 Gutenberg PR 45380] Deprecate `WP_Theme_JSON_Resolver:theme_has_support()`. * [https://github.com/WordPress/gutenberg/pull/46150 Gutenberg PR 46150] Make `theme.json` object caches non-persistent. * [https://github.com/WordPress/gutenberg/pull/45979 Gutenberg PR 45979] Don't check if constants set by `wp_initial_constants()` are defined. * [https://github.com/WordPress/gutenberg/pull/45950 Gutenberg PR 45950] Cleaner logic in `wp_theme_has_theme_json`. Follow-up to [54493], [53282], [52744], [52049], [50959]. Props oandregal, afragen, alexstine, aristath, azaozz, costdev, flixos90, hellofromTonya, mamaduka, mcsf, ocean90, spacedmonkey. Fixes #56975. Built from https://develop.svn.wordpress.org/trunk@55086 git-svn-id: http://core.svn.wordpress.org/trunk@54619 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-01-18 06:40:10 -05:00
if ( wp_is_block_theme() || wp_theme_has_theme_json() ) {
add_theme_support( 'block-templates' );
}
}