Explorar el Código

Add body class for the theme variation (#7034)

Dmitry Merkushin hace 2 años
padre
commit
679c457931
Se han modificado 1 ficheros con 48 adiciones y 1 borrados
  1. 48 1
      course/functions.php

+ 48 - 1
course/functions.php

@@ -75,6 +75,8 @@ endif;
 add_action( 'wp_enqueue_scripts', 'course_scripts' );
 
 function course_theme_init() {
+	add_option( 'course_theme_variation', 'default' );
+
 	register_block_style(
 		'core/navigation-link',
 		array(
@@ -96,4 +98,49 @@ function course_register_block_patterns_category() {
 	);
 }
 
-add_action( 'init', 'course_register_block_patterns_category' );
+add_action( 'init', 'course_register_block_patterns_category' );
+
+/**
+ * Determine the theme variation and save in option.
+ *
+ * @param int     $post_id Post ID.
+ * @param WP_Post $post    Post object.
+ * @param bool    $update  Whether this is an existing post being updated or not.
+ */
+function course_save_global_styles( $post_id, $post, $update ) {
+	if ( 'wp_global_styles' !== $post->post_type ) {
+		return;
+	}
+
+	$global_styles      = json_decode( $post->post_content, true );
+	$global['settings'] = isset( $global_styles['settings'] ) ? $global_styles['settings'] : array();
+	$global['styles']   = isset( $global_styles['styles'] ) ? $global_styles['styles'] : array();
+	$variations         = WP_Theme_JSON_Resolver::get_style_variations();
+	$current_variation  = 'default';
+	foreach ( $variations as $variation ) {
+		if ( $variation['settings'] === $global['settings'] && $variation['styles'] === $global['styles'] ) {
+			$current_variation = sanitize_title( $variation['title'] );
+		}
+	}
+	update_option( 'course_theme_variation', $current_variation );
+}
+
+add_action( 'save_post', 'course_save_global_styles', 10, 3 );
+
+/**
+ * Add the theme variation to the body class.
+ *
+ * @param array $classes Array of body classes.
+ */
+function course_add_variation_body_class( $classes ) {
+	$current_variation = get_option( 'course_theme_variation' );
+	if ( ! $current_variation ) {
+		return $classes;
+	}
+
+	$classes[] = 'is-' . $current_variation;
+
+	return $classes;
+}
+
+add_action( 'body_class', 'course_add_variation_body_class' );