Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Edit Site: Fix template lookup #22954

Merged
merged 6 commits into from
Jun 9, 2020
Merged

Conversation

ockham
Copy link
Contributor

@ockham ockham commented Jun 5, 2020

Description

This PR fixes two issues with template lookup:

1. Templates with index.html block template fallback

When using a theme that came with an index.html but not with a front-page.html block template, the site editor would show the following Notice: Undefined index: front-page in /var/www/html/wp-content/plugins/gutenberg/lib/edit-site-page.php on line 162.

The reason is that I was setting the wrong key here:

$template_ids[ $current_template['template_post']->post_name ] = $current_template['template_post']->ID;

This would use the name of the template that was found, not the name of the key that was looked for. So if we're looking up front-page, but don't find any template, and thus fall back to index, the template will be stored under the index key, rather than the front-end one.

The fix for this is to use the template we were looking for as key (rather than the name of the template we actually found).

2. Templates without index.html block template fallback

When using a theme that doesn't come with any block templates at all, we need to provide a blank index template when the user first opens the site editor (see discussion).

How has this been tested?

  • There shouldn't be any wp_template CPTs (neither published nor auto-drafts) from previous Site Editor runs. (It's best to start with a fresh install, i.e. npx wp-env clean all && npx wp-env start. Careful, this will wipe your WordPress install's data!)
  • Furthermore, the "Full Site Editing Demo Templates" checkbox in /wp-admin/admin.php?page=gutenberg-experiments must not be ticked. (Make sure the "Full Site Editing" checkbox is ticked -- since it also gets reset after a wipe.)
  • Make sure you have linked your wp-env install to themes from the theme-experiments repo (see the wp-env README).
  • Activate the "Twenty Twenty Blocks" theme, and open the site editor. Verify that the template switcher shows the index template, and no errors or notices are printed. (Don't modify anything in order not to create an auto draft of that template.)
  • Activate the "Twenty Twenty" theme, and open the site editor. Verify that the template switcher shows a blank index template, and no errors or notices are printed. This is the template that was autogenerated, since the regular Twenty Twenty theme doesn't come with any block templates.

Open question

Upon running

npx wp-env run cli "wp post list --post_type=wp_template --post_status=auto-draft"

I see a sleuth of index template auto-drafts. I was hoping that only one would be created 😕 -- maybe my newly added logic is still buggy.

Types of changes

Bug fix. Fixes #22800.

Checklist:

  • My code is tested.
  • My code follows the WordPress code style.
  • My code follows the accessibility standards.
  • My code has proper inline documentation.
  • I've included developer documentation if appropriate.
  • I've updated all React Native files affected by any refactorings/renamings in this PR.

@ockham ockham added [Type] Bug An existing feature does not function as intended [Feature] Full Site Editing labels Jun 5, 2020
@ockham ockham self-assigned this Jun 5, 2020
@github-actions
Copy link

github-actions bot commented Jun 5, 2020

Size Change: 0 B

Total Size: 1.13 MB

ℹ️ View Unchanged
Filename Size Change
build/a11y/index.js 1.14 kB 0 B
build/annotations/index.js 3.62 kB 0 B
build/api-fetch/index.js 3.4 kB 0 B
build/autop/index.js 2.83 kB 0 B
build/blob/index.js 620 B 0 B
build/block-directory/index.js 6.77 kB 0 B
build/block-directory/style-rtl.css 892 B 0 B
build/block-directory/style.css 892 B 0 B
build/block-editor/index.js 106 kB 0 B
build/block-editor/style-rtl.css 11.4 kB 0 B
build/block-editor/style.css 11.4 kB 0 B
build/block-library/editor-rtl.css 7.88 kB 0 B
build/block-library/editor.css 7.89 kB 0 B
build/block-library/index.js 127 kB 0 B
build/block-library/style-rtl.css 7.72 kB 0 B
build/block-library/style.css 7.72 kB 0 B
build/block-library/theme-rtl.css 684 B 0 B
build/block-library/theme.css 686 B 0 B
build/block-serialization-default-parser/index.js 1.88 kB 0 B
build/block-serialization-spec-parser/index.js 3.1 kB 0 B
build/blocks/index.js 48.1 kB 0 B
build/components/index.js 194 kB 0 B
build/components/style-rtl.css 19.5 kB 0 B
build/components/style.css 19.5 kB 0 B
build/compose/index.js 9.31 kB 0 B
build/core-data/index.js 11.4 kB 0 B
build/data-controls/index.js 1.29 kB 0 B
build/data/index.js 8.45 kB 0 B
build/date/index.js 5.47 kB 0 B
build/deprecated/index.js 771 B 0 B
build/dom-ready/index.js 569 B 0 B
build/dom/index.js 3.17 kB 0 B
build/edit-navigation/index.js 8.25 kB 0 B
build/edit-navigation/style-rtl.css 918 B 0 B
build/edit-navigation/style.css 919 B 0 B
build/edit-post/index.js 303 kB 0 B
build/edit-post/style-rtl.css 5.6 kB 0 B
build/edit-post/style.css 5.6 kB 0 B
build/edit-site/index.js 15.5 kB 0 B
build/edit-site/style-rtl.css 2.96 kB 0 B
build/edit-site/style.css 2.96 kB 0 B
build/edit-widgets/index.js 9.34 kB 0 B
build/edit-widgets/style-rtl.css 2.4 kB 0 B
build/edit-widgets/style.css 2.4 kB 0 B
build/editor/editor-styles-rtl.css 425 B 0 B
build/editor/editor-styles.css 428 B 0 B
build/editor/index.js 44.8 kB 0 B
build/editor/style-rtl.css 4.26 kB 0 B
build/editor/style.css 4.27 kB 0 B
build/element/index.js 4.65 kB 0 B
build/escape-html/index.js 733 B 0 B
build/format-library/index.js 7.72 kB 0 B
build/format-library/style-rtl.css 502 B 0 B
build/format-library/style.css 502 B 0 B
build/hooks/index.js 2.13 kB 0 B
build/html-entities/index.js 621 B 0 B
build/i18n/index.js 3.56 kB 0 B
build/is-shallow-equal/index.js 711 B 0 B
build/keyboard-shortcuts/index.js 2.51 kB 0 B
build/keycodes/index.js 1.94 kB 0 B
build/list-reusable-blocks/index.js 3.12 kB 0 B
build/list-reusable-blocks/style-rtl.css 226 B 0 B
build/list-reusable-blocks/style.css 226 B 0 B
build/media-utils/index.js 5.3 kB 0 B
build/notices/index.js 1.79 kB 0 B
build/nux/index.js 3.41 kB 0 B
build/nux/style-rtl.css 616 B 0 B
build/nux/style.css 613 B 0 B
build/plugins/index.js 2.56 kB 0 B
build/primitives/index.js 1.5 kB 0 B
build/priority-queue/index.js 789 B 0 B
build/redux-routine/index.js 2.85 kB 0 B
build/rich-text/index.js 14.8 kB 0 B
build/server-side-render/index.js 2.68 kB 0 B
build/shortcode/index.js 1.7 kB 0 B
build/token-list/index.js 1.28 kB 0 B
build/url/index.js 4.06 kB 0 B
build/viewport/index.js 1.85 kB 0 B
build/warning/index.js 1.14 kB 0 B
build/wordcount/index.js 1.17 kB 0 B

compressed-size-action

lib/template-loader.php Outdated Show resolved Hide resolved
lib/template-loader.php Outdated Show resolved Hide resolved
Copy link
Member

@vindl vindl left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This fixed the issue for me. :shipit:

// `index.html` block template. We create one so that people that are trying to access the editor are greeted
// with a blank page rather than an error.
if( ! $current_template_post && ( is_admin() || defined( 'REST_REQUEST' ) ) ) {
// 'index' is the ultimate fallback template. If even this template doesn't exist, we create an empty one for it.
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This seems like it has already been covered in the above comment.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Good spot, thanks! I'll remove this line.

@ockham
Copy link
Contributor Author

ockham commented Jun 8, 2020

e2e tests are still failing 😕

No output has been received in the last 10m0s, this potentially indicates a stalled build or something wrong with the build itself.
Check the details on how to adjust your build configuration on: https://docs.travis-ci.com/user/common-build-problems/#build-times-out-because-no-output-was-received

I'll try a rebase.

@ockham ockham force-pushed the fix/edit-site-no-template-found-error branch from 47b321a to 4852ce3 Compare June 8, 2020 21:26
@ockham ockham merged commit 5f1bf3e into master Jun 9, 2020
@ockham ockham deleted the fix/edit-site-no-template-found-error branch June 9, 2020 10:22
@github-actions github-actions bot added this to the Gutenberg 8.4 milestone Jun 9, 2020
@oandregal oandregal modified the milestones: Gutenberg 8.4, Gutenberg 8.3 Jun 9, 2020
oandregal pushed a commit that referenced this pull request Jun 9, 2020
## Description
This PR fixes two issues with template lookup:

### 1. Templates with `index.html` block template fallback

When using a theme that came with an `index.html` but not with a `front-page.html` block template, the site editor would show the following `Notice: Undefined index: front-page in /var/www/html/wp-content/plugins/gutenberg/lib/edit-site-page.php on line 162`.
 
The reason is that I was setting the wrong key here: https://github.com/WordPress/gutenberg/blob/710373b254fbcd15d524afdeb31da0d93c4defd4/lib/edit-site-page.php#L158

This would use the name of the template that was _found_, not the name of the key that was looked for. So if we're looking up `front-page`, but don't find any template, and [thus fall](https://github.com/WordPress/gutenberg/blob/710373b254fbcd15d524afdeb31da0d93c4defd4/lib/template-loader.php#L226) back to `index`, the template will be stored under the `index` key, rather than the front-end one. 

The fix for this is to use the template we were looking for as key (rather than the name of the template we actually found).

### 2. Templates without `index.html` block template fallback

When using a theme that doesn't come with any block templates at all, we need to provide a blank `index` template when the user first opens the site editor (see [discussion](#22893 (comment))).

Co-authored-by: Enrique Piqueras <epiqueras@users.noreply.github.com>
@oandregal oandregal mentioned this pull request Jun 9, 2020
7 tasks
@oandregal
Copy link
Member

👋 Just noting that this will be backported to Gutenberg 8.3 release as part of #23026

oandregal pushed a commit that referenced this pull request Jun 10, 2020
- Edit Site: fix template lookup. #22954
- Fix for FSE template parts: #23050
- Fix link color style rule. #23025
- Fix for link color: it needs to be opt-in. #23049
- Revert "Image Block: add caption field to placeholder" #23027
- Cover padding: reset button + hook namespace + improve visualizer #23041
- Fix failing 'Build artifacts' CI job (by updating `package-lock.json`): #23052
@ellatrix ellatrix mentioned this pull request Jun 16, 2020
12 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
[Type] Bug An existing feature does not function as intended
Projects
None yet
Development

Successfully merging this pull request may close these issues.

PHP notice in the site editor
4 participants