Bläddra i källkod

Blockbase: Optionally remove inherited style variations from child themes (#6996)

* Blockbase: Remove style variations from child themes
Co-authored-by: Jason Crist <jcrist@pbking.com>
Miguel Torres 2 år sedan
förälder
incheckning
4b07c828a2
5 ändrade filer med 38 tillägg och 2 borttagningar
  1. 1 0
      blockbase/functions.php
  2. 32 0
      blockbase/inc/rest-api.php
  3. 1 0
      blockbase/theme.json
  4. 2 1
      jackson/theme.json
  5. 2 1
      kingsley/theme.json

+ 1 - 0
blockbase/functions.php

@@ -103,6 +103,7 @@ if ( class_exists( 'WP_Theme_JSON_Resolver_Gutenberg' ) ) {
 }
 
 require get_template_directory() . '/inc/fonts/custom-fonts.php';
+require get_template_directory() . '/inc/rest-api.php';
 
 
 // Force menus to reload

+ 32 - 0
blockbase/inc/rest-api.php

@@ -0,0 +1,32 @@
+<?php
+
+/**
+ * Removes the style variations of Blockbase child themes inherited by the parent theme.
+ *
+ * @param WP_REST_Response|WP_HTTP_Response|WP_Error|mixed $response Result to send to the client.
+ * @param array $handler Route handler used for the request.
+ *
+ * @return WP_REST_Response|WP_HTTP_Response|WP_Error|mixed Result to send to the client.
+ */
+function blockbase_remove_style_variations_from_child_themes( $response, $handler ) {
+	if ( ! isset( $handler['callback'] ) || ! is_array( $handler['callback'] ) ) {
+		return $response;
+	}
+
+	$handler_class  = isset( $handler['callback'][0] ) ? $handler['callback'][0] : null;
+	$handler_method = isset( $handler['callback'][1] ) ? $handler['callback'][1] : null;
+	$opt_out        = wp_get_global_settings( array( 'custom', 'optOutOfParentStyleVariations' ) );
+
+	/*
+	 * Prevents Blockbase child themes from being considered child themes in the
+	 * `wp/v2/global-styles/themes/:theme/variations` API endpoint, so they don't
+	 * inherit the style variations from the parent theme.
+	 */
+	if ( $opt_out && is_a( $handler_class, 'WP_REST_Global_Styles_Controller' ) && 'get_theme_items' === $handler_method ) {
+		add_filter( 'template_directory', 'get_stylesheet_directory' );
+	}
+
+	return $response;
+}
+
+add_filter( 'rest_request_before_callbacks', 'blockbase_remove_style_variations_from_child_themes', 10, 2 );

+ 1 - 0
blockbase/theme.json

@@ -93,6 +93,7 @@
 			]
 		},
 		"custom": {
+			"optOutOfParentStyleVariations": false,
 			"alignment": {
 				"alignedMaxWidth": "50%"
 			},

+ 2 - 1
jackson/theme.json

@@ -24,7 +24,8 @@
 				"primary": "var(--wp--preset--color--foreground)",
 				"secondary": "var(--wp--preset--color--foreground)",
 				"tertiary": "var(--wp--preset--color--background)"
-			}
+			},
+            "optOutOfParentStyleVariations": true
         }
     },
     "styles": {

+ 2 - 1
kingsley/theme.json

@@ -24,7 +24,8 @@
 				"primary": "var(--wp--preset--color--foreground)",
 				"secondary": "var(--wp--preset--color--foreground)",
 				"tertiary": "var(--wp--preset--color--background)"
-			}
+			},
+            "optOutOfParentStyleVariations": true
         }
     },
     "styles": {