diff --git a/src/BlockTemplatesController.php b/src/BlockTemplatesController.php
index e94f6102668..1443e9ceafe 100644
--- a/src/BlockTemplatesController.php
+++ b/src/BlockTemplatesController.php
@@ -778,6 +778,29 @@ protected function has_migrated_page( $page_id ) {
return (bool) get_option( 'has_migrated_' . $page_id, false );
}
+ /**
+ * Prepare default page template.
+ *
+ * @param \WP_Post $page Page object.
+ * @return string
+ */
+ protected function get_default_migrate_page_template( $page ) {
+ $default_template_content = $this->get_block_template_part( 'header' );
+ $default_template_content .= '
+
+
+
+
' . wp_kses_post( $page->post_title ) . '
+
+ ' . wp_kses_post( $page->post_content ) . '
+
+
+ ';
+ $default_template_content .= $this->get_block_template_part( 'footer' );
+
+ return $default_template_content;
+ }
+
/**
* Migrates a page to a template if needed.
*
@@ -790,20 +813,27 @@ protected function migrate_page( $page_id, $page ) {
return;
}
+ // Use the page template if it exists, which we'll use over our default template if found.
+ $existing_page_template = BlockTemplateUtils::get_block_template( get_stylesheet() . '//page', 'wp_template' );
+
+ if ( $existing_page_template && ! empty( $existing_page_template->content ) ) {
+ // Massage the original content into something we can use. Replace post content with a group block.
+ $pattern = '/()/';
+ $replacement = '
+
+ ' . wp_kses_post( $page->post_content ) . '
+
+ ';
+ $template_content = preg_replace( $pattern, $replacement, $existing_page_template->content );
+ } else {
+ $template_content = $this->get_default_migrate_page_template( $page );
+ }
+
$request = new \WP_REST_Request( 'POST', '/wp/v2/templates/woocommerce/woocommerce//' . $page_id );
$request->set_body_params(
[
'id' => 'woocommerce/woocommerce//' . $page_id,
- 'content' => $this->get_block_template_part( 'header' ) .
- '
-
-
-
' . wp_kses_post( $page->post_title ) . '
-
- ' . wp_kses_post( $page->post_content ) . '
-
- ' .
- $this->get_block_template_part( 'footer' ),
+ 'content' => $template_content,
]
);
rest_get_server()->dispatch( $request );
@@ -818,7 +848,7 @@ protected function migrate_page( $page_id, $page ) {
* @return string
*/
protected function get_block_template_part( $part ) {
- $template_part = get_block_template( get_stylesheet() . '//' . $part, 'wp_template_part' );
+ $template_part = BlockTemplateUtils::get_block_template( get_stylesheet() . '//' . $part, 'wp_template_part' );
if ( ! $template_part || empty( $template_part->content ) ) {
return '';
}