2015-04-28 12:19:16 +00:00
< ? php
/**
2015-11-03 13:53:50 +00:00
* Setup Wizard Class
2015-04-28 12:19:16 +00:00
*
* Takes new users through some basic steps to setup their store .
*
* @ author WooThemes
* @ category Admin
* @ package WooCommerce / Admin
2016-06-13 15:14:35 +00:00
* @ version 2.6 . 0
2016-09-02 02:40:36 +00:00
*/
2015-04-28 12:19:16 +00:00
if ( ! defined ( 'ABSPATH' ) ) {
exit ;
}
/**
2015-11-03 12:28:01 +00:00
* WC_Admin_Setup_Wizard class .
2015-04-28 12:19:16 +00:00
*/
class WC_Admin_Setup_Wizard {
/** @var string Currenct Step */
private $step = '' ;
/** @var array Steps for the setup wizard */
private $steps = array ();
/** @var array Tweets user can optionally send after install */
private $tweets = array (
2015-08-21 17:57:14 +00:00
'Someone give me woo-t, I just set up a new store with #WordPress and @WooCommerce!' ,
2016-08-27 02:08:49 +00:00
'Someone give me high five, I just set up a new store with #WordPress and @WooCommerce!' ,
2015-04-28 12:19:16 +00:00
);
/**
* Hook in tabs .
*/
public function __construct () {
2015-04-29 10:32:03 +00:00
if ( apply_filters ( 'woocommerce_enable_setup_wizard' , true ) && current_user_can ( 'manage_woocommerce' ) ) {
add_action ( 'admin_menu' , array ( $this , 'admin_menus' ) );
add_action ( 'admin_init' , array ( $this , 'setup_wizard' ) );
}
2015-04-28 12:19:16 +00:00
}
/**
* Add admin menus / screens .
*/
public function admin_menus () {
add_dashboard_page ( '' , '' , 'manage_options' , 'wc-setup' , '' );
}
/**
2015-11-03 12:28:01 +00:00
* Show the setup wizard .
2015-04-28 12:19:16 +00:00
*/
public function setup_wizard () {
2015-04-28 12:27:56 +00:00
if ( empty ( $_GET [ 'page' ] ) || 'wc-setup' !== $_GET [ 'page' ] ) {
2015-04-28 12:19:16 +00:00
return ;
}
2017-03-28 21:45:12 +00:00
$default_steps = array (
2015-04-28 12:19:16 +00:00
'introduction' => array (
2016-08-27 06:14:06 +00:00
'name' => __ ( 'Introduction' , 'woocommerce' ),
2015-04-28 12:19:16 +00:00
'view' => array ( $this , 'wc_setup_introduction' ),
2016-08-27 01:46:45 +00:00
'handler' => '' ,
2015-04-28 12:19:16 +00:00
),
'pages' => array (
2016-10-12 10:16:30 +00:00
'name' => __ ( 'Page setup' , 'woocommerce' ),
2015-04-28 12:19:16 +00:00
'view' => array ( $this , 'wc_setup_pages' ),
2016-08-27 01:46:45 +00:00
'handler' => array ( $this , 'wc_setup_pages_save' ),
2015-04-28 12:19:16 +00:00
),
'locale' => array (
2016-10-12 10:16:30 +00:00
'name' => __ ( 'Store locale' , 'woocommerce' ),
2015-04-28 12:19:16 +00:00
'view' => array ( $this , 'wc_setup_locale' ),
2016-08-27 01:46:45 +00:00
'handler' => array ( $this , 'wc_setup_locale_save' ),
2015-04-28 12:19:16 +00:00
),
'shipping_taxes' => array (
2016-10-12 10:16:30 +00:00
'name' => __ ( 'Shipping & tax' , 'woocommerce' ),
2015-04-28 12:19:16 +00:00
'view' => array ( $this , 'wc_setup_shipping_taxes' ),
'handler' => array ( $this , 'wc_setup_shipping_taxes_save' ),
),
2015-06-08 15:34:13 +00:00
'payments' => array (
2016-08-27 06:14:06 +00:00
'name' => __ ( 'Payments' , 'woocommerce' ),
2015-06-08 15:34:13 +00:00
'view' => array ( $this , 'wc_setup_payments' ),
'handler' => array ( $this , 'wc_setup_payments_save' ),
),
2017-05-17 16:42:18 +00:00
'theme' => array (
'name' => __ ( 'Theme' , 'woocommerce' ),
'view' => array ( $this , 'wc_setup_theme' ),
'handler' => array ( $this , 'wc_setup_theme_save' ),
),
2015-04-28 12:19:16 +00:00
'next_steps' => array (
2016-08-27 06:14:06 +00:00
'name' => __ ( 'Ready!' , 'woocommerce' ),
2015-04-28 12:19:16 +00:00
'view' => array ( $this , 'wc_setup_ready' ),
2016-08-27 01:46:45 +00:00
'handler' => '' ,
),
2015-04-28 12:19:16 +00:00
);
2017-03-28 21:45:12 +00:00
2017-05-17 16:42:18 +00:00
// 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' ] );
}
2017-03-28 21:45:12 +00:00
$this -> steps = apply_filters ( 'woocommerce_setup_wizard_steps' , $default_steps );
2015-04-28 12:19:16 +00:00
$this -> step = isset ( $_GET [ 'step' ] ) ? sanitize_key ( $_GET [ 'step' ] ) : current ( array_keys ( $this -> steps ) );
2015-04-28 12:27:56 +00:00
$suffix = defined ( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min' ;
2015-04-28 12:19:16 +00:00
2015-08-21 18:12:36 +00:00
wp_register_script ( 'jquery-blockui' , WC () -> plugin_url () . '/assets/js/jquery-blockui/jquery.blockUI' . $suffix . '.js' , array ( 'jquery' ), '2.70' , true );
2016-12-20 16:45:22 +00:00
wp_register_script ( 'select2' , WC () -> plugin_url () . '/assets/js/select2/select2.full' . $suffix . '.js' , array ( 'jquery' ), '4.0.3' );
2015-04-28 12:19:16 +00:00
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' ),
2016-08-27 01:46:45 +00:00
'search_customers_nonce' => wp_create_nonce ( 'search-customers' ),
2015-04-28 12:19:16 +00:00
) );
2015-04-28 12:27:56 +00:00
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 );
2015-08-21 18:12:36 +00:00
wp_register_script ( 'wc-setup' , WC () -> plugin_url () . '/assets/js/admin/wc-setup.min.js' , array ( 'jquery' , 'wc-enhanced-select' , 'jquery-blockui' ), WC_VERSION );
2015-04-28 12:19:16 +00:00
wp_localize_script ( 'wc-setup' , 'wc_setup_params' , array (
2016-08-27 01:46:45 +00:00
'locale_info' => json_encode ( include ( WC () -> plugin_path () . '/i18n/locale-info.php' ) ),
2015-04-28 12:19:16 +00:00
) );
if ( ! empty ( $_POST [ 'save_step' ] ) && isset ( $this -> steps [ $this -> step ][ 'handler' ] ) ) {
2017-03-31 17:32:19 +00:00
call_user_func ( $this -> steps [ $this -> step ][ 'handler' ], $this );
2015-04-28 12:19:16 +00:00
}
2015-04-29 15:34:07 +00:00
ob_start ();
2015-04-28 12:19:16 +00:00
$this -> setup_wizard_header ();
$this -> setup_wizard_steps ();
$this -> setup_wizard_content ();
$this -> setup_wizard_footer ();
exit ;
}
2017-03-31 17:32:19 +00:00
/**
* 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 .
2017-04-03 18:24:01 +00:00
* @ since 3.0 . 0
2017-03-31 17:32:19 +00:00
*/
public function get_next_step_link ( $step = '' ) {
if ( ! $step ) {
$step = $this -> step ;
}
2015-04-28 12:19:16 +00:00
$keys = array_keys ( $this -> steps );
2017-03-31 17:32:19 +00:00
if ( end ( $keys ) === $step ) {
2017-03-29 18:22:55 +00:00
return admin_url ();
}
2017-03-31 17:32:19 +00:00
$step_index = array_search ( $step , $keys );
if ( false === $step_index ) {
2017-04-03 16:54:24 +00:00
return '' ;
2017-03-31 17:32:19 +00:00
}
return add_query_arg ( 'step' , $keys [ $step_index + 1 ] );
2015-04-28 12:19:16 +00:00
}
/**
2015-11-03 12:28:01 +00:00
* Setup Wizard Header .
2015-04-28 12:19:16 +00:00
*/
public function setup_wizard_header () {
?>
<! DOCTYPE html >
2016-05-27 01:48:49 +00:00
< html < ? php language_attributes (); ?> >
2015-04-28 12:19:16 +00:00
< head >
< meta name = " viewport " content = " width=device-width " />
< meta http - equiv = " Content-Type " content = " text/html; charset=utf-8 " />
2017-03-13 05:39:46 +00:00
< title >< ? php esc_html_e ( 'WooCommerce › Setup Wizard' , 'woocommerce' ); ?> </title>
2015-04-28 12:27:56 +00:00
< ? php wp_print_scripts ( 'wc-setup' ); ?>
2015-08-21 07:46:10 +00:00
< ? php do_action ( 'admin_print_styles' ); ?>
< ? php do_action ( 'admin_head' ); ?>
2015-04-28 12:19:16 +00:00
</ head >
< body class = " wc-setup wp-core-ui " >
2016-09-27 15:44:48 +00:00
< h1 id = " wc-logo " >< a href = " https://woocommerce.com/ " >< img src = " <?php echo WC()->plugin_url(); ?>/assets/images/woocommerce_logo.png " alt = " WooCommerce " /></ a ></ h1 >
2015-04-28 12:19:16 +00:00
< ? php
}
/**
2015-11-03 12:28:01 +00:00
* Setup Wizard Footer .
2015-04-28 12:19:16 +00:00
*/
public function setup_wizard_footer () {
?>
2015-06-09 14:54:46 +00:00
< ? php if ( 'next_steps' === $this -> step ) : ?>
2017-03-13 05:39:46 +00:00
< a class = " wc-return-to-dashboard " href = " <?php echo esc_url( admin_url() ); ?> " >< ? php esc_html_e ( 'Return to the WordPress Dashboard' , 'woocommerce' ); ?> </a>
2015-06-09 14:54:46 +00:00
< ? php endif ; ?>
2015-04-28 12:19:16 +00:00
</ body >
</ html >
< ? php
}
/**
2015-11-03 12:28:01 +00:00
* Output the steps .
2015-04-28 12:19:16 +00:00
*/
public function setup_wizard_steps () {
2015-06-08 15:34:13 +00:00
$ouput_steps = $this -> steps ;
array_shift ( $ouput_steps );
2015-04-28 12:19:16 +00:00
?>
< ol class = " wc-setup-steps " >
2015-06-08 15:34:13 +00:00
< ? php foreach ( $ouput_steps as $step_key => $step ) : ?>
2015-04-28 12:19:16 +00:00
< li class = " <?php
if ( $step_key === $this -> step ) {
echo 'active' ;
} elseif ( array_search ( $this -> step , array_keys ( $this -> steps ) ) > array_search ( $step_key , array_keys ( $this -> steps ) ) ) {
echo 'done' ;
}
?> "><?php echo esc_html( $step['name'] ); ?></li>
< ? php endforeach ; ?>
</ ol >
< ? php
}
/**
2015-11-03 12:28:01 +00:00
* Output the content for the current step .
2015-04-28 12:19:16 +00:00
*/
public function setup_wizard_content () {
echo '<div class="wc-setup-content">' ;
2017-03-31 17:32:19 +00:00
call_user_func ( $this -> steps [ $this -> step ][ 'view' ], $this );
2015-04-28 12:19:16 +00:00
echo '</div>' ;
}
/**
2015-11-03 12:28:01 +00:00
* Introduction step .
2015-04-28 12:19:16 +00:00
*/
2017-03-31 17:32:19 +00:00
public function wc_setup_introduction () {
2015-04-28 12:19:16 +00:00
?>
2017-03-13 05:39:46 +00:00
< h1 >< ? php esc_html_e ( 'Welcome to the world of WooCommerce!' , 'woocommerce' ); ?> </h1>
2015-06-08 23:09:48 +00:00
< p >< ? php _e ( 'Thank you for choosing WooCommerce to power your online store! This quick setup wizard will help you configure the basic settings. <strong>It’ s completely optional and shouldn’ t take longer than five minutes.</strong>' , 'woocommerce' ); ?> </p>
2017-03-13 05:39:46 +00:00
< p >< ? php esc_html_e ( 'No time right now? If you don’ t want to go through the wizard, you can skip and return to the WordPress dashboard. Come back anytime if you change your mind!' , 'woocommerce' ); ?> </p>
2015-04-28 12:19:16 +00:00
< p class = " wc-setup-actions step " >
2017-04-26 12:51:53 +00:00
< a href = " <?php echo esc_url( $this->get_next_step_link () ); ?> " class = " button-primary button button-large button-next " >< ? php esc_html_e ( " Let's go! " , 'woocommerce' ); ?> </a>
2017-03-13 05:39:46 +00:00
< a href = " <?php echo esc_url( admin_url() ); ?> " class = " button button-large " >< ? php esc_html_e ( 'Not right now' , 'woocommerce' ); ?> </a>
2015-04-28 12:19:16 +00:00
</ p >
< ? php
}
2015-04-29 13:55:12 +00:00
/**
2015-11-03 12:28:01 +00:00
* Page setup .
2015-04-29 13:55:12 +00:00
*/
2017-03-31 17:32:19 +00:00
public function wc_setup_pages () {
2015-04-29 13:55:12 +00:00
?>
2017-03-13 05:39:46 +00:00
< h1 >< ? php esc_html_e ( 'Page setup' , 'woocommerce' ); ?> </h1>
2015-04-29 13:55:12 +00:00
< form method = " post " >
2017-02-24 19:41:56 +00:00
< p >< ? php printf ( __ ( 'Your store needs a few essential <a href="%s" target="_blank">pages</a>. The following will be created automatically (if they do not already exist):' , 'woocommerce' ), esc_url ( admin_url ( 'edit.php?post_type=page' ) ) ); ?> </p>
2015-04-29 13:55:12 +00:00
< table class = " wc-setup-pages " cellspacing = " 0 " >
< thead >
< tr >
2017-03-13 05:39:46 +00:00
< th class = " page-name " >< ? php esc_html_e ( 'Page name' , 'woocommerce' ); ?> </th>
< th class = " page-description " >< ? php esc_html_e ( 'Description' , 'woocommerce' ); ?> </th>
2015-04-29 13:55:12 +00:00
</ tr >
</ thead >
< tbody >
< tr >
< td class = " page-name " >< ? php echo _x ( 'Shop' , 'Page title' , 'woocommerce' ); ?> </td>
2017-03-13 05:39:46 +00:00
< td >< ? php esc_html_e ( 'The shop page will display your products.' , 'woocommerce' ); ?> </td>
2015-04-29 13:55:12 +00:00
</ tr >
< tr >
< td class = " page-name " >< ? php echo _x ( 'Cart' , 'Page title' , 'woocommerce' ); ?> </td>
2017-03-13 05:39:46 +00:00
< td >< ? php esc_html_e ( 'The cart page will be where the customers go to view their cart and begin checkout.' , 'woocommerce' ); ?> </td>
2015-04-29 13:55:12 +00:00
</ tr >
< tr >
< td class = " page-name " >< ? php echo _x ( 'Checkout' , 'Page title' , 'woocommerce' ); ?> </td>
< td >
2017-03-13 05:39:46 +00:00
< ? php esc_html_e ( 'The checkout page will be where the customers go to pay for their items.' , 'woocommerce' ); ?>
2015-04-29 13:55:12 +00:00
</ td >
</ tr >
< tr >
2016-10-12 10:16:30 +00:00
< td class = " page-name " >< ? php echo _x ( 'My account' , 'Page title' , 'woocommerce' ); ?> </td>
2015-04-29 13:55:12 +00:00
< td >
2017-03-13 05:39:46 +00:00
< ? php esc_html_e ( 'Registered customers will be able to manage their account details and view past orders on this page.' , 'woocommerce' ); ?>
2015-04-29 13:55:12 +00:00
</ td >
</ tr >
</ tbody >
</ table >
2017-02-24 19:41:56 +00:00
< p >< ? php printf ( __ ( 'Once created, these pages can be managed from your admin dashboard on the <a href="%1$s" target="_blank">Pages screen</a>. You can control which pages are shown on your website via <a href="%2$s" target="_blank">Appearance > Menus</a>.' , 'woocommerce' ), esc_url ( admin_url ( 'edit.php?post_type=page' ) ), esc_url ( admin_url ( 'nav-menus.php' ) ) ); ?> </p>
2015-04-29 13:55:12 +00:00
< p class = " wc-setup-actions step " >
2015-08-21 18:12:36 +00:00
< input type = " submit " class = " button-primary button button-large button-next " value = " <?php esc_attr_e( 'Continue', 'woocommerce' ); ?> " name = " save_step " />
2017-03-31 17:32:19 +00:00
< a href = " <?php echo esc_url( $this->get_next_step_link () ); ?> " class = " button button-large button-next " >< ? php esc_html_e ( 'Skip this step' , 'woocommerce' ); ?> </a>
2015-06-17 12:35:09 +00:00
< ? php wp_nonce_field ( 'wc-setup' ); ?>
2015-04-29 13:55:12 +00:00
</ p >
</ form >
< ? php
}
/**
2015-11-03 12:28:01 +00:00
* Save Page Settings .
2015-04-29 13:55:12 +00:00
*/
2017-03-31 17:32:19 +00:00
public function wc_setup_pages_save () {
2015-06-17 12:35:09 +00:00
check_admin_referer ( 'wc-setup' );
2015-04-29 13:55:12 +00:00
WC_Install :: create_pages ();
2017-03-31 17:32:19 +00:00
wp_redirect ( esc_url_raw ( $this -> get_next_step_link () ) );
2015-04-29 13:55:12 +00:00
exit ;
}
2015-04-28 12:19:16 +00:00
/**
2015-11-03 12:28:01 +00:00
* Locale settings .
2015-04-28 12:19:16 +00:00
*/
2017-03-31 17:32:19 +00:00
public function wc_setup_locale () {
2015-04-29 13:55:12 +00:00
$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' );
2015-08-24 11:54:09 +00:00
$decimal_sep = get_option ( 'woocommerce_price_decimal_sep' , '.' );
2016-01-18 10:24:59 +00:00
$num_decimals = get_option ( 'woocommerce_price_num_decimals' , '2' );
2015-08-24 11:54:09 +00:00
$thousand_sep = get_option ( 'woocommerce_price_thousand_sep' , ',' );
2015-04-29 13:55:12 +00:00
$dimension_unit = get_option ( 'woocommerce_dimension_unit' , 'cm' );
$weight_unit = get_option ( 'woocommerce_weight_unit' , 'kg' );
2015-04-28 12:19:16 +00:00
?>
2017-03-13 05:39:46 +00:00
< h1 >< ? php esc_html_e ( 'Store locale setup' , 'woocommerce' ); ?> </h1>
2015-04-28 12:19:16 +00:00
< form method = " post " >
< table class = " form-table " >
< tr >
2017-03-13 05:39:46 +00:00
< th scope = " row " >< label for = " store_location " >< ? php esc_html_e ( 'Where is your store based?' , 'woocommerce' ); ?> </label></th>
2015-04-28 12:19:16 +00:00
< td >
2015-08-05 18:08:15 +00:00
< select id = " store_location " name = " store_location " style = " width:100%; " required data - placeholder = " <?php esc_attr_e( 'Choose a country…', 'woocommerce' ); ?> " class = " wc-enhanced-select " >
2015-04-28 12:19:16 +00:00
< ? php WC () -> countries -> country_dropdown_options ( $country , $state ); ?>
</ select >
</ td >
</ tr >
< tr >
2017-03-13 05:39:46 +00:00
< th scope = " row " >< label for = " currency_code " >< ? php esc_html_e ( 'Which currency will your store use?' , 'woocommerce' ); ?> </label></th>
2015-04-28 12:19:16 +00:00
< td >
2015-10-09 14:00:35 +00:00
< select id = " currency_code " name = " currency_code " style = " width:100%; " data - placeholder = " <?php esc_attr_e( 'Choose a currency…', 'woocommerce' ); ?> " class = " wc-enhanced-select " >
2017-03-13 05:39:46 +00:00
< option value = " " >< ? php esc_html_e ( 'Choose a currency…' , 'woocommerce' ); ?> </option>
2015-04-28 12:19:16 +00:00
< ? php
foreach ( get_woocommerce_currencies () as $code => $name ) {
2016-10-13 16:34:48 +00:00
echo '<option value="' . esc_attr ( $code ) . '" ' . selected ( $currency , $code , false ) . '>' . sprintf ( esc_html__ ( '%1$s (%2$s)' , 'woocommerce' ), $name , get_woocommerce_currency_symbol ( $code ) ) . '</option>' ;
2015-04-28 12:19:16 +00:00
}
?>
</ select >
2017-02-24 19:41:56 +00:00
< span class = " description " >< ? php printf ( __ ( 'If your currency is not listed you can <a href="%s" target="_blank">add it later</a>.' , 'woocommerce' ), 'https://docs.woocommerce.com/document/add-a-custom-currency-symbol/' ); ?> </span>
2015-04-28 12:19:16 +00:00
</ td >
</ tr >
< tr >
2017-03-13 05:39:46 +00:00
< th scope = " row " >< label for = " currency_pos " >< ? php esc_html_e ( 'Currency position' , 'woocommerce' ); ?> </label></th>
2015-04-28 12:19:16 +00:00
< td >
< select id = " currency_pos " name = " currency_pos " class = " wc-enhanced-select " >
2017-03-13 05:39:46 +00:00
< option value = " left " < ? php selected ( $currency_pos , 'left' ); ?> ><?php esc_html_e( 'Left', 'woocommerce' ); ?></option>
< option value = " right " < ? php selected ( $currency_pos , 'right' ); ?> ><?php esc_html_e( 'Right', 'woocommerce' ); ?></option>
< option value = " left_space " < ? php selected ( $currency_pos , 'left_space' ); ?> ><?php esc_html_e( 'Left with space', 'woocommerce' ); ?></option>
< option value = " right_space " < ? php selected ( $currency_pos , 'right_space' ); ?> ><?php esc_html_e( 'Right with space', 'woocommerce' ); ?></option>
2015-04-28 12:19:16 +00:00
</ select >
</ td >
</ tr >
< tr >
2017-03-13 05:39:46 +00:00
< th scope = " row " >< label for = " thousand_sep " >< ? php esc_html_e ( 'Thousand separator' , 'woocommerce' ); ?> </label></th>
2015-04-28 12:19:16 +00:00
< td >
2016-09-02 02:00:46 +00:00
< input type = " text " id = " thousand_sep " name = " thousand_sep " size = " 2 " value = " <?php echo esc_attr( $thousand_sep ); ?> " />
2015-04-28 12:19:16 +00:00
</ td >
</ tr >
< tr >
2017-03-13 05:39:46 +00:00
< th scope = " row " >< label for = " decimal_sep " >< ? php esc_html_e ( 'Decimal separator' , 'woocommerce' ); ?> </label></th>
2015-04-28 12:19:16 +00:00
< td >
2016-09-02 02:00:46 +00:00
< input type = " text " id = " decimal_sep " name = " decimal_sep " size = " 2 " value = " <?php echo esc_attr( $decimal_sep ); ?> " />
2015-04-28 12:19:16 +00:00
</ td >
</ tr >
2016-01-16 05:46:51 +00:00
< tr >
2017-03-13 05:39:46 +00:00
< th scope = " row " >< label for = " num_decimals " >< ? php esc_html_e ( 'Number of decimals' , 'woocommerce' ); ?> </label></th>
2016-01-16 05:46:51 +00:00
< td >
2016-09-02 02:00:46 +00:00
< input type = " text " id = " num_decimals " name = " num_decimals " size = " 2 " value = " <?php echo esc_attr( $num_decimals ); ?> " />
2016-01-16 05:46:51 +00:00
</ td >
</ tr >
2015-04-28 12:19:16 +00:00
< tr >
2017-03-13 05:39:46 +00:00
< th scope = " row " >< label for = " weight_unit " >< ? php esc_html_e ( 'Which unit should be used for product weights?' , 'woocommerce' ); ?> </label></th>
2015-04-28 12:19:16 +00:00
< td >
< select id = " weight_unit " name = " weight_unit " class = " wc-enhanced-select " >
2017-03-13 05:39:46 +00:00
< option value = " kg " < ? php selected ( $weight_unit , 'kg' ); ?> ><?php esc_html_e( 'kg', 'woocommerce' ); ?></option>
< option value = " g " < ? php selected ( $weight_unit , 'g' ); ?> ><?php esc_html_e( 'g', 'woocommerce' ); ?></option>
< option value = " lbs " < ? php selected ( $weight_unit , 'lbs' ); ?> ><?php esc_html_e( 'lbs', 'woocommerce' ); ?></option>
< option value = " oz " < ? php selected ( $weight_unit , 'oz' ); ?> ><?php esc_html_e( 'oz', 'woocommerce' ); ?></option>
2015-04-28 12:19:16 +00:00
</ select >
</ td >
</ tr >
< tr >
2017-03-13 05:39:46 +00:00
< th scope = " row " >< label for = " dimension_unit " >< ? php esc_html_e ( 'Which unit should be used for product dimensions?' , 'woocommerce' ); ?> </label></th>
2015-04-28 12:19:16 +00:00
< td >
< select id = " dimension_unit " name = " dimension_unit " class = " wc-enhanced-select " >
2017-03-13 05:39:46 +00:00
< option value = " m " < ? php selected ( $dimension_unit , 'm' ); ?> ><?php esc_html_e( 'm', 'woocommerce' ); ?></option>
< option value = " cm " < ? php selected ( $dimension_unit , 'cm' ); ?> ><?php esc_html_e( 'cm', 'woocommerce' ); ?></option>
< option value = " mm " < ? php selected ( $dimension_unit , 'mm' ); ?> ><?php esc_html_e( 'mm', 'woocommerce' ); ?></option>
< option value = " in " < ? php selected ( $dimension_unit , 'in' ); ?> ><?php esc_html_e( 'in', 'woocommerce' ); ?></option>
< option value = " yd " < ? php selected ( $dimension_unit , 'yd' ); ?> ><?php esc_html_e( 'yd', 'woocommerce' ); ?></option>
2015-04-28 12:19:16 +00:00
</ select >
</ td >
</ tr >
</ table >
< p class = " wc-setup-actions step " >
2015-08-21 18:12:36 +00:00
< input type = " submit " class = " button-primary button button-large button-next " value = " <?php esc_attr_e( 'Continue', 'woocommerce' ); ?> " name = " save_step " />
2017-03-31 17:32:19 +00:00
< a href = " <?php echo esc_url( $this->get_next_step_link () ); ?> " class = " button button-large button-next " >< ? php esc_html_e ( 'Skip this step' , 'woocommerce' ); ?> </a>
2015-06-17 12:35:09 +00:00
< ? php wp_nonce_field ( 'wc-setup' ); ?>
2015-04-28 12:19:16 +00:00
</ p >
</ form >
< ? php
}
/**
2015-11-03 12:28:01 +00:00
* Save Locale Settings .
2015-04-28 12:19:16 +00:00
*/
2017-03-31 17:32:19 +00:00
public function wc_setup_locale_save () {
2015-06-17 12:35:09 +00:00
check_admin_referer ( 'wc-setup' );
2015-04-28 12:19:16 +00:00
$store_location = sanitize_text_field ( $_POST [ 'store_location' ] );
$currency_code = sanitize_text_field ( $_POST [ 'currency_code' ] );
$currency_pos = sanitize_text_field ( $_POST [ 'currency_pos' ] );
2015-04-29 13:55:12 +00:00
$decimal_sep = sanitize_text_field ( $_POST [ 'decimal_sep' ] );
2016-01-16 05:46:51 +00:00
$num_decimals = sanitize_text_field ( $_POST [ 'num_decimals' ] );
2015-04-28 12:19:16 +00:00
$thousand_sep = sanitize_text_field ( $_POST [ 'thousand_sep' ] );
$weight_unit = sanitize_text_field ( $_POST [ 'weight_unit' ] );
$dimension_unit = sanitize_text_field ( $_POST [ 'dimension_unit' ] );
update_option ( 'woocommerce_default_country' , $store_location );
update_option ( 'woocommerce_currency' , $currency_code );
update_option ( 'woocommerce_currency_pos' , $currency_pos );
2015-08-24 11:54:09 +00:00
update_option ( 'woocommerce_price_decimal_sep' , $decimal_sep );
2016-01-16 05:46:51 +00:00
update_option ( 'woocommerce_price_num_decimals' , $num_decimals );
2015-08-24 11:54:09 +00:00
update_option ( 'woocommerce_price_thousand_sep' , $thousand_sep );
2015-04-28 12:19:16 +00:00
update_option ( 'woocommerce_weight_unit' , $weight_unit );
update_option ( 'woocommerce_dimension_unit' , $dimension_unit );
2017-03-31 17:32:19 +00:00
wp_redirect ( esc_url_raw ( $this -> get_next_step_link () ) );
2015-04-28 12:19:16 +00:00
exit ;
}
/**
2015-11-03 12:28:01 +00:00
* Shipping and taxes .
2015-04-28 12:19:16 +00:00
*/
2017-03-31 17:32:19 +00:00
public function wc_setup_shipping_taxes () {
2015-04-28 12:19:16 +00:00
?>
2017-03-13 05:39:46 +00:00
< h1 >< ? php esc_html_e ( 'Shipping & Tax setup' , 'woocommerce' ); ?> </h1>
2015-04-28 12:19:16 +00:00
< form method = " post " >
2017-03-13 05:39:46 +00:00
< p >< ? php esc_html_e ( 'If you will be charging sales tax, or shipping physical goods to customers, you can enable these below. This is optional and can be changed later.' , 'woocommerce' ); ?> </p>
2015-04-28 12:19:16 +00:00
< table class = " form-table " >
< tr >
2017-03-13 05:39:46 +00:00
< th scope = " row " >< label for = " woocommerce_calc_shipping " >< ? php esc_html_e ( 'Will you be shipping products?' , 'woocommerce' ); ?> </label></th>
2015-04-28 12:19:16 +00:00
< td >
2016-01-06 14:21:13 +00:00
< input type = " checkbox " id = " woocommerce_calc_shipping " < ? php checked ( get_option ( 'woocommerce_ship_to_countries' , '' ) !== 'disabled' , true ); ?> name="woocommerce_calc_shipping" class="input-checkbox" value="1" />
2017-03-13 05:39:46 +00:00
< label for = " woocommerce_calc_shipping " >< ? php esc_html_e ( 'Yes, I will be shipping physical goods to customers' , 'woocommerce' ); ?> </label>
2015-04-28 12:19:16 +00:00
</ td >
</ tr >
< tr >
2017-03-13 05:39:46 +00:00
< th scope = " row " >< label for = " woocommerce_calc_taxes " >< ? php esc_html_e ( 'Will you be charging sales tax?' , 'woocommerce' ); ?> </label></th>
2015-04-28 12:19:16 +00:00
< td >
2015-04-29 13:55:12 +00:00
< input type = " checkbox " < ? php checked ( get_option ( 'woocommerce_calc_taxes' , 'no' ), 'yes' ); ?> id="woocommerce_calc_taxes" name="woocommerce_calc_taxes" class="input-checkbox" value="1" />
2017-03-13 05:39:46 +00:00
< label for = " woocommerce_calc_taxes " >< ? php esc_html_e ( 'Yes, I will be charging sales tax' , 'woocommerce' ); ?> </label>
2015-04-28 12:19:16 +00:00
</ td >
</ tr >
< tr >
2017-03-13 05:39:46 +00:00
< th scope = " row " >< label for = " woocommerce_prices_include_tax " >< ? php esc_html_e ( 'How will you enter product prices?' , 'woocommerce' ); ?> </label></th>
2015-04-28 12:19:16 +00:00
< td >
2017-03-13 05:39:46 +00:00
< label >< input type = " radio " < ? php checked ( get_option ( 'woocommerce_prices_include_tax' , 'no' ), 'yes' ); ?> id="woocommerce_prices_include_tax" name="woocommerce_prices_include_tax" class="input-radio" value="yes" /> <?php esc_html_e( 'I will enter prices inclusive of tax', 'woocommerce' ); ?></label><br/>
< label >< input type = " radio " < ? php checked ( get_option ( 'woocommerce_prices_include_tax' , 'no' ), 'no' ); ?> id="woocommerce_prices_include_tax" name="woocommerce_prices_include_tax" class="input-radio" value="no" /> <?php esc_html_e( 'I will enter prices exclusive of tax', 'woocommerce' ); ?></label>
2015-04-28 12:19:16 +00:00
</ td >
</ tr >
< ? php
$locale_info = include ( WC () -> plugin_path () . '/i18n/locale-info.php' );
2015-07-04 21:35:23 +00:00
$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 );
2015-04-28 12:19:16 +00:00
}
}
if ( $tax_rates ) {
?>
2016-03-31 14:54:54 +00:00
< tr class = " tax-rates " >
< td colspan = " 2 " >
2017-02-24 19:41:56 +00:00
< p >< ? php printf ( __ ( 'The following tax rates will be imported automatically for you. You can read more about taxes in <a href="%s" target="_blank">our documentation</a>.' , 'woocommerce' ), 'https://docs.woocommerce.com/document/setting-up-taxes-in-woocommerce/' ); ?> </p>
2015-04-28 12:19:16 +00:00
< div class = " importing-tax-rates " >
< table class = " tax-rates " >
< thead >
< tr >
2017-03-13 05:39:46 +00:00
< th >< ? php esc_html_e ( 'Country' , 'woocommerce' ); ?> </th>
< th >< ? php esc_html_e ( 'State' , 'woocommerce' ); ?> </th>
< th >< ? php esc_html_e ( 'Rate (%)' , 'woocommerce' ); ?> </th>
< th >< ? php esc_html_e ( 'Name' , 'woocommerce' ); ?> </th>
2015-04-28 12:19:16 +00:00
</ tr >
</ thead >
< tbody >
< ? php
foreach ( $tax_rates as $rate ) {
?>
< tr >
2016-03-31 16:17:11 +00:00
< td class = " readonly " >< ? php echo esc_attr ( $rate [ 'country' ] ); ?> </td>
< td class = " readonly " >< ? php echo esc_attr ( $rate [ 'state' ] ? $rate [ 'state' ] : '*' ); ?> </td>
< td class = " readonly " >< ? php echo esc_attr ( $rate [ 'rate' ] ); ?> </td>
< td class = " readonly " >< ? php echo esc_attr ( $rate [ 'name' ] ); ?> </td>
2015-04-28 12:19:16 +00:00
</ tr >
< ? php
}
?>
</ tbody >
</ table >
</ div >
2017-02-24 19:41:56 +00:00
< p class = " description " >< ? php printf ( __ ( 'You may need to add/edit rates based on your products or business location which can be done from the <a href="%s" target="_blank">tax settings</a> screen. If in doubt, speak to an accountant.' , 'woocommerce' ), esc_url ( admin_url ( 'admin.php?page=wc-settings&tab=tax' ) ) ); ?> </p>
2015-04-28 12:19:16 +00:00
</ td >
</ tr >
< ? php
}
?>
</ table >
< p class = " wc-setup-actions step " >
2015-08-21 18:12:36 +00:00
< input type = " submit " class = " button-primary button button-large button-next " value = " <?php esc_attr_e( 'Continue', 'woocommerce' ); ?> " name = " save_step " />
2017-03-31 17:32:19 +00:00
< a href = " <?php echo esc_url( $this->get_next_step_link () ); ?> " class = " button button-large button-next " >< ? php esc_html_e ( 'Skip this step' , 'woocommerce' ); ?> </a>
2015-06-17 12:35:09 +00:00
< ? php wp_nonce_field ( 'wc-setup' ); ?>
2015-04-28 12:19:16 +00:00
</ p >
</ form >
< ? php
}
/**
2015-11-03 12:28:01 +00:00
* Save shipping and tax options .
2015-04-28 12:19:16 +00:00
*/
2017-03-31 17:32:19 +00:00
public function wc_setup_shipping_taxes_save () {
2015-06-17 12:35:09 +00:00
check_admin_referer ( 'wc-setup' );
2017-04-21 05:26:37 +00:00
$enable_shipping = isset ( $_POST [ 'woocommerce_calc_shipping' ] );
$enable_taxes = isset ( $_POST [ 'woocommerce_calc_taxes' ] );
$current_shipping = get_option ( 'woocommerce_ship_to_countries' );
2016-01-06 14:21:13 +00:00
if ( $enable_shipping ) {
update_option ( 'woocommerce_ship_to_countries' , '' );
2016-03-31 17:54:33 +00:00
WC_Admin_Notices :: add_notice ( 'no_shipping_methods' );
2017-04-21 05:02:59 +00:00
/*
2017-04-21 05:26:37 +00:00
* If this is the initial shipping setup , create a shipping
2017-04-21 14:46:03 +00:00
* zone containing the country the store is located in , with
* a " free shipping " method preconfigured .
2017-04-21 05:02:59 +00:00
*/
2017-04-21 05:26:37 +00:00
if ( false === $current_shipping ) {
$default_country = get_option ( 'woocommerce_default_country' );
$location = wc_format_country_state_string ( $default_country );
$zone = new WC_Shipping_Zone ( null );
$zone -> set_zone_order ( 0 );
$zone -> add_location ( $location [ 'country' ], 'country' );
$zone -> set_zone_name ( $zone -> get_formatted_location () );
2017-04-21 14:46:03 +00:00
$zone -> add_shipping_method ( 'free_shipping' );
2017-04-21 05:26:37 +00:00
$zone -> save ();
}
2016-01-06 14:21:13 +00:00
} else {
update_option ( 'woocommerce_ship_to_countries' , 'disabled' );
}
2015-04-28 12:19:16 +00:00
2016-01-06 14:21:13 +00:00
update_option ( 'woocommerce_calc_taxes' , $enable_taxes ? 'yes' : 'no' );
2015-04-28 12:19:16 +00:00
update_option ( 'woocommerce_prices_include_tax' , sanitize_text_field ( $_POST [ 'woocommerce_prices_include_tax' ] ) );
2016-03-31 14:54:54 +00:00
if ( $enable_taxes ) {
2015-04-28 12:19:16 +00:00
$locale_info = include ( WC () -> plugin_path () . '/i18n/locale-info.php' );
2015-07-04 21:35:23 +00:00
$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 );
2015-04-28 12:19:16 +00:00
}
}
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' ],
2015-07-04 21:35:23 +00:00
'tax_rate_priority' => isset ( $rate [ 'priority' ] ) ? absint ( $rate [ 'priority' ] ) : 1 ,
2015-04-28 12:19:16 +00:00
'tax_rate_compound' => 0 ,
'tax_rate_shipping' => $rate [ 'shipping' ] ? 1 : 0 ,
'tax_rate_order' => $loop ++ ,
2016-08-27 01:46:45 +00:00
'tax_rate_class' => '' ,
2015-04-28 12:19:16 +00:00
);
2015-07-15 15:04:49 +00:00
WC_Tax :: _insert_tax_rate ( $tax_rate );
2015-04-28 12:19:16 +00:00
}
}
}
2017-03-31 17:32:19 +00:00
wp_redirect ( esc_url_raw ( $this -> get_next_step_link () ) );
2015-04-28 12:19:16 +00:00
exit ;
}
2016-04-01 16:30:04 +00:00
/**
* Simple array of gateways to show in wizard .
* @ return array
*/
protected function get_wizard_payment_gateways () {
$gateways = array (
'paypal-braintree' => array (
'name' => __ ( 'PayPal by Braintree' , 'woocommerce' ),
'image' => WC () -> plugin_url () . '/assets/images/paypal-braintree.png' ,
2017-04-26 12:51:53 +00:00
'description' => __ ( " Safe and secure payments using credit cards or your customer's PayPal account. " , 'woocommerce' ) . ' <a href="https://wordpress.org/plugins/woocommerce-gateway-paypal-powered-by-braintree/" target="_blank">' . __ ( 'Learn more about PayPal' , 'woocommerce' ) . '</a>' ,
2016-04-01 16:30:04 +00:00
'class' => 'featured featured-row-last' ,
'repo-slug' => 'woocommerce-gateway-paypal-powered-by-braintree' ,
),
'paypal-ec' => array (
'name' => __ ( 'PayPal Express Checkout' , 'woocommerce' ),
2016-04-19 11:04:52 +00:00
'image' => WC () -> plugin_url () . '/assets/images/paypal.png' ,
2017-04-26 12:51:53 +00:00
'description' => __ ( " Safe and secure payments using credit cards or your customer's PayPal account. " , 'woocommerce' ) . ' <a href="https://wordpress.org/plugins/woocommerce-gateway-paypal-express-checkout/" target="_blank">' . __ ( 'Learn more about PayPal' , 'woocommerce' ) . '</a>' ,
2016-04-01 16:30:04 +00:00
'class' => 'featured featured-row-last' ,
'repo-slug' => 'woocommerce-gateway-paypal-express-checkout' ,
),
2016-04-18 14:58:22 +00:00
'stripe' => array (
'name' => __ ( 'Stripe' , 'woocommerce' ),
'image' => WC () -> plugin_url () . '/assets/images/stripe.png' ,
2017-02-24 19:41:56 +00:00
'description' => sprintf ( __ ( 'A modern and robust way to accept credit card payments on your store. <a href="%s" target="_blank">Learn more about Stripe</a>.' , 'woocommerce' ), 'https://wordpress.org/plugins/woocommerce-gateway-stripe/' ),
2016-04-18 14:58:22 +00:00
'class' => 'featured featured-row-first' ,
'repo-slug' => 'woocommerce-gateway-stripe' ,
),
2016-04-01 16:30:04 +00:00
'paypal' => array (
'name' => __ ( 'PayPal Standard' , 'woocommerce' ),
'description' => __ ( 'Accept payments via PayPal using account balance or credit card.' , 'woocommerce' ),
'image' => '' ,
'class' => '' ,
'settings' => array (
'email' => array (
'label' => __ ( 'PayPal email address' , 'woocommerce' ),
'type' => 'email' ,
'value' => get_option ( 'admin_email' ),
'placeholder' => __ ( 'PayPal email address' , 'woocommerce' ),
),
),
),
'cheque' => array (
2016-10-12 10:16:30 +00:00
'name' => _x ( 'Check payments' , 'Check payment method' , 'woocommerce' ),
2016-06-14 14:34:28 +00:00
'description' => __ ( 'A simple offline gateway that lets you accept a check as method of payment.' , 'woocommerce' ),
2016-04-01 16:30:04 +00:00
'image' => '' ,
'class' => '' ,
),
'bacs' => array (
2016-10-12 10:16:30 +00:00
'name' => __ ( 'Bank transfer (BACS) payments' , 'woocommerce' ),
2016-07-26 12:50:31 +00:00
'description' => __ ( 'A simple offline gateway that lets you accept BACS payment.' , 'woocommerce' ),
2016-04-01 16:30:04 +00:00
'image' => '' ,
'class' => '' ,
),
'cod' => array (
2016-10-12 10:16:30 +00:00
'name' => __ ( 'Cash on delivery' , 'woocommerce' ),
2016-07-26 12:50:31 +00:00
'description' => __ ( 'A simple offline gateway that lets you accept cash on delivery.' , 'woocommerce' ),
2016-04-01 16:30:04 +00:00
'image' => '' ,
'class' => '' ,
2016-08-27 01:46:45 +00:00
),
2016-04-01 16:30:04 +00:00
);
$country = WC () -> countries -> get_base_country ();
if ( 'US' === $country ) {
unset ( $gateways [ 'paypal-ec' ] );
} else {
unset ( $gateways [ 'paypal-braintree' ] );
}
if ( ! current_user_can ( 'install_plugins' ) ) {
unset ( $gateways [ 'paypal-braintree' ] );
unset ( $gateways [ 'paypal-ec' ] );
unset ( $gateways [ 'stripe' ] );
}
return $gateways ;
}
2015-06-08 15:34:13 +00:00
/**
2015-11-03 12:28:01 +00:00
* Payments Step .
2015-06-08 15:34:13 +00:00
*/
2017-03-31 17:32:19 +00:00
public function wc_setup_payments () {
2016-04-01 16:30:04 +00:00
$gateways = $this -> get_wizard_payment_gateways ();
2015-06-08 15:34:13 +00:00
?>
2017-03-13 05:39:46 +00:00
< h1 >< ? php esc_html_e ( 'Payments' , 'woocommerce' ); ?> </h1>
2016-04-01 16:30:04 +00:00
< form method = " post " class = " wc-wizard-payment-gateway-form " >
2017-02-24 19:41:56 +00:00
< p >< ? php printf ( __ ( 'WooCommerce can accept both online and offline payments. <a href="%1$s" target="_blank">Additional payment methods</a> can be installed later and managed from the <a href="%2$s" target="_blank">checkout settings</a> screen.' , 'woocommerce' ), esc_url ( admin_url ( 'admin.php?page=wc-addons&view=payment-gateways' ) ), esc_url ( admin_url ( 'admin.php?page=wc-settings&tab=checkout' ) ) ); ?> </p>
2016-04-01 16:30:04 +00:00
< ul class = " wc-wizard-payment-gateways " >
< ? php foreach ( $gateways as $gateway_id => $gateway ) : ?>
< li class = " wc-wizard-gateway wc-wizard-gateway-<?php echo esc_attr( $gateway_id ); ?> <?php echo esc_attr( $gateway['class'] ); ?> " >
< div class = " wc-wizard-gateway-enable " >
< input type = " checkbox " name = " wc-wizard-gateway-<?php echo esc_attr( $gateway_id ); ?>-enabled " class = " input-checkbox " value = " yes " />
< label >
< ? php if ( $gateway [ 'image' ] ) : ?>
< img src = " <?php echo esc_attr( $gateway['image'] ); ?> " alt = " <?php echo esc_attr( $gateway['name'] ); ?> " />
< ? php else : ?>
< ? php echo esc_html ( $gateway [ 'name' ] ); ?>
< ? php endif ; ?>
</ label >
</ div >
< div class = " wc-wizard-gateway-description " >
< ? php echo wp_kses_post ( wpautop ( $gateway [ 'description' ] ) ); ?>
</ div >
< ? php if ( ! empty ( $gateway [ 'settings' ] ) ) : ?>
< table class = " form-table wc-wizard-gateway-settings " >
< ? php foreach ( $gateway [ 'settings' ] as $setting_id => $setting ) : ?>
< tr >
< th scope = " row " >< label for = " <?php echo esc_attr( $gateway_id ); ?>_<?php echo esc_attr( $setting_id ); ?> " >< ? php echo esc_html ( $setting [ 'label' ] ); ?> :</label></th>
< td >
< input
type = " <?php echo esc_attr( $setting['type'] ); ?> "
id = " <?php echo esc_attr( $gateway_id ); ?>_<?php echo esc_attr( $setting_id ); ?> "
name = " <?php echo esc_attr( $gateway_id ); ?>_<?php echo esc_attr( $setting_id ); ?> "
class = " input-text "
value = " <?php echo esc_attr( $setting['value'] ); ?> "
placeholder = " <?php echo esc_attr( $setting['placeholder'] ); ?> "
/>
</ td >
</ tr >
< ? php endforeach ; ?>
</ table >
< ? php endif ; ?>
</ li >
< ? php endforeach ; ?>
</ ul >
2015-06-08 15:34:13 +00:00
< p class = " wc-setup-actions step " >
2015-08-21 18:12:36 +00:00
< input type = " submit " class = " button-primary button button-large button-next " value = " <?php esc_attr_e( 'Continue', 'woocommerce' ); ?> " name = " save_step " />
2017-03-31 17:32:19 +00:00
< a href = " <?php echo esc_url( $this->get_next_step_link () ); ?> " class = " button button-large button-next " >< ? php esc_html_e ( 'Skip this step' , 'woocommerce' ); ?> </a>
2015-06-17 12:35:09 +00:00
< ? php wp_nonce_field ( 'wc-setup' ); ?>
2015-06-08 15:34:13 +00:00
</ p >
</ form >
< ? php
}
/**
2015-11-03 12:28:01 +00:00
* Payments Step save .
2015-06-08 15:34:13 +00:00
*/
2017-03-31 17:32:19 +00:00
public function wc_setup_payments_save () {
2015-06-17 12:35:09 +00:00
check_admin_referer ( 'wc-setup' );
2016-04-18 16:05:19 +00:00
$gateways = $this -> get_wizard_payment_gateways ();
2016-04-01 16:30:04 +00:00
foreach ( $gateways as $gateway_id => $gateway ) {
// If repo-slug is defined, download and install plugin from .org.
if ( ! empty ( $gateway [ 'repo-slug' ] ) && ! empty ( $_POST [ 'wc-wizard-gateway-' . $gateway_id . '-enabled' ] ) ) {
2016-04-18 16:05:19 +00:00
wp_schedule_single_event ( time () + 10 , 'woocommerce_plugin_background_installer' , array ( $gateway_id , $gateway ) );
2016-04-01 16:30:04 +00:00
}
$settings_key = 'woocommerce_' . $gateway_id . '_settings' ;
$settings = array_filter ( ( array ) get_option ( $settings_key , array () ) );
$settings [ 'enabled' ] = ! empty ( $_POST [ 'wc-wizard-gateway-' . $gateway_id . '-enabled' ] ) ? 'yes' : 'no' ;
2015-06-08 15:34:13 +00:00
2016-04-01 16:30:04 +00:00
if ( ! empty ( $gateway [ 'settings' ] ) ) {
foreach ( $gateway [ 'settings' ] as $setting_id => $setting ) {
$settings [ $setting_id ] = wc_clean ( $_POST [ $gateway_id . '_' . $setting_id ] );
}
}
update_option ( $settings_key , $settings );
}
2015-06-08 15:34:13 +00:00
2017-03-31 17:32:19 +00:00
wp_redirect ( esc_url_raw ( $this -> get_next_step_link () ) );
2015-06-08 15:34:13 +00:00
exit ;
}
2017-05-17 16:42:18 +00:00
/**
* Theme step .
*/
private function wc_setup_theme () {
?>
< form method = " post " class = " wc-wizard-storefront " >
< p class = " wc-wizard-storefront-intro " >
< ? php echo wp_kses_post ( __ ( '<strong>Storefront</strong> is the free WordPress theme built and maintained by the makers of WooCommerce.' , 'woocommerce' ) ); ?>
< img src = " <?php echo esc_url( WC()->plugin_url() . '/assets/images/storefront-intro.png' ); ?> " alt = " Storefront " />
</ p >
< ul class = " wc-wizard-storefront-features " >
< li class = " wc-wizard-storefront-feature wc-wizard-storefront-feature__bulletproof first " >< ? php echo wp_kses_post ( __ ( '<strong>Bulletproof WooCommerce integration:</strong> Rest assured the integration between WooCommerce, WooCommerce extensions and Storefront is water-tight.' , 'woocommerce' ) ); ?> </li>
< li class = " wc-wizard-storefront-feature wc-wizard-storefront-feature__accessibility last " >< ? php echo wp_kses_post ( __ ( '<strong>Built with accessibility in mind:</strong> Storefront adheres to the strict wordpress.org accessibility guidelines making your store accessible to the widest audience possible.' , 'woocommerce' ) ); ?> </li>
< li class = " wc-wizard-storefront-feature wc-wizard-storefront-feature__extendable first " >< ? php echo wp_kses_post ( __ ( '<strong>Child themes and extensions available:</strong> Like WooCommerce, you can extend Storefront with an extension or child theme to make your store truly your own.' , 'woocommerce' ) ); ?> </li>
< li class = " wc-wizard-storefront-feature wc-wizard-storefront-feature__compatibility last " >< ? php echo wp_kses_post ( __ ( '<strong>No Shortcodes, sliders or page builders:</strong> Bring your favorite sliders or page builders, Storefront is built to work with the most popular options.' , 'woocommerce' ) ); ?> </li>
< li class = " wc-wizard-storefront-feature wc-wizard-storefront-feature__mobile first " >< ? php echo wp_kses_post ( __ ( '<strong>Clean, simple mobile-first design:</strong> The perfect place to start when customizing your store, looks beautiful on any device.' , 'woocommerce' ) ); ?> </li>
< li class = " wc-wizard-storefront-feature wc-wizard-storefront-feature__search last " >< ? php echo wp_kses_post ( __ ( '<strong>Optimized for search:</strong> Valid schema markup for improved SEO performance.' , 'woocommerce' ) ); ?> </li>
</ ul >
< p class = " wc-setup-actions step " >
< input type = " submit " class = " button-primary button button-large button-next " value = " <?php esc_attr_e( 'Install & activate Storefront', 'woocommerce' ); ?> " name = " save_step " />
< a href = " <?php echo esc_url( $this->get_next_step_link () ); ?> " class = " button button-large button-next " >< ? php esc_html_e ( 'Skip this step' , 'woocommerce' ); ?> </a>
< ? php wp_nonce_field ( 'wc-setup' ); ?>
</ p >
</ form >
< ? php
}
/**
* Theme step save .
*/
private function wc_setup_theme_save () {
check_admin_referer ( 'wc-setup' );
wp_schedule_single_event ( time () + 1 , 'woocommerce_theme_background_installer' , array ( 'storefront' ) );
wp_redirect ( esc_url_raw ( $this -> get_next_step_link () ) );
exit ;
}
2015-04-28 12:19:16 +00:00
/**
2015-11-03 12:28:01 +00:00
* Actions on the final step .
2015-04-28 12:19:16 +00:00
*/
2015-04-29 15:34:07 +00:00
private function wc_setup_ready_actions () {
2015-04-29 09:47:57 +00:00
WC_Admin_Notices :: remove_notice ( 'install' );
2015-04-28 13:50:48 +00:00
if ( isset ( $_GET [ 'wc_tracker_optin' ] ) && isset ( $_GET [ 'wc_tracker_nonce' ] ) && wp_verify_nonce ( $_GET [ 'wc_tracker_nonce' ], 'wc_tracker_optin' ) ) {
update_option ( 'woocommerce_allow_tracking' , 'yes' );
WC_Tracker :: send_tracking_data ( true );
2015-04-29 15:34:07 +00:00
2015-04-28 13:50:48 +00:00
} elseif ( isset ( $_GET [ 'wc_tracker_optout' ] ) && isset ( $_GET [ 'wc_tracker_nonce' ] ) && wp_verify_nonce ( $_GET [ 'wc_tracker_nonce' ], 'wc_tracker_optout' ) ) {
update_option ( 'woocommerce_allow_tracking' , 'no' );
}
2015-04-29 15:34:07 +00:00
}
2015-04-29 09:47:57 +00:00
2015-04-29 15:34:07 +00:00
/**
2015-11-03 12:28:01 +00:00
* Final step .
2015-04-29 15:34:07 +00:00
*/
2017-03-31 17:32:19 +00:00
public function wc_setup_ready () {
2015-04-29 15:34:07 +00:00
$this -> wc_setup_ready_actions ();
2015-06-17 12:35:09 +00:00
shuffle ( $this -> tweets );
2015-04-28 12:19:16 +00:00
?>
2016-09-23 08:34:23 +00:00
< a href = " https://twitter.com/share " class = " twitter-share-button " data - url = " https://woocommerce.com/ " data - text = " <?php echo esc_attr( $this->tweets [0] ); ?> " data - via = " WooCommerce " data - size = " large " > Tweet </ a >
2015-04-28 12:19:16 +00:00
< script >! function ( d , s , id ){ var js , fjs = d . getElementsByTagName ( s )[ 0 ]; if ( ! d . getElementById ( id )){ js = d . createElement ( s ); js . id = id ; js . src = " //platform.twitter.com/widgets.js " ; fjs . parentNode . insertBefore ( js , fjs );}}( document , " script " , " twitter-wjs " ); </ script >
2017-03-13 05:39:46 +00:00
< h1 >< ? php esc_html_e ( 'Your store is ready!' , 'woocommerce' ); ?> </h1>
2015-04-28 12:19:16 +00:00
2015-04-28 13:50:48 +00:00
< ? php if ( 'unknown' === get_option ( 'woocommerce_allow_tracking' , 'unknown' ) ) : ?>
< div class = " woocommerce-message woocommerce-tracker " >
2017-01-02 16:56:19 +00:00
< p >< ? php printf ( __ ( 'Want to help make WooCommerce even more awesome? Allow WooCommerce to collect non-sensitive diagnostic data and usage information. %1$sFind out more%2$s.' , 'woocommerce' ), '<a href="https://woocommerce.com/usage-tracking/" target="_blank">' , '</a>' ); ?> </p>
2015-04-28 13:50:48 +00:00
< p class = " submit " >
2017-03-13 05:39:46 +00:00
< a class = " button-primary button button-large " href = " <?php echo esc_url( wp_nonce_url( add_query_arg( 'wc_tracker_optin', 'true' ), 'wc_tracker_optin', 'wc_tracker_nonce' ) ); ?> " >< ? php esc_html_e ( 'Allow' , 'woocommerce' ); ?> </a>
< a class = " button-secondary button button-large skip " href = " <?php echo esc_url( wp_nonce_url( add_query_arg( 'wc_tracker_optout', 'true' ), 'wc_tracker_optout', 'wc_tracker_nonce' ) ); ?> " >< ? php esc_html_e ( 'No thanks' , 'woocommerce' ); ?> </a>
2015-04-28 13:50:48 +00:00
</ p >
</ div >
< ? php endif ; ?>
2015-04-28 12:19:16 +00:00
< div class = " wc-setup-next-steps " >
< div class = " wc-setup-next-steps-first " >
2017-03-13 05:39:46 +00:00
< h2 >< ? php esc_html_e ( 'Next steps' , 'woocommerce' ); ?> </h2>
2015-04-28 12:19:16 +00:00
< ul >
2017-03-13 05:39:46 +00:00
< li class = " setup-product " >< a class = " button button-primary button-large " href = " <?php echo esc_url( admin_url( 'post-new.php?post_type=product&tutorial=true' ) ); ?> " >< ? php esc_html_e ( 'Create your first product!' , 'woocommerce' ); ?> </a></li>
2017-05-16 14:36:56 +00:00
< li class = " setup-product " >< a class = " button button-large " href = " <?php echo esc_url( admin_url( 'edit.php?post_type=product&page=product_importer' ) ); ?> " >< ? php esc_html_e ( 'Import products from a CSV file' , 'woocommerce' ); ?> </a></li>
2015-04-28 12:19:16 +00:00
</ ul >
</ div >
< div class = " wc-setup-next-steps-last " >
2016-10-12 10:16:30 +00:00
< h2 >< ? php _e ( 'Learn more' , 'woocommerce' ); ?> </h2>
2015-04-28 12:19:16 +00:00
< ul >
2017-03-13 05:39:46 +00:00
< li class = " video-walkthrough " >< a href = " https://docs.woocommerce.com/document/woocommerce-guided-tour-videos/?utm_source=setupwizard&utm_medium=product&utm_content=videos&utm_campaign=woocommerceplugin " >< ? php esc_html_e ( 'Watch the Guided Tour videos' , 'woocommerce' ); ?> </a></li>
< li class = " newsletter " >< a href = " https://woocommerce.com/woocommerce-onboarding-email/?utm_source=setupwizard&utm_medium=product&utm_content=newsletter&utm_campaign=woocommerceplugin " >< ? php esc_html_e ( 'Get eCommerce advice in your inbox' , 'woocommerce' ); ?> </a></li>
< li class = " learn-more " >< a href = " https://docs.woocommerce.com/documentation/plugins/woocommerce/getting-started/?utm_source=setupwizard&utm_medium=product&utm_content=docs&utm_campaign=woocommerceplugin " >< ? php esc_html_e ( 'Learn more about getting started' , 'woocommerce' ); ?> </a></li>
2015-04-28 12:19:16 +00:00
</ ul >
</ div >
</ div >
< ? php
}
}
2017-03-29 18:22:55 +00:00
new WC_Admin_Setup_Wizard ();