Skip to content

Commit

Permalink
Template Loader: Add theme block template resolution. (#18247)
Browse files Browse the repository at this point in the history
* Template Loader: Add theme block template resolution.

* Apply suggestions from code review

Co-Authored-By: Weston Ruter <westonruter@google.com>

* Template Loader: Add missing `isset`.

* Template Loader: Only create auto-draft of block template for editing in admin screens.
  • Loading branch information
epiqueras authored Nov 4, 2019
1 parent e4003c4 commit 3d6392d
Showing 1 changed file with 54 additions and 8 deletions.
62 changes: 54 additions & 8 deletions lib/template-loader.php
Original file line number Diff line number Diff line change
Expand Up @@ -80,7 +80,7 @@ function gutenberg_override_query_template( $template, $type, array $templates =
* @return string Path to the canvas file to include.
*/
function gutenberg_find_template( $template_file ) {
global $_wp_current_template_post, $_wp_current_template_hierarchy;
global $_wp_current_template_content, $_wp_current_template_hierarchy;

// Bail if no relevant template hierarchy was determined, or if the template file
// was overridden another way.
Expand All @@ -105,8 +105,56 @@ function gutenberg_find_template( $template_file ) {
);

if ( $template_query->have_posts() ) {
$template_posts = $template_query->get_posts();
$_wp_current_template_post = array_shift( $template_posts );
$template_posts = $template_query->get_posts();
$current_template_post = array_shift( $template_posts );

// Build map of template slugs to their priority in the current hierarchy.
$slug_priorities = array_flip( $slugs );

// See if there is a theme block template with higher priority than the resolved template post.
$higher_priority_block_template_path = null;
$higher_priority_block_template_priority = PHP_INT_MAX;
$block_template_files = glob( get_stylesheet_directory() . '/block-templates/*.html', 1 );
if ( is_child_theme() ) {
$block_template_files = array_merge( $block_template_files, glob( get_template_directory() . '/block-templates/*.html', 1 ) );
}
foreach ( $block_template_files as $path ) {
$theme_block_template_priority = $slug_priorities[ basename( $path, '.html' ) ];
if (
isset( $theme_block_template_priority ) &&
$theme_block_template_priority < $higher_priority_block_template_priority &&
$theme_block_template_priority < $slug_priorities[ $current_template_post->post_name ]
) {
$higher_priority_block_template_path = $path;
$higher_priority_block_template_priority = $theme_block_template_priority;
}
}

// If there is, use it instead.
if ( isset( $higher_priority_block_template_path ) ) {
$post_name = basename( $path, '.html' );
$current_template_post = array(
'post_content' => file_get_contents( $higher_priority_block_template_path ),
'post_title' => ucfirst( $post_name ),
'post_status' => 'auto-draft',
'post_type' => 'wp_template',
'post_name' => $post_name,
);
if ( is_admin() ) {
// Only create auto-draft of block template for editing
// in admin screens, similarly to how we do it for new
// posts in the editor.
$current_template_post = get_post(
wp_insert_post( $current_template_post )
);
} else {
$current_template_post = new WP_Post(
(object) $current_template_post
);
}
}

$_wp_current_template_content = $current_template_post->post_content;
}

// Add extra hooks for template canvas.
Expand All @@ -131,17 +179,15 @@ function gutenberg_render_title_tag() {
* Renders the markup for the current template.
*/
function gutenberg_render_the_template() {
global $_wp_current_template_post;
global $_wp_current_template_content;
global $wp_embed;

if ( ! $_wp_current_template_post || 'wp_template' !== $_wp_current_template_post->post_type ) {
if ( ! $_wp_current_template_content ) {
echo '<h1>' . esc_html__( 'No matching template found', 'gutenberg' ) . '</h1>';
return;
}

$content = $_wp_current_template_post->post_content;

$content = $wp_embed->run_shortcode( $content );
$content = $wp_embed->run_shortcode( $_wp_current_template_content );
$content = $wp_embed->autoembed( $content );
$content = do_blocks( $content );
$content = wptexturize( $content );
Expand Down

0 comments on commit 3d6392d

Please sign in to comment.