From c72602ac35c6e8de487647cd29ae9b1d4c0b0522 Mon Sep 17 00:00:00 2001 From: Jason Crist Date: Tue, 15 Apr 2025 08:08:28 -0400 Subject: [PATCH] Remove Pattern Saving Option --- includes/class-create-block-theme-api.php | 8 -- includes/create-theme/theme-patterns.php | 151 ---------------------- src/editor-sidebar/save-panel.js | 52 ++------ 3 files changed, 8 insertions(+), 203 deletions(-) diff --git a/includes/class-create-block-theme-api.php b/includes/class-create-block-theme-api.php index a7e28b3f..73fd7511 100644 --- a/includes/class-create-block-theme-api.php +++ b/includes/class-create-block-theme-api.php @@ -394,14 +394,6 @@ function rest_save_theme( $request ) { CBT_Theme_Styles::clear_user_styles_customizations(); } - if ( isset( $options['savePatterns'] ) && true === $options['savePatterns'] ) { - $response = CBT_Theme_Patterns::add_patterns_to_theme( $options ); - - if ( is_wp_error( $response ) ) { - return $response; - } - } - wp_get_theme()->cache_delete(); return new WP_REST_Response( diff --git a/includes/create-theme/theme-patterns.php b/includes/create-theme/theme-patterns.php index 44991853..0ffbc048 100644 --- a/includes/create-theme/theme-patterns.php +++ b/includes/create-theme/theme-patterns.php @@ -21,29 +21,6 @@ public static function pattern_from_template( $template, $new_slug = null ) { ); } - public static function pattern_from_wp_block( $pattern_post ) { - $pattern = new stdClass(); - $pattern->id = $pattern_post->ID; - $pattern->title = $pattern_post->post_title; - $pattern->name = sanitize_title_with_dashes( $pattern_post->post_title ); - $pattern->slug = wp_get_theme()->get( 'TextDomain' ) . '/' . $pattern->name; - $pattern_category_list = get_the_terms( $pattern->id, 'wp_pattern_category' ); - $pattern->categories = ! empty( $pattern_category_list ) ? join( ', ', wp_list_pluck( $pattern_category_list, 'name' ) ) : ''; - $pattern->sync_status = get_post_meta( $pattern->id, 'wp_pattern_sync_status', true ); - $pattern->content = <<title} - * Slug: {$pattern->slug} - * Categories: {$pattern->categories} - */ - ?> - {$pattern_post->post_content} - PHP; - - return $pattern; - } - public static function escape_alt_for_pattern( $html ) { if ( empty( $html ) ) { return $html; @@ -71,132 +48,4 @@ public static function create_pattern_link( $attributes ) { return ''; } - public static function replace_local_pattern_references( $pattern ) { - // Find any references to pattern in templates - $templates_to_update = array(); - $args = array( - 'post_type' => array( 'wp_template', 'wp_template_part' ), - 'posts_per_page' => -1, - 's' => 'wp:block {"ref":' . $pattern->id . '}', - ); - $find_pattern_refs = new WP_Query( $args ); - if ( $find_pattern_refs->have_posts() ) { - foreach ( $find_pattern_refs->posts as $post ) { - $slug = $post->post_name; - array_push( $templates_to_update, $slug ); - } - } - $templates_to_update = array_unique( $templates_to_update ); - - // Only update templates that reference the pattern - CBT_Theme_Templates::add_templates_to_local( 'all', null, null, $options, $templates_to_update ); - - // List all template and pattern files in the theme - $base_dir = get_stylesheet_directory(); - $patterns = glob( $base_dir . DIRECTORY_SEPARATOR . 'patterns' . DIRECTORY_SEPARATOR . '*.php' ); - $templates = glob( $base_dir . DIRECTORY_SEPARATOR . 'templates' . DIRECTORY_SEPARATOR . '*.html' ); - $template_parts = glob( $base_dir . DIRECTORY_SEPARATOR . 'template-parts' . DIRECTORY_SEPARATOR . '*.html' ); - - // Replace references to the local patterns in the theme - foreach ( array_merge( $patterns, $templates, $template_parts ) as $file ) { - $file_content = file_get_contents( $file ); - $file_content = str_replace( 'wp:block {"ref":' . $pattern->id . '}', 'wp:pattern {"slug":"' . $pattern->slug . '"}', $file_content ); - file_put_contents( $file, $file_content ); - } - - CBT_Theme_Templates::clear_user_templates_customizations(); - CBT_Theme_Templates::clear_user_template_parts_customizations(); - } - - public static function prepare_pattern_for_export( $pattern, $options = null ) { - if ( ! $options ) { - $options = array( - 'localizeText' => false, - 'removeNavRefs' => true, - 'localizeImages' => true, - ); - } - - $pattern = CBT_Theme_Templates::eliminate_environment_specific_content( $pattern, $options ); - - if ( array_key_exists( 'localizeText', $options ) && $options['localizeText'] ) { - $pattern = CBT_Theme_Templates::escape_text_in_template( $pattern ); - } - - if ( array_key_exists( 'localizeImages', $options ) && $options['localizeImages'] ) { - $pattern = CBT_Theme_Media::make_template_images_local( $pattern ); - - // Write the media assets if there are any - if ( $pattern->media ) { - CBT_Theme_Media::add_media_to_local( $pattern->media ); - } - } - - return $pattern; - } - - /** - * Copy the local patterns as well as any media to the theme filesystem. - */ - public static function add_patterns_to_theme( $options = null ) { - $base_dir = get_stylesheet_directory(); - $patterns_dir = $base_dir . DIRECTORY_SEPARATOR . 'patterns'; - - $pattern_query = new WP_Query( - array( - 'post_type' => 'wp_block', - 'posts_per_page' => -1, - ) - ); - - if ( $pattern_query->have_posts() ) { - // If there is no patterns folder, create it. - if ( ! is_dir( $patterns_dir ) ) { - wp_mkdir_p( $patterns_dir ); - } - - foreach ( $pattern_query->posts as $pattern ) { - $pattern = self::pattern_from_wp_block( $pattern ); - $pattern = self::prepare_pattern_for_export( $pattern, $options ); - $pattern_exists = false; - - // Check pattern is synced before adding to theme. - if ( 'unsynced' !== $pattern->sync_status ) { - // Check pattern name doesn't already exist before creating the file. - $existing_patterns = glob( $patterns_dir . DIRECTORY_SEPARATOR . '*.php' ); - foreach ( $existing_patterns as $existing_pattern ) { - if ( strpos( $existing_pattern, $pattern->name . '.php' ) !== false ) { - $pattern_exists = true; - } - } - - if ( $pattern_exists ) { - return new WP_Error( - 'pattern_already_exists', - sprintf( - /* Translators: Pattern name. */ - __( - 'A pattern with this name already exists: "%s".', - 'create-block-theme' - ), - $pattern->name - ) - ); - } - - // Create the pattern file. - $pattern_file = $patterns_dir . $pattern->name . '.php'; - file_put_contents( - $patterns_dir . DIRECTORY_SEPARATOR . $pattern->name . '.php', - $pattern->content - ); - - self::replace_local_pattern_references( $pattern ); - - // Remove it from the database to ensure that these patterns are loaded from the theme. - wp_delete_post( $pattern->id, true ); - } - } - } - } } diff --git a/src/editor-sidebar/save-panel.js b/src/editor-sidebar/save-panel.js index 90c95abd..b9cc3d50 100644 --- a/src/editor-sidebar/save-panel.js +++ b/src/editor-sidebar/save-panel.js @@ -34,7 +34,6 @@ export const SaveThemePanel = () => { saveTemplates: _preference?.saveTemplates ?? true, processOnlySavedTemplates: _preference?.processOnlySavedTemplates ?? true, - savePatterns: _preference?.savePatterns ?? true, saveFonts: _preference?.saveFonts ?? true, removeNavRefs: _preference?.removeNavRefs ?? false, localizeText: _preference?.localizeText ?? false, @@ -70,21 +69,8 @@ export const SaveThemePanel = () => { ) ); - const searchParams = new URLSearchParams( - window?.location?.search - ); - // If user is editing a pattern and savePatterns is true, redirect back to the patterns page. - if ( - preference.savePatterns && - searchParams.get( 'postType' ) === 'wp_block' && - searchParams.get( 'postId' ) - ) { - window.location = - '/wp-admin/site-editor.php?postType=wp_block'; - } else { - // If user is not editing a pattern, reload the editor. - window.location.reload(); - } + // reload the editor. + window.location.reload(); } ) .catch( ( error ) => { const errorMessage = @@ -155,16 +141,6 @@ export const SaveThemePanel = () => { handleTogglePreference( 'processOnlySavedTemplates' ) } /> - handleTogglePreference( 'savePatterns' ) } - /> { 'Any text in a template or pattern will be localized in a pattern.', 'create-block-theme' ) } - disabled={ - ! preference.saveTemplates && ! preference.savePatterns - } + disabled={ ! preference.saveTemplates } checked={ - ( preference.saveTemplates || - preference.savePatterns ) && - preference.localizeText + preference.saveTemplates && preference.localizeText } onChange={ () => handleTogglePreference( 'localizeText' ) } /> @@ -189,13 +161,9 @@ export const SaveThemePanel = () => { 'Any images in a template or pattern will be copied to a local /assets folder and referenced from there via a pattern.', 'create-block-theme' ) } - disabled={ - ! preference.saveTemplates && ! preference.savePatterns - } + disabled={ ! preference.saveTemplates } checked={ - ( preference.saveTemplates || - preference.savePatterns ) && - preference.localizeImages + preference.saveTemplates && preference.localizeImages } onChange={ () => handleTogglePreference( 'localizeImages' ) @@ -211,13 +179,9 @@ export const SaveThemePanel = () => { 'Remove Navigation Refs from the theme returning your navigation to the default state.', 'create-block-theme' ) } - disabled={ - ! preference.saveTemplates && ! preference.savePatterns - } + disabled={ ! preference.saveTemplates } checked={ - ( preference.saveTemplates || - preference.savePatterns ) && - preference.removeNavRefs + preference.saveTemplates && preference.removeNavRefs } onChange={ () => handleTogglePreference( 'removeNavRefs' ) } />