get( 'Version' ) ); // Then enqueue the child theme stylesheet. wp_enqueue_style( 'child-theme-style', get_stylesheet_uri(), array(), filemtime( get_theme_file_path( 'style.css' ) ) ); } // /assets /** * Copy parent theme options. * * @return void */ public static function parent_options() { // Variables $child_theme = get_stylesheet(); $parent_theme = get_template(); // Processing /** * Copy theme mods. * * WordPress sets default theme mods when a theme is switched. * It looks like it creates max 4 mod keys during the action. * So, anything above, we presume child theme mods already * exist and we don't proceed with copying. * * @link https://developer.wordpress.org/reference/functions/switch_theme/ */ if ( // Check for existing child theme mods: 4 >= count( (array) get_theme_mods() ) // Check for WebMan Design child theme mods: && ! get_theme_mod( '__customize_timestamp' ) // Check for this child theme mods (see below): && ! get_theme_mod( '__switch_theme_timestamp' ) ) { // Get parent theme mods. $parent_theme_mods = get_option( 'theme_mods_' . $parent_theme ); // Copy parent theme options to our child theme ones. update_option( 'theme_mods_' . $child_theme, $parent_theme_mods ); // Mark as done for the future. set_theme_mod( '__switch_theme_timestamp', esc_attr( gmdate( 'ymdHis' ) ) ); } /** * Copy Site Editor user mods. * * Relevant for block or hybrid themes. */ if ( false === get_theme_mod( '__site_editor_mods_copy_timestamp' ) ) { $query = new WP_Query( array( 'post_status' => array( 'publish' ), 'post_type' => array( 'wp_template', 'wp_template_part', 'wp_global_styles' ), 'posts_per_page' => -1, 'no_found_rows' => true, 'tax_query' => array( array( 'taxonomy' => 'wp_theme', 'field' => 'name', 'terms' => $parent_theme, ), ), ) ); foreach ( $query->posts as $post ) { $wp_theme = wp_get_object_terms( $post->ID, 'wp_theme', array( 'fields' => 'slugs' ) ); if ( ! empty( $wp_theme ) && ! is_wp_error( $wp_theme ) && in_array( $parent_theme, (array) $wp_theme ) ) { // Add the child theme to `wp_theme` taxonomy terms. $wp_theme = (array) $wp_theme; $wp_theme[] = $child_theme; wp_set_object_terms( $post->ID, $wp_theme, 'wp_theme' ); } } // Mark as done for the future. set_theme_mod( '__site_editor_mods_copy_timestamp', esc_attr( gmdate( 'ymdHis' ) ) ); } } // /parent_options /** * Make a (Template Part) block work if it has `theme` attribute set. * * @param mixed $render * @param array $block * * @return mixed */ public static function block( $render, array $block ) { // Requirements check if ( ! isset( $block['attrs']['theme'] ) || get_stylesheet() === $block['attrs']['theme'] ) { return $render; } // Processing if ( doing_filter( 'pre_render_block' ) ) { add_filter( 'stylesheet', __CLASS__ . '::set_stylesheet_parent' ); } else { remove_filter( 'stylesheet', __CLASS__ . '::set_stylesheet_parent' ); } // Output return $render; } // /block /** * Change stylesheet to template. * * @param string $stylesheet * * @return string */ public static function set_stylesheet_parent( string $stylesheet ): string { // Requirements check // Make sure we don't screw up the assets enqueuing. if ( doing_action( 'wp_enqueue_scripts' ) ) { return $stylesheet; } // Output return (string) get_template(); } // /set_stylesheet_parent } Setup::init();