array( 'name' => __( 'Introduction', 'woocommerce' ), 'view' => array( $this, 'wc_setup_introduction' ), 'handler' => '', ), 'pages' => array( 'name' => __( 'Page setup', 'woocommerce' ), 'view' => array( $this, 'wc_setup_pages' ), 'handler' => array( $this, 'wc_setup_pages_save' ), ), 'location' => array( 'name' => __( 'Store location', 'woocommerce' ), 'view' => array( $this, 'wc_setup_location' ), 'handler' => array( $this, 'wc_setup_location_save' ), ), 'shipping' => array( 'name' => __( 'Shipping', 'woocommerce' ), 'view' => array( $this, 'wc_setup_shipping' ), 'handler' => array( $this, 'wc_setup_shipping_save' ), ), 'payments' => array( 'name' => __( 'Payments', 'woocommerce' ), 'view' => array( $this, 'wc_setup_payments' ), 'handler' => array( $this, 'wc_setup_payments_save' ), ), 'theme' => array( 'name' => __( 'Theme', 'woocommerce' ), 'view' => array( $this, 'wc_setup_theme' ), 'handler' => array( $this, 'wc_setup_theme_save' ), ), 'next_steps' => array( 'name' => __( 'Ready!', 'woocommerce' ), 'view' => array( $this, 'wc_setup_ready' ), 'handler' => '', ), ); // Hide storefront step if using a WooCommerce theme or user cannot modify themes. if ( ! current_user_can( 'install_themes' ) || ! current_user_can( 'switch_themes' ) || is_multisite() || current_theme_supports( 'woocommerce' ) ) { unset( $default_steps['theme'] ); } $this->steps = apply_filters( 'woocommerce_setup_wizard_steps', $default_steps ); $this->step = isset( $_GET['step'] ) ? sanitize_key( $_GET['step'] ) : current( array_keys( $this->steps ) ); $suffix = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min'; wp_register_script( 'jquery-blockui', WC()->plugin_url() . '/assets/js/jquery-blockui/jquery.blockUI' . $suffix . '.js', array( 'jquery' ), '2.70', true ); wp_register_script( 'select2', WC()->plugin_url() . '/assets/js/select2/select2.full' . $suffix . '.js', array( 'jquery' ), '4.0.3' ); wp_register_script( 'wc-enhanced-select', WC()->plugin_url() . '/assets/js/admin/wc-enhanced-select' . $suffix . '.js', array( 'jquery', 'select2' ), WC_VERSION ); wp_localize_script( 'wc-enhanced-select', 'wc_enhanced_select_params', array( 'i18n_no_matches' => _x( 'No matches found', 'enhanced select', 'woocommerce' ), 'i18n_ajax_error' => _x( 'Loading failed', 'enhanced select', 'woocommerce' ), 'i18n_input_too_short_1' => _x( 'Please enter 1 or more characters', 'enhanced select', 'woocommerce' ), 'i18n_input_too_short_n' => _x( 'Please enter %qty% or more characters', 'enhanced select', 'woocommerce' ), 'i18n_input_too_long_1' => _x( 'Please delete 1 character', 'enhanced select', 'woocommerce' ), 'i18n_input_too_long_n' => _x( 'Please delete %qty% characters', 'enhanced select', 'woocommerce' ), 'i18n_selection_too_long_1' => _x( 'You can only select 1 item', 'enhanced select', 'woocommerce' ), 'i18n_selection_too_long_n' => _x( 'You can only select %qty% items', 'enhanced select', 'woocommerce' ), 'i18n_load_more' => _x( 'Loading more results…', 'enhanced select', 'woocommerce' ), 'i18n_searching' => _x( 'Searching…', 'enhanced select', 'woocommerce' ), 'ajax_url' => admin_url( 'admin-ajax.php' ), 'search_products_nonce' => wp_create_nonce( 'search-products' ), 'search_customers_nonce' => wp_create_nonce( 'search-customers' ), ) ); wp_enqueue_style( 'woocommerce_admin_styles', WC()->plugin_url() . '/assets/css/admin.css', array(), WC_VERSION ); wp_enqueue_style( 'wc-setup', WC()->plugin_url() . '/assets/css/wc-setup.css', array( 'dashicons', 'install' ), WC_VERSION ); wp_register_script( 'wc-setup', WC()->plugin_url() . '/assets/js/admin/wc-setup' . $suffix . '.js', array( 'jquery', 'wc-enhanced-select', 'jquery-blockui' ), WC_VERSION ); wp_localize_script( 'wc-setup', 'wc_setup_params', array( 'locale_info' => json_encode( include( WC()->plugin_path() . '/i18n/locale-info.php' ) ), ) ); if ( ! empty( $_POST['save_step'] ) && isset( $this->steps[ $this->step ]['handler'] ) ) { call_user_func( $this->steps[ $this->step ]['handler'], $this ); } ob_start(); $this->setup_wizard_header(); $this->setup_wizard_steps(); $this->setup_wizard_content(); $this->setup_wizard_footer(); exit; } /** * Get the URL for the next step's screen. * @param string step slug (default: current step) * @return string URL for next step if a next step exists. * Admin URL if it's the last step. * Empty string on failure. * @since 3.0.0 */ public function get_next_step_link( $step = '' ) { if ( ! $step ) { $step = $this->step; } $keys = array_keys( $this->steps ); if ( end( $keys ) === $step ) { return admin_url(); } $step_index = array_search( $step, $keys ); if ( false === $step_index ) { return ''; } return add_query_arg( 'step', $keys[ $step_index + 1 ] ); } /** * Setup Wizard Header. */ public function setup_wizard_header() { ?> >
It’s completely optional and shouldn’t take longer than five minutes.', 'woocommerce' ); ?>
get_next_step_link() ) ); exit; } /** * Location and Tax settings. */ public function wc_setup_location() { $user_location = WC_Geolocation::geolocate_ip(); $country = ! empty( $user_location['country'] ) ? $user_location['country'] : 'US'; $state = ! empty( $user_location['state'] ) ? $user_location['state'] : '*'; $state = 'US' === $country && '*' === $state ? 'AL' : $state; // Defaults $currency = get_option( 'woocommerce_currency', 'GBP' ); $currency_pos = get_option( 'woocommerce_currency_pos', 'left' ); $decimal_sep = get_option( 'woocommerce_price_decimal_sep', '.' ); $num_decimals = get_option( 'woocommerce_price_num_decimals', '2' ); $thousand_sep = get_option( 'woocommerce_price_thousand_sep', ',' ); ?> plugin_path() . '/i18n/locale-info.php' ); $tax_rates = array(); $country = WC()->countries->get_base_country(); $state = WC()->countries->get_base_state(); if ( isset( $locale_info[ $country ] ) ) { if ( isset( $locale_info[ $country ]['tax_rates'][ $state ] ) ) { $tax_rates = $locale_info[ $country ]['tax_rates'][ $state ]; } elseif ( isset( $locale_info[ $country ]['tax_rates'][''] ) ) { $tax_rates = $locale_info[ $country ]['tax_rates']['']; } if ( isset( $locale_info[ $country ]['tax_rates']['*'] ) ) { $tax_rates = array_merge( $locale_info[ $country ]['tax_rates']['*'], $tax_rates ); } } if ( $tax_rates ) { $loop = 0; foreach ( $tax_rates as $rate ) { $tax_rate = array( 'tax_rate_country' => $rate['country'], 'tax_rate_state' => $rate['state'], 'tax_rate' => $rate['rate'], 'tax_rate_name' => $rate['name'], 'tax_rate_priority' => isset( $rate['priority'] ) ? absint( $rate['priority'] ) : 1, 'tax_rate_compound' => 0, 'tax_rate_shipping' => $rate['shipping'] ? 1 : 0, 'tax_rate_order' => $loop ++, 'tax_rate_class' => '', ); WC_Tax::_insert_tax_rate( $tax_rate ); } } } wp_redirect( esc_url_raw( $this->get_next_step_link() ) ); exit; } /** * Tout WooCommerce Services for North American stores. */ protected function wc_setup_wcs_tout() { $base_location = wc_get_base_location(); if ( false === $base_location['country'] ) { $base_location = WC_Geolocation::geolocate_ip(); } if ( ! in_array( $base_location['country'], array( 'US', 'CA' ), true ) ) { return; } $default_content = array( 'title' => __( 'Enable WooCommerce Shipping (recommended)', 'woocommerce' ), 'description' => __( 'Print labels and get discounted USPS shipping rates, right from your WooCommerce dashboard. Powered by WooCommerce Services.', 'woocommerce' ), ); switch ( $base_location['country'] ) { case 'CA': $local_content = array( 'title' => __( 'Enable WooCommerce Shipping (recommended)', 'woocommerce' ), 'description' => __( 'Display live rates from Canada Post at checkout to make shipping a breeze. Powered by WooCommerce Services.', 'woocommerce' ), ); break; default: $local_content = array(); } $content = wp_parse_args( $local_content, $default_content ); ?>