377 lines
8.9 KiB
PHP
377 lines
8.9 KiB
PHP
<?php
|
|
/**
|
|
* Customizer Site options importer class.
|
|
*
|
|
* @since 1.0.0
|
|
* @package Astra Addon
|
|
*/
|
|
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
exit;
|
|
}
|
|
|
|
/**
|
|
* Customizer Site options importer class.
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
class Astra_Site_Options_Import {
|
|
|
|
/**
|
|
* Instance of Astra_Site_Options_Importer
|
|
*
|
|
* @since 1.0.0
|
|
* @var (Object) Astra_Site_Options_Importer
|
|
*/
|
|
private static $instance = null;
|
|
|
|
/**
|
|
* Instanciate Astra_Site_Options_Importer
|
|
*
|
|
* @since 1.0.0
|
|
* @return (Object) Astra_Site_Options_Importer
|
|
*/
|
|
public static function instance() {
|
|
if ( ! isset( self::$instance ) ) {
|
|
self::$instance = new self();
|
|
}
|
|
|
|
return self::$instance;
|
|
}
|
|
|
|
/**
|
|
* Site Options
|
|
*
|
|
* @since 1.0.2
|
|
*
|
|
* @return array List of defined array.
|
|
*/
|
|
private static function site_options() {
|
|
return array(
|
|
'custom_logo',
|
|
'nav_menu_locations',
|
|
'show_on_front',
|
|
'page_on_front',
|
|
'page_for_posts',
|
|
|
|
// Plugin: Elementor.
|
|
'elementor_container_width',
|
|
'elementor_cpt_support',
|
|
'elementor_css_print_method',
|
|
'elementor_default_generic_fonts',
|
|
'elementor_disable_color_schemes',
|
|
'elementor_disable_typography_schemes',
|
|
'elementor_editor_break_lines',
|
|
'elementor_exclude_user_roles',
|
|
'elementor_global_image_lightbox',
|
|
'elementor_page_title_selector',
|
|
'elementor_scheme_color',
|
|
'elementor_scheme_color-picker',
|
|
'elementor_scheme_typography',
|
|
'elementor_space_between_widgets',
|
|
'elementor_stretched_section_container',
|
|
'elementor_load_fa4_shim',
|
|
'elementor_active_kit',
|
|
|
|
// Plugin: Beaver Builder.
|
|
'_fl_builder_enabled_icons',
|
|
'_fl_builder_enabled_modules',
|
|
'_fl_builder_post_types',
|
|
'_fl_builder_color_presets',
|
|
'_fl_builder_services',
|
|
'_fl_builder_settings',
|
|
'_fl_builder_user_access',
|
|
'_fl_builder_enabled_templates',
|
|
|
|
// Plugin: WooCommerce.
|
|
// Pages.
|
|
'woocommerce_shop_page_title',
|
|
'woocommerce_cart_page_title',
|
|
'woocommerce_checkout_page_title',
|
|
'woocommerce_myaccount_page_title',
|
|
'woocommerce_edit_address_page_title',
|
|
'woocommerce_view_order_page_title',
|
|
'woocommerce_change_password_page_title',
|
|
'woocommerce_logout_page_title',
|
|
|
|
// Account & Privacy.
|
|
'woocommerce_enable_guest_checkout',
|
|
'woocommerce_enable_checkout_login_reminder',
|
|
'woocommerce_enable_signup_and_login_from_checkout',
|
|
'woocommerce_enable_myaccount_registration',
|
|
'woocommerce_registration_generate_username',
|
|
|
|
// Plugin: Easy Digital Downloads - EDD.
|
|
'edd_settings',
|
|
|
|
// Plugin: WPForms.
|
|
'wpforms_settings',
|
|
|
|
// Categories.
|
|
'woocommerce_product_cat',
|
|
|
|
// Plugin: LearnDash LMS.
|
|
'learndash_settings_theme_ld30',
|
|
'learndash_settings_courses_themes',
|
|
|
|
// Astra Theme Global Color Palette and Typography Preset options.
|
|
'astra-color-palettes',
|
|
'astra-typography-presets',
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Import site options.
|
|
*
|
|
* @since 1.0.2 Updated option if exist in defined option array 'site_options()'.
|
|
*
|
|
* @since 1.0.0
|
|
*
|
|
* @param (Array) $options Array of site options to be imported from the demo.
|
|
*/
|
|
public function import_options( $options = array() ) {
|
|
|
|
if ( ! isset( $options ) ) {
|
|
return;
|
|
}
|
|
|
|
foreach ( $options as $option_name => $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'] );
|
|
}
|
|
|
|
}
|
|
|
|
}
|