$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; default: update_option( $option_name, $option_value ); break; } } } } } /** * 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 ) { $page = get_page_by_title( $option_value ); 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() ) { $menu_locations = array(); if ( isset( $cats ) ) { foreach ( $cats as $key => $cat ) { if ( ! empty( $cat['slug'] ) && ! empty( $cat['thumbnail_src'] ) ) { $image = (object) Astra_Sites_Helper::_sideload_image( $cat['thumbnail_src'] ); if ( ! is_wp_error( $image ) ) { if ( isset( $image->attachment_id ) && ! empty( $image->attachment_id ) ) { $term = get_term_by( 'slug', $cat['slug'], 'product_cat' ); if ( is_object( $term ) ) { update_term_meta( $term->term_id, 'thumbnail_id', $image->attachment_id ); } } } } } } } /** * Insert Logo By URL * * @since 1.0.0 * @param string $image_url Logo URL. * @return void */ private function insert_logo( $image_url = '' ) { $attachment_id = $this->download_image( $image_url ); if ( $attachment_id ) { set_theme_mod( 'custom_logo', $attachment_id ); } } /** * Download image by URL * * @since 1.3.13 * * @param string $image_url Logo URL. * @return mixed false|Attachment ID */ private function download_image( $image_url = '' ) { $data = (object) Astra_Sites_Helper::_sideload_image( $image_url ); if ( ! is_wp_error( $data ) ) { if ( isset( $data->attachment_id ) && ! empty( $data->attachment_id ) ) { return $data->attachment_id; } } return false; } }