init_instance(); $this->load_hooks(); } /** * Load initial hooks. */ private function load_hooks() { add_action( 'init', array( $this, 'register_block_patterns' ), 9 ); add_action( 'admin_enqueue_scripts', array( $this, 'dashboard_scripts' ) ); add_action( 'wp_ajax_{{slug}}_set_admin_notice_viewed', array( $this, 'notice_closed' ) ); add_action( 'after_switch_theme', array( $this, 'update_global_styles_after_theme_switch' ) ); add_filter( 'gutenverse_block_config', array( $this, 'default_font' ), 10 ); add_filter( 'gutenverse_font_header', array( $this, 'default_header_font' ) ); add_filter( 'gutenverse_global_css', array( $this, 'global_header_style' ) ); add_filter( 'gutenverse_themes_template', array( $this, 'add_template' ), 10, 2 ); add_filter( 'gutenverse_themes_override_mechanism', '__return_true' ); {{additional_filter}} } /** * Add Template to Editor. * * @param array $template_files Path to Template File. * @param array $template_type Template Type. * * @return array */ public function add_template( $template_files, $template_type ) { if ( 'wp_template' === $template_type ) { $new_templates = array( {{custom_template_list}} ); foreach ( $new_templates as $template ) { $template_files[] = array( 'slug' => $template, 'path' => {{constant}}_DIR . "templates/{$template}.html", 'theme' => get_template(), 'type' => 'wp_template', 'title' => ucfirst( str_replace( '-', ' ', $template ) ), ); } } return $template_files; } /** * Initialize Instance. */ public function init_instance() { new Asset_Enqueue(); {{additional_class}} } /** * Update Global Styles After Theme Switch */ public function update_global_styles_after_theme_switch() { // Get the path to the current theme's theme.json file $theme_json_path = get_template_directory() . '/theme.json'; $theme_slug = get_option( 'stylesheet' ); // Get the current theme's slug $args = array( 'post_type' => 'wp_global_styles', 'post_status' => 'publish', 'name' => 'wp-global-styles-' . $theme_slug, 'posts_per_page' => 1, ); $global_styles_query = new WP_Query( $args ); // Check if the theme.json file exists if ( file_exists( $theme_json_path ) && $global_styles_query->have_posts() ) { $global_styles_query->the_post(); $global_styles_post_id = get_the_ID(); // Step 2: Get the existing global styles (color palette) $global_styles_content = json_decode( get_post_field( 'post_content', $global_styles_post_id ), true ); if ( isset( $global_styles_content['settings']['color']['palette']['theme'] ) ) { $existing_colors = $global_styles_content['settings']['color']['palette']['theme']; } else { $existing_colors = array(); } // Step 3: Extract slugs from the existing colors $existing_slugs = array_column( $existing_colors, 'slug' ); // Step 4:Read the contents of the theme.json file $theme_json_content = file_get_contents( $theme_json_path ); $theme_json_data = json_decode( $theme_json_content, true ); // Access the color palette from the theme.json file if ( isset( $theme_json_data['settings']['color']['palette'] ) ) { $theme_colors = $theme_json_data['settings']['color']['palette']; // Step 5: Loop through theme.json colors and add them if they don't exist foreach ( $theme_colors as $theme_color ) { if ( ! in_array( $theme_color['slug'], $existing_slugs ) ) { $existing_colors[] = $theme_color; // Add new color to the existing palette } } foreach ( $theme_colors as $theme_color ) { $theme_slug = $theme_color['slug']; // Step 6: Use in_array to check if the slug already exists in the global palette if ( ! in_array( $theme_slug, $existing_slugs ) ) { // If the slug does not exist, add the theme color to the global palette $global_colors[] = $theme_color; } } // Step 6: Update the global styles content with the new colors $global_styles_content['settings']['color']['palette']['theme'] = $existing_colors; // Step 7: Save the updated global styles back to the post wp_update_post( array( 'ID' => $global_styles_post_id, 'post_content' => wp_json_encode( $global_styles_content ), ) ); } wp_reset_postdata(); // Reset the query } } /** * Notice Closed */ public function notice_closed() { if ( isset( $_POST['nonce'] ) && wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['nonce'] ) ), '{{slug}}_admin_notice' ) ) { update_user_meta( get_current_user_id(), 'gutenverse_install_notice', 'true' ); } die; } /** * Generate Global Font * * @param string $value Value of the option. * * @return string */ public function global_header_style( $value ) { $theme_name = get_stylesheet(); $global_variable = get_option( 'gutenverse-global-variable-font-' . $theme_name ); if ( empty( $global_variable ) && function_exists( 'gutenverse_global_font_style_generator' ) ) { $font_variable = $this->default_font_variable(); $value .= \gutenverse_global_font_style_generator( $font_variable ); } return $value; } /** * Header Font. * * @param mixed $value Value of the option. * * @return mixed Value of the option. */ public function default_header_font( $value ) { if ( ! $value ) { $value = array( array( 'value' => 'Alfa Slab One', 'type' => 'google', 'weight' => 'bold', ), ); } return $value; } /** * Alter Default Font. * * @param array $config Array of Config. * * @return array */ public function default_font( $config ) { if ( empty( $config['globalVariable']['fonts'] ) ) { $config['globalVariable']['fonts'] = $this->default_font_variable(); return $config; } if ( ! empty( $config['globalVariable']['fonts'] ) ) { // Handle existing fonts. $theme_name = get_stylesheet(); $initial_font = get_option( 'gutenverse-font-init-' . $theme_name ); if ( ! $initial_font ) { $result = array(); $array1 = $config['globalVariable']['fonts']; $array2 = $this->default_font_variable(); foreach ( $array1 as $item ) { $result[ $item['id'] ] = $item; } foreach ( $array2 as $item ) { $result[ $item['id'] ] = $item; } $fonts = array(); foreach ( $result as $key => $font ) { $fonts[] = $font; } $config['globalVariable']['fonts'] = $fonts; update_option( 'gutenverse-font-init-' . $theme_name, true ); } } return $config; } /** * Default Font Variable. * * @return array */ public function default_font_variable() { return array( {{theme_fonts}} ); } /** * Register Block Pattern. */ public function register_block_patterns() { new Block_Patterns(); } /** * Enqueue scripts and styles. */ public function dashboard_scripts() { if ( is_admin() ) { // enqueue css. {{additional_admin_enqueue_script}} wp_enqueue_script('wp-api-fetch'); wp_localize_script( 'wp-api-fetch', 'GutenThemeConfig', $this->theme_config() ); } } /** * Check if plugin is installed. * * @param string $plugin_slug plugin slug. * * @return boolean */ public function is_installed( $plugin_slug ) { $all_plugins = get_plugins(); foreach ( $all_plugins as $plugin_file => $plugin_data ) { $plugin_dir = dirname($plugin_file); if ($plugin_dir === $plugin_slug) { return true; } } return false; } /** * Register static data to be used in theme's js file */ public function theme_config() { $active_plugins = get_option( 'active_plugins' ); $plugins = array(); foreach( $active_plugins as $active ) { $plugins[] = explode( '/', $active)[0]; } $config = array( 'home_url' => home_url(), 'activeTheme' => get_option( 'stylesheet' ), 'version' => {{constant}}_VERSION, 'images' => get_template_directory_uri() . '/assets/img/', 'title' => esc_html__( '{{title}}', '{{slug}}' ), 'description' => esc_html__( '{{description}}', '{{slug}}' ), 'pluginTitle' => esc_html__( 'Plugin Requirement', '{{slug}}' ), 'pluginDesc' => esc_html__( 'This theme require some plugins. Please make sure all the plugin below are installed and activated.', '{{slug}}' ), 'note' => esc_html__( '', '{{slug}}' ), 'note2' => esc_html__( '', '{{slug}}' ), 'demo' => esc_html__( '', '{{slug}}' ), 'demoUrl' => esc_url( 'https://gutenverse.com/demo?name={{slug}}' ), 'install' => '', 'installText' => esc_html__( 'Install Gutenverse Plugin', '{{slug}}' ), 'activateText' => esc_html__( 'Activate Gutenverse Plugin', '{{slug}}' ), 'doneText' => esc_html__( 'Gutenverse Plugin Installed', '{{slug}}' ), 'dashboardPage' => admin_url( 'themes.php?page={{slug}}-dashboard' ), 'logo' => {{theme_logo}}, 'slug' => '{{slug}}', 'upgradePro' => 'https://gutenverse.com/pro', 'libraryApi' => 'https://gutenverse.com//wp-json/gutenverse-server/v1', 'docsLink' => '{{docs_link}}', 'supportLink' => '{{support_link}}', 'pages' => array( {{page_list}} ), 'plugins' => array( {{plugins_required}} ), 'assign' => array( {{assign_templates}} ), 'dashboardData'=> array( {{dashboard_data}} ), {{additional_config}} ); if ( isset( $config['assign'] ) && $config['assign'] ) { $assign = $config['assign']; foreach ( $assign as $key => $value ) { $query = new \WP_Query( array( 'post_type' => 'page', 'post_status' => 'publish', 'title' => '' !== $value['page'] ? $value['page'] : $value['title'], 'posts_per_page' => 1, ) ); if ( $query->have_posts() ) { $post = $query->posts[0]; $page_template = get_page_template_slug( $post->ID ); $assign[ $key ]['status'] = array( 'exists' => true, 'using_template' => $page_template === $value['slug'], ); } else { $assign[ $key ]['status'] = array( 'exists' => false, 'using_template' => false, ); } wp_reset_postdata(); } $config['assign'] = $assign; } return $config; } }