$option_value ) { // Is option exist in defined array site_options()? if ( null !== $option_value ) { // Is option exist in defined array site_options()? if ( in_array( $option_name, self::site_options(), true ) ) { switch ( $option_name ) { // Set WooCommerce page ID by page Title. case 'woocommerce_shop_page_title': case 'woocommerce_cart_page_title': case 'woocommerce_checkout_page_title': case 'woocommerce_myaccount_page_title': case 'woocommerce_edit_address_page_title': case 'woocommerce_view_order_page_title': case 'woocommerce_change_password_page_title': case 'woocommerce_logout_page_title': $this->update_woocommerce_page_id_by_option_value( $option_name, $option_value ); break; case 'page_for_posts': case 'page_on_front': $this->update_page_id_by_option_value( $option_name, $option_value ); break; // nav menu locations. case 'nav_menu_locations': $this->set_nav_menu_locations( $option_value ); break; // import WooCommerce category images. case 'woocommerce_product_cat': $this->set_woocommerce_product_cat( $option_value ); break; // insert logo. case 'custom_logo': $this->insert_logo( $option_value ); break; case 'elementor_active_kit': if ( '' !== $option_value ) { $this->set_elementor_kit(); } break; default: update_option( $option_name, $option_value ); break; } } } } } /** * Update post option * * @since 2.2.2 * * @return void */ private function set_elementor_kit() { // Update Elementor Theme Kit Option. $args = array( 'post_type' => 'elementor_library', 'post_status' => 'publish', 'numberposts' => 1, 'meta_query' => array( //phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_query -- Setting elementor kit. WP Query would have been expensive. array( 'key' => '_astra_sites_imported_post', 'value' => '1', ), array( 'key' => '_elementor_template_type', 'value' => 'kit', ), ), ); $query = get_posts( $args ); if ( ! empty( $query ) && isset( $query[0] ) && isset( $query[0]->ID ) ) { update_option( 'elementor_active_kit', $query[0]->ID ); } } /** * Get post from post title and post type. * * @since 4.0.6 * * @param mixed $post_title post title. * @param string $post_type post type. * @return mixed */ public function get_page_by_title( $post_title, $post_type ) { $page = array(); $query = new WP_Query( array( 'post_type' => $post_type, 'title' => $post_title, 'posts_per_page' => 1, 'no_found_rows' => true, 'ignore_sticky_posts' => true, 'update_post_term_cache' => false, 'update_post_meta_cache' => false, ) ); if ( $query->have_posts() ) { $page = $query->posts[0]; } return $page; } /** * Update post option * * @since 1.0.2 * * @param string $option_name Option name. * @param mixed $option_value Option value. * @return void */ private function update_page_id_by_option_value( $option_name, $option_value ) { if ( empty( $option_value ) ) { return; } $page = $this->get_page_by_title( $option_value, 'page' ); if ( is_object( $page ) ) { update_option( $option_name, $page->ID ); } } /** * Update WooCommerce page ids. * * @since 1.1.6 * * @param string $option_name Option name. * @param mixed $option_value Option value. * @return void */ private function update_woocommerce_page_id_by_option_value( $option_name, $option_value ) { $option_name = str_replace( '_title', '_id', $option_name ); $this->update_page_id_by_option_value( $option_name, $option_value ); } /** * In WP nav menu is stored as ( 'menu_location' => 'menu_id' ); * In export we send 'menu_slug' like ( 'menu_location' => 'menu_slug' ); * In import we set 'menu_id' from menu slug like ( 'menu_location' => 'menu_id' ); * * @since 1.0.0 * @param array $nav_menu_locations Array of nav menu locations. */ private function set_nav_menu_locations( $nav_menu_locations = array() ) { $menu_locations = array(); // Update menu locations. if ( isset( $nav_menu_locations ) ) { foreach ( $nav_menu_locations as $menu => $value ) { $term = get_term_by( 'slug', $value, 'nav_menu' ); if ( is_object( $term ) ) { $menu_locations[ $menu ] = $term->term_id; } } set_theme_mod( 'nav_menu_locations', $menu_locations ); } } /** * Set WooCommerce category images. * * @since 1.1.4 * * @param array $cats Array of categories. */ private function set_woocommerce_product_cat( $cats = array() ) { if ( isset( $cats ) ) { foreach ( $cats as $key => $cat ) { if ( ! empty( $cat['slug'] ) && ! empty( $cat['thumbnail_src'] ) ) { $downloaded_image = Astra_Sites_Image_Importer::get_instance()->import( array( 'url' => $cat['thumbnail_src'], 'id' => 0, ) ); if ( $downloaded_image['id'] ) { $term = get_term_by( 'slug', $cat['slug'], 'product_cat' ); if ( is_object( $term ) ) { update_term_meta( $term->term_id, 'thumbnail_id', $downloaded_image['id'] ); } } } } } } /** * Insert Logo By URL * * @since 1.0.0 * @param string $image_url Logo URL. * @return void */ private function insert_logo( $image_url = '' ) { $downloaded_image = Astra_Sites_Image_Importer::get_instance()->import( array( 'url' => $image_url, 'id' => 0, ) ); if ( $downloaded_image['id'] ) { Astra_WXR_Importer::instance()->track_post( $downloaded_image['id'] ); set_theme_mod( 'custom_logo', $downloaded_image['id'] ); } } }