@@ -81,6 +81,7 @@ public function __construct() {
8181 add_action ( 'init ' , [ $ this , 'load_api_settings ' ] );
8282 add_action ( 'after_setup_theme ' , [ $ this , 'load_color_palette ' ], 999 );
8383 add_filter ( 'block_editor_settings_all ' , [ $ this , 'load_color_palette_editor_settings ' ], 999 );
84+ add_filter ( 'wp_theme_json_data_theme ' , [ $ this , 'load_color_palette_theme_json ' ], 999 );
8485 add_action ( 'init ' , [ $ this , 'init_post_meta ' ] );
8586 add_action ( 'admin_head-post.php ' , [ $ this , 'admin_editor_width ' ], 100 );
8687 add_action ( 'admin_head-post-new.php ' , [ $ this , 'admin_editor_width ' ], 100 );
@@ -416,9 +417,70 @@ public function load_color_palette_editor_settings( $settings ) {
416417 }
417418 }
418419 }
419-
420420 return $ settings ;
421421 }
422+ /**
423+ * Load custom colors into theme.json for Site Editor compatibility.
424+ *
425+ * @param WP_Theme_JSON_Data $theme_json The theme.json data object.
426+ * @return WP_Theme_JSON_Data Modified theme.json data.
427+ */
428+ public function load_color_palette_theme_json ( $ theme_json ) {
429+ $ palette = json_decode ( get_option ( 'kadence_blocks_colors ' ), true );
430+ if ( isset ( $ palette ['palette ' ] ) && is_array ( $ palette ['palette ' ] ) && ! empty ( $ palette ['palette ' ] ) ) {
431+ $ san_palette = [];
432+ foreach ( $ palette ['palette ' ] as $ item ) {
433+ $ san_palette [] = [
434+ 'color ' => $ item ['color ' ],
435+ 'name ' => $ item ['name ' ],
436+ 'slug ' => $ item ['slug ' ],
437+ ];
438+ }
439+ if ( ! empty ( $ san_palette ) ) {
440+ $ data = $ theme_json ->get_data ();
441+ $ override = isset ( $ palette ['override ' ] ) && true === $ palette ['override ' ];
442+
443+ if ( $ override ) {
444+ // Override mode: only show custom colors, replace theme palette.
445+ $ theme_json ->update_with (
446+ [
447+ 'version ' => 2 ,
448+ 'settings ' => [
449+ 'color ' => [
450+ 'palette ' => [
451+ 'theme ' => $ san_palette ,
452+ ],
453+ ],
454+ ],
455+ ]
456+ );
457+ } else {
458+ // Merge mode: add custom colors to theme palette.
459+ $ existing_theme = isset ( $ data ['settings ' ]['color ' ]['palette ' ]['theme ' ] )
460+ ? $ data ['settings ' ]['color ' ]['palette ' ]['theme ' ]
461+ : [];
462+
463+ // Merge custom colors with theme palette.
464+ $ merged_palette = array_merge ( $ existing_theme , $ san_palette );
465+ $ merged_palette = array_values ( array_map ( 'unserialize ' , array_unique ( array_map ( 'serialize ' , $ merged_palette ) ) ) );
466+
467+ $ theme_json ->update_with (
468+ [
469+ 'version ' => 2 ,
470+ 'settings ' => [
471+ 'color ' => [
472+ 'palette ' => [
473+ 'theme ' => $ merged_palette ,
474+ ],
475+ ],
476+ ],
477+ ]
478+ );
479+ }
480+ }
481+ }
482+ return $ theme_json ;
483+ }
422484 /**
423485 * Load Gutenberg Palette
424486 */
0 commit comments