Toolbar: Make the 'Edit site' link open the editor with the current template.

Adds a global, `$_wp_current_template_id`, to allow the 'Edit site' link in the admin bar to be aware of the current template and pass it to the Site Editor, so it can load the appropriate one directly.

See https://github.com/WordPress/gutenberg/issues/37850 for further discussion.

Props Mamaduka, poena, abitofmind, audrasjb, mikinc860, alexstine, annezazu, beckej, jameskoster, bacoords, clubkert, paaljoachim, get_dave, priethor, skorasaurus.
Fixes #58746.

git-svn-id: https://develop.svn.wordpress.org/trunk@56209 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
Mike Schroder
2023-07-11 11:31:48 +00:00
parent 31fdf8f20b
commit 154d340395
2 changed files with 17 additions and 2 deletions

View File

@@ -419,9 +419,14 @@ function wp_admin_bar_site_menu( $wp_admin_bar ) {
*
* @since 5.9.0
*
* @global string $_wp_current_template_id
* @since 6.3.0 Added `$_wp_current_template_id` global for editing of current template directly from the admin bar.
*
* @param WP_Admin_Bar $wp_admin_bar The WP_Admin_Bar instance.
*/
function wp_admin_bar_edit_site_menu( $wp_admin_bar ) {
global $_wp_current_template_id;
// Don't show if a block theme is not activated.
if ( ! wp_is_block_theme() ) {
return;
@@ -436,7 +441,13 @@ function wp_admin_bar_edit_site_menu( $wp_admin_bar ) {
array(
'id' => 'site-editor',
'title' => __( 'Edit site' ),
'href' => admin_url( 'site-editor.php' ),
'href' => add_query_arg(
array(
'postType' => 'wp_template',
'postId' => $_wp_current_template_id,
),
admin_url( 'site-editor.php' )
),
)
);
}

View File

@@ -23,8 +23,10 @@ function _add_template_loader_filters() {
* Internally, this communicates the block content that needs to be used by the template canvas through a global variable.
*
* @since 5.8.0
* @since 6.3.0 Added `$_wp_current_template_id` global for editing of current template directly from the admin bar.
*
* @global string $_wp_current_template_content
* @global string $_wp_current_template_id
*
* @param string $template Path to the template. See locate_template().
* @param string $type Sanitized filename without extension.
@@ -32,7 +34,7 @@ function _add_template_loader_filters() {
* @return string The path to the Site Editor template canvas file, or the fallback PHP template.
*/
function locate_block_template( $template, $type, array $templates ) {
global $_wp_current_template_content;
global $_wp_current_template_content, $_wp_current_template_id;
if ( ! current_theme_supports( 'block-templates' ) ) {
return $template;
@@ -64,6 +66,8 @@ function locate_block_template( $template, $type, array $templates ) {
$block_template = resolve_block_template( $type, $templates, $template );
if ( $block_template ) {
$_wp_current_template_id = $block_template->id;
if ( empty( $block_template->content ) && is_user_logged_in() ) {
$_wp_current_template_content =
sprintf(