export_options ) { $theme = get_option( 'stylesheet' ); $default_options = apply_filters( 'jet-data-importer/export/options-to-export', array( 'blogname', 'blogdescription', 'users_can_register', 'posts_per_page', 'date_format', 'time_format', 'thumbnail_size_w', 'thumbnail_size_h', 'thumbnail_crop', 'medium_size_w', 'medium_size_h', 'large_size_w', 'large_size_h', 'theme_mods_' . $theme, 'show_on_front', 'page_on_front', 'page_for_posts', 'permalink_structure', $theme . '_sidebars', $theme . '_sidbars', 'jet_site_conditions', 'elementor_container_width', 'jet-elements-settings', ) ); $user_options = jdi()->get_setting( array( 'export', 'options' ) ); if ( ! $user_options || ! is_array( $user_options ) ) { $user_options = array(); } $this->export_options = array_unique( array_merge( $default_options, $user_options ) ); } return $this->export_options; } /** * Process XML export * * @return string */ public function do_export( $into_file = true ) { ob_start(); ini_set( 'max_execution_time', -1 ); set_time_limit( 0 ); $use_custom_export = apply_filters( 'jet-data-importer/export/use-custom-export', false ); if ( $use_custom_export && function_exists( $use_custom_export ) ) { call_user_func( $use_custom_export ); } else { export_wp(); } $xml = ob_get_clean(); $xml = $this->add_extra_data( $xml ); if ( true === $into_file ) { $upload_dir = wp_upload_dir(); $upload_base_dir = $upload_dir['basedir']; $upload_base_url = $upload_dir['baseurl']; $filename = $this->get_filename(); $xml_dir = $upload_base_dir . '/' . $filename; $xml_url = $upload_base_url . '/' . $filename; file_put_contents( $xml_dir, $xml ); return $xml_url; } else { return $xml; } } /** * Returns filename for exported sample data * * @return void */ public function get_filename() { $date = date( 'm-d-Y' ); $template = get_template(); return apply_filters( 'jet-data-importer/export/filename', 'sample-data-' . $template . '-' . $date . '.xml' ); } /** * Add options and widgets to XML * * @param string $xml Exported XML. * @return string */ private function add_extra_data( $xml ) { ini_set( 'max_execution_time', -1 ); ini_set( 'memory_limit', -1 ); set_time_limit( 0 ); $xml = str_replace( "", "\r\n" . $this->get_options() . $this->get_widgets() . $this->get_tables(), $xml ); return $xml; } /** * Get options list in XML format. * * @return string */ public function get_options() { $options = ''; $format = "\t\t%2$s\r\n"; $export_options = $this->get_options_to_export(); foreach ( $export_options as $option ) { $value = get_option( $option ); if ( is_array( $value ) ) { $value = json_encode( $value ); } if ( ! empty( $option ) ) { $value = wxr_cdata( $value ); $options .= "\t\t{$value}\r\n"; } } return "\t\r\n" . $options . "\t\r\n"; } /** * Get tables to export * * @return string */ public function get_tables() { $user_tables = jdi()->get_setting( array( 'export', 'tables' ) ); if ( ! is_array( $user_tables ) ) { $user_tables = array(); } if ( class_exists( 'WooCommerce' ) && ! in_array( 'woocommerce_attribute_taxonomies', $user_tables ) ) { $user_tables[] = 'woocommerce_attribute_taxonomies'; } if ( empty( $user_tables ) ) { return; } global $wpdb; $result = ''; foreach ( $user_tables as $table ) { if ( ! jdi_tools()->is_db_table_exists( $table ) ) { continue; } $name = esc_attr( $wpdb->prefix . $table ); $data = $wpdb->get_results( "SELECT * FROM $name WHERE 1", ARRAY_A ); if ( empty( $data ) ) { continue; } $data = maybe_serialize( $data ); $result .= "\t\t<" . $table . ">" . wxr_cdata( $data ) . "\r\n"; } if ( empty( $result ) ) { return; } return "\t\r\n" . $result . "\r\n\t\r\n"; } /** * Get widgets data to export * * @return string */ private function get_widgets() { // Get all available widgets site supports $available_widgets = jdi_tools()->available_widgets(); // Get all widget instances for each widget $widget_instances = array(); foreach ( $available_widgets as $widget_data ) { // Get all instances for this ID base $instances = get_option( 'widget_' . $widget_data['id_base'] ); // Have instances if ( ! empty( $instances ) ) { // Loop instances foreach ( $instances as $instance_id => $instance_data ) { // Key is ID (not _multiwidget) if ( is_numeric( $instance_id ) ) { $unique_instance_id = $widget_data['id_base'] . '-' . $instance_id; $widget_instances[ $unique_instance_id ] = $instance_data; } } } } // Gather sidebars with their widget instances $sidebars_widgets = get_option( 'sidebars_widgets' ); // get sidebars and their unique widgets IDs $sidebars_widget_instances = array(); foreach ( $sidebars_widgets as $sidebar_id => $widget_ids ) { // Skip inactive widgets if ( 'wp_inactive_widgets' == $sidebar_id ) { continue; } // Skip if no data or not an array (array_version) if ( ! is_array( $widget_ids ) || empty( $widget_ids ) ) { continue; } // Loop widget IDs for this sidebar foreach ( $widget_ids as $widget_id ) { // Is there an instance for this widget ID? if ( isset( $widget_instances[ $widget_id ] ) ) { // Add to array $sidebars_widget_instances[ $sidebar_id ][ $widget_id ] = $widget_instances[ $widget_id ]; } } } // Filter pre-encoded data $data = apply_filters( 'jet-data-importer/export/pre-get-widgets', $sidebars_widget_instances ); // Encode the data for file contents $encoded_data = json_encode( $data ); $encoded_data = apply_filters( 'jet-data-importer/export/get-widgets', $encoded_data ); // Return contents return "\t" . wxr_cdata( $encoded_data ) . "\r\n"; } /** * Returns the instance. * * @since 1.0.0 * @return object */ public static function get_instance() { // If the single instance hasn't been set, set it now. if ( null == self::$instance ) { self::$instance = new self; } return self::$instance; } } } /** * Returns instance of Jet_WXR_Exporter * * @return object */ function jdi_exporter() { return Jet_WXR_Exporter::get_instance(); }