Completed
Pull Request — master (#9826)
by Mike
07:48
created

WC_Admin_Setup_Wizard::setup_wizard_footer()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 9
Code Lines 7

Duplication

Lines 0
Ratio 0 %
Metric Value
dl 0
loc 9
rs 9.6666
cc 2
eloc 7
nc 2
nop 0
1
<?php
1 ignored issue
show
Coding Style Compatibility introduced by
For compatibility and reusability of your code, PSR1 recommends that a file should introduce either new symbols (like classes, functions, etc.) or have side-effects (like outputting something, or including other files), but not both at the same time. The first symbol is defined on line 19 and the first side effect is on line 13.

The PSR-1: Basic Coding Standard recommends that a file should either introduce new symbols, that is classes, functions, constants or similar, or have side effects. Side effects are anything that executes logic, like for example printing output, changing ini settings or writing to a file.

The idea behind this recommendation is that merely auto-loading a class should not change the state of an application. It also promotes a cleaner style of programming and makes your code less prone to errors, because the logic is not spread out all over the place.

To learn more about the PSR-1, please see the PHP-FIG site on the PSR-1.

Loading history...
2
/**
3
 * Setup Wizard Class
4
 *
5
 * Takes new users through some basic steps to setup their store.
6
 *
7
 * @author      WooThemes
8
 * @category    Admin
9
 * @package     WooCommerce/Admin
10
 * @version     2.4.0
11
*/
12
if ( ! defined( 'ABSPATH' ) ) {
13
	exit;
14
}
15
16
/**
17
 * WC_Admin_Setup_Wizard class.
18
 */
19
class WC_Admin_Setup_Wizard {
20
21
	/** @var string Currenct Step */
22
	private $step   = '';
23
24
	/** @var array Steps for the setup wizard */
25
	private $steps  = array();
26
27
	/** @var array Tweets user can optionally send after install */
28
	private $tweets = array(
29
		'Someone give me woo-t, I just set up a new store with #WordPress and @WooCommerce!',
30
		'Someone give me high five, I just set up a new store with #WordPress and @WooCommerce!'
31
	);
32
33
	/**
34
	 * Hook in tabs.
35
	 */
36
	public function __construct() {
37
		if ( apply_filters( 'woocommerce_enable_setup_wizard', true ) && current_user_can( 'manage_woocommerce' ) ) {
38
			add_action( 'admin_menu', array( $this, 'admin_menus' ) );
39
			add_action( 'admin_init', array( $this, 'setup_wizard' ) );
40
		}
41
	}
42
43
	/**
44
	 * Add admin menus/screens.
45
	 */
46
	public function admin_menus() {
47
		add_dashboard_page( '', '', 'manage_options', 'wc-setup', '' );
48
	}
49
50
	/**
51
	 * Show the setup wizard.
52
	 */
53
	public function setup_wizard() {
54
		if ( empty( $_GET['page'] ) || 'wc-setup' !== $_GET['page'] ) {
55
			return;
56
		}
57
		$this->steps = array(
58
			'introduction' => array(
59
				'name'    =>  __( 'Introduction', 'woocommerce' ),
60
				'view'    => array( $this, 'wc_setup_introduction' ),
61
				'handler' => ''
62
			),
63
			'pages' => array(
64
				'name'    =>  __( 'Page Setup', 'woocommerce' ),
65
				'view'    => array( $this, 'wc_setup_pages' ),
66
				'handler' => array( $this, 'wc_setup_pages_save' )
67
			),
68
			'locale' => array(
69
				'name'    =>  __( 'Store Locale', 'woocommerce' ),
70
				'view'    => array( $this, 'wc_setup_locale' ),
71
				'handler' => array( $this, 'wc_setup_locale_save' )
72
			),
73
			'shipping_taxes' => array(
74
				'name'    =>  __( 'Shipping &amp; Tax', 'woocommerce' ),
75
				'view'    => array( $this, 'wc_setup_shipping_taxes' ),
76
				'handler' => array( $this, 'wc_setup_shipping_taxes_save' ),
77
			),
78
			'payments' => array(
79
				'name'    =>  __( 'Payments', 'woocommerce' ),
80
				'view'    => array( $this, 'wc_setup_payments' ),
81
				'handler' => array( $this, 'wc_setup_payments_save' ),
82
			),
83
			'next_steps' => array(
84
				'name'    =>  __( 'Ready!', 'woocommerce' ),
85
				'view'    => array( $this, 'wc_setup_ready' ),
86
				'handler' => ''
87
			)
88
		);
89
		$this->step = isset( $_GET['step'] ) ? sanitize_key( $_GET['step'] ) : current( array_keys( $this->steps ) );
90
		$suffix     = defined( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min';
91
92
		wp_register_script( 'jquery-blockui', WC()->plugin_url() . '/assets/js/jquery-blockui/jquery.blockUI' . $suffix . '.js', array( 'jquery' ), '2.70', true );
93
		wp_register_script( 'select2', WC()->plugin_url() . '/assets/js/select2/select2' . $suffix . '.js', array( 'jquery' ), '3.5.2' );
94
		wp_register_script( 'wc-enhanced-select', WC()->plugin_url() . '/assets/js/admin/wc-enhanced-select' . $suffix . '.js', array( 'jquery', 'select2' ), WC_VERSION );
95
		wp_localize_script( 'wc-enhanced-select', 'wc_enhanced_select_params', array(
96
			'i18n_matches_1'            => _x( 'One result is available, press enter to select it.', 'enhanced select', 'woocommerce' ),
97
			'i18n_matches_n'            => _x( '%qty% results are available, use up and down arrow keys to navigate.', 'enhanced select', 'woocommerce' ),
98
			'i18n_no_matches'           => _x( 'No matches found', 'enhanced select', 'woocommerce' ),
99
			'i18n_ajax_error'           => _x( 'Loading failed', 'enhanced select', 'woocommerce' ),
100
			'i18n_input_too_short_1'    => _x( 'Please enter 1 or more characters', 'enhanced select', 'woocommerce' ),
101
			'i18n_input_too_short_n'    => _x( 'Please enter %qty% or more characters', 'enhanced select', 'woocommerce' ),
102
			'i18n_input_too_long_1'     => _x( 'Please delete 1 character', 'enhanced select', 'woocommerce' ),
103
			'i18n_input_too_long_n'     => _x( 'Please delete %qty% characters', 'enhanced select', 'woocommerce' ),
104
			'i18n_selection_too_long_1' => _x( 'You can only select 1 item', 'enhanced select', 'woocommerce' ),
105
			'i18n_selection_too_long_n' => _x( 'You can only select %qty% items', 'enhanced select', 'woocommerce' ),
106
			'i18n_load_more'            => _x( 'Loading more results&hellip;', 'enhanced select', 'woocommerce' ),
107
			'i18n_searching'            => _x( 'Searching&hellip;', 'enhanced select', 'woocommerce' ),
108
			'ajax_url'                  => admin_url( 'admin-ajax.php' ),
109
			'search_products_nonce'     => wp_create_nonce( 'search-products' ),
110
			'search_customers_nonce'    => wp_create_nonce( 'search-customers' )
111
		) );
112
		wp_enqueue_style( 'woocommerce_admin_styles', WC()->plugin_url() . '/assets/css/admin.css', array(), WC_VERSION );
113
		wp_enqueue_style( 'wc-setup', WC()->plugin_url() . '/assets/css/wc-setup.css', array( 'dashicons', 'install' ), WC_VERSION );
114
115
		wp_register_script( 'wc-setup', WC()->plugin_url() . '/assets/js/admin/wc-setup.min.js', array( 'jquery', 'wc-enhanced-select', 'jquery-blockui' ), WC_VERSION );
116
		wp_localize_script( 'wc-setup', 'wc_setup_params', array(
117
			'locale_info' => json_encode( include( WC()->plugin_path() . '/i18n/locale-info.php' ) )
118
		) );
119
120
		if ( ! empty( $_POST['save_step'] ) && isset( $this->steps[ $this->step ]['handler'] ) ) {
121
			call_user_func( $this->steps[ $this->step ]['handler'] );
122
		}
123
124
		ob_start();
125
		$this->setup_wizard_header();
126
		$this->setup_wizard_steps();
127
		$this->setup_wizard_content();
128
		$this->setup_wizard_footer();
129
		exit;
130
	}
131
132
	public function get_next_step_link() {
133
		$keys = array_keys( $this->steps );
134
		return add_query_arg( 'step', $keys[ array_search( $this->step, array_keys( $this->steps ) ) + 1 ] );
135
	}
136
137
	/**
138
	 * Setup Wizard Header.
139
	 */
140
	public function setup_wizard_header() {
141
		?>
142
		<!DOCTYPE html>
143
		<html xmlns="http://www.w3.org/1999/xhtml" <?php language_attributes(); ?>>
144
		<head>
145
			<meta name="viewport" content="width=device-width" />
146
			<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
147
			<title><?php _e( 'WooCommerce &rsaquo; Setup Wizard', 'woocommerce' ); ?></title>
148
			<?php wp_print_scripts( 'wc-setup' ); ?>
149
			<?php do_action( 'admin_print_styles' ); ?>
150
			<?php do_action( 'admin_head' ); ?>
151
		</head>
152
		<body class="wc-setup wp-core-ui">
153
			<h1 id="wc-logo"><a href="http://woothemes.com/woocommerce"><img src="<?php echo WC()->plugin_url(); ?>/assets/images/woocommerce_logo.png" alt="WooCommerce" /></a></h1>
154
		<?php
155
	}
156
157
	/**
158
	 * Setup Wizard Footer.
159
	 */
160
	public function setup_wizard_footer() {
161
		?>
162
			<?php if ( 'next_steps' === $this->step ) : ?>
163
				<a class="wc-return-to-dashboard" href="<?php echo esc_url( admin_url() ); ?>"><?php _e( 'Return to the WordPress Dashboard', 'woocommerce' ); ?></a>
164
			<?php endif; ?>
165
			</body>
166
		</html>
167
		<?php
168
	}
169
170
	/**
171
	 * Output the steps.
172
	 */
173
	public function setup_wizard_steps() {
174
		$ouput_steps = $this->steps;
175
		array_shift( $ouput_steps );
176
		?>
177
		<ol class="wc-setup-steps">
178
			<?php foreach ( $ouput_steps as $step_key => $step ) : ?>
179
				<li class="<?php
180
					if ( $step_key === $this->step ) {
181
						echo 'active';
182
					} elseif ( array_search( $this->step, array_keys( $this->steps ) ) > array_search( $step_key, array_keys( $this->steps ) ) ) {
183
						echo 'done';
184
					}
185
				?>"><?php echo esc_html( $step['name'] ); ?></li>
186
			<?php endforeach; ?>
187
		</ol>
188
		<?php
189
	}
190
191
	/**
192
	 * Output the content for the current step.
193
	 */
194
	public function setup_wizard_content() {
195
		echo '<div class="wc-setup-content">';
196
		call_user_func( $this->steps[ $this->step ]['view'] );
197
		echo '</div>';
198
	}
199
200
	/**
201
	 * Introduction step.
202
	 */
203
	public function wc_setup_introduction() {
204
		?>
205
		<h1><?php _e( 'Welcome to the world of WooCommerce!', 'woocommerce' ); ?></h1>
206
		<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>
207
		<p><?php _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>
208
		<p class="wc-setup-actions step">
209
			<a href="<?php echo esc_url( $this->get_next_step_link() ); ?>" class="button-primary button button-large button-next"><?php _e( 'Let\'s Go!', 'woocommerce' ); ?></a>
210
			<a href="<?php echo esc_url( admin_url() ); ?>" class="button button-large"><?php _e( 'Not right now', 'woocommerce' ); ?></a>
211
		</p>
212
		<?php
213
	}
214
215
	/**
216
	 * Page setup.
217
	 */
218
	public function wc_setup_pages() {
219
		?>
220
		<h1><?php _e( 'Page Setup', 'woocommerce' ); ?></h1>
221
		<form method="post">
222
			<p><?php printf( __( 'Your store needs a few essential %spages%s. The following will be created automatically (if they do not already exist):', 'woocommerce' ), '<a href="' . esc_url( admin_url( 'edit.php?post_type=page' ) ) . '" target="_blank">', '</a>' ); ?></p>
223
			<table class="wc-setup-pages" cellspacing="0">
224
				<thead>
225
					<tr>
226
						<th class="page-name"><?php _e( 'Page Name', 'woocommerce' ); ?></th>
227
						<th class="page-description"><?php _e( 'Description', 'woocommerce' ); ?></th>
228
					</tr>
229
				</thead>
230
				<tbody>
231
					<tr>
232
						<td class="page-name"><?php echo _x( 'Shop', 'Page title', 'woocommerce' ); ?></td>
233
						<td><?php _e( 'The shop page will display your products.', 'woocommerce' ); ?></td>
234
					</tr>
235
					<tr>
236
						<td class="page-name"><?php echo _x( 'Cart', 'Page title', 'woocommerce' ); ?></td>
237
						<td><?php _e( 'The cart page will be where the customers go to view their cart and begin checkout.', 'woocommerce' ); ?></td>
238
					</tr>
239
					<tr>
240
						<td class="page-name"><?php echo _x( 'Checkout', 'Page title', 'woocommerce' ); ?></td>
241
						<td>
242
							<?php _e( 'The checkout page will be where the customers go to pay for their items.', 'woocommerce' ); ?>
243
						</td>
244
					</tr>
245
					<tr>
246
						<td class="page-name"><?php echo _x( 'My Account', 'Page title', 'woocommerce' ); ?></td>
247
						<td>
248
							<?php _e( 'Registered customers will be able to manage their account details and view past orders on this page.', 'woocommerce' ); ?>
249
						</td>
250
					</tr>
251
				</tbody>
252
			</table>
253
254
			<p><?php printf( __( 'Once created, these pages can be managed from your admin dashboard on the %sPages screen%s. You can control which pages are shown on your website via %sAppearance > Menus%s.', 'woocommerce' ), '<a href="' . esc_url( admin_url( 'edit.php?post_type=page' ) ) . '" target="_blank">', '</a>', '<a href="' . esc_url( admin_url( 'nav-menus.php' ) ) . '" target="_blank">', '</a>' ); ?></p>
255
256
			<p class="wc-setup-actions step">
257
				<input type="submit" class="button-primary button button-large button-next" value="<?php esc_attr_e( 'Continue', 'woocommerce' ); ?>" name="save_step" />
258
				<a href="<?php echo esc_url( $this->get_next_step_link() ); ?>" class="button button-large button-next"><?php _e( 'Skip this step', 'woocommerce' ); ?></a>
259
				<?php wp_nonce_field( 'wc-setup' ); ?>
260
			</p>
261
		</form>
262
		<?php
263
	}
264
265
	/**
266
	 * Save Page Settings.
267
	 */
268
	public function wc_setup_pages_save() {
269
		check_admin_referer( 'wc-setup' );
270
271
		WC_Install::create_pages();
272
		wp_redirect( esc_url_raw( $this->get_next_step_link() ) );
273
		exit;
274
	}
275
276
	/**
277
	 * Locale settings.
278
	 */
279
	public function wc_setup_locale() {
280
		$user_location  = WC_Geolocation::geolocate_ip();
281
		$country        = ! empty( $user_location['country'] ) ? $user_location['country'] : 'US';
282
		$state          = ! empty( $user_location['state'] ) ? $user_location['state'] : '*';
283
		$state          = 'US' === $country && '*' === $state ? 'AL' : $state;
284
285
		// Defaults
286
		$currency       = get_option( 'woocommerce_currency', 'GBP' );
287
		$currency_pos   = get_option( 'woocommerce_currency_pos', 'left' );
288
		$decimal_sep    = get_option( 'woocommerce_price_decimal_sep', '.' );
289
		$num_decimals   = get_option( 'woocommerce_price_num_decimals', '2' );
290
		$thousand_sep   = get_option( 'woocommerce_price_thousand_sep', ',' );
291
		$dimension_unit = get_option( 'woocommerce_dimension_unit', 'cm' );
292
		$weight_unit    = get_option( 'woocommerce_weight_unit', 'kg' );
293
		?>
294
		<h1><?php _e( 'Store Locale Setup', 'woocommerce' ); ?></h1>
295
		<form method="post">
296
			<table class="form-table">
297
				<tr>
298
					<th scope="row"><label for="store_location"><?php _e( 'Where is your store based?', 'woocommerce' ); ?></label></th>
299
					<td>
300
					<select id="store_location" name="store_location" style="width:100%;" required data-placeholder="<?php esc_attr_e( 'Choose a country&hellip;', 'woocommerce' ); ?>" class="wc-enhanced-select">
301
							<?php WC()->countries->country_dropdown_options( $country, $state ); ?>
302
						</select>
303
					</td>
304
				</tr>
305
				<tr>
306
					<th scope="row"><label for="currency_code"><?php _e( 'Which currency will your store use?', 'woocommerce' ); ?></label></th>
307
					<td>
308
						<select id="currency_code" name="currency_code" style="width:100%;" data-placeholder="<?php esc_attr_e( 'Choose a currency&hellip;', 'woocommerce' ); ?>" class="wc-enhanced-select">
309
							<option value=""><?php _e( 'Choose a currency&hellip;', 'woocommerce' ); ?></option>
310
							<?php
311
							foreach ( get_woocommerce_currencies() as $code => $name ) {
312
								echo '<option value="' . esc_attr( $code ) . '" ' . selected( $currency, $code, false ) . '>' . esc_html( $name . ' (' . get_woocommerce_currency_symbol( $code ) . ')' ) . '</option>';
313
							}
314
							?>
315
						</select>
316
						<span class="description"><?php printf( __( 'If your currency is not listed you can %sadd it later%s.', 'woocommerce' ), '<a href="http://docs.woothemes.com/document/add-a-custom-currency-symbol/" target="_blank">', '</a>' ); ?></span>
317
					</td>
318
				</tr>
319
				<tr>
320
					<th scope="row"><label for="currency_pos"><?php _e( 'Currency Position', 'woocommerce' ); ?></label></th>
321
					<td>
322
						<select id="currency_pos" name="currency_pos" class="wc-enhanced-select">
323
							<option value="left" <?php selected( $currency_pos, 'left' ); ?>><?php echo __( 'Left', 'woocommerce' ); ?></option>
324
							<option value="right" <?php selected( $currency_pos, 'right' ); ?>><?php echo __( 'Right', 'woocommerce' ); ?></option>
325
							<option value="left_space" <?php selected( $currency_pos, 'left_space' ); ?>><?php echo __( 'Left with space', 'woocommerce' ); ?></option>
326
							<option value="right_space" <?php selected( $currency_pos, 'right_space' ); ?>><?php echo __( 'Right with space', 'woocommerce' ); ?></option>
327
						</select>
328
					</td>
329
				</tr>
330
				<tr>
331
					<th scope="row"><label for="thousand_sep"><?php _e( 'Thousand Separator', 'woocommerce' ); ?></label></th>
332
					<td>
333
						<input type="text" id="thousand_sep" name="thousand_sep" size="2" value="<?php echo esc_attr( $thousand_sep ) ; ?>" />
334
					</td>
335
				</tr>
336
				<tr>
337
					<th scope="row"><label for="decimal_sep"><?php _e( 'Decimal Separator', 'woocommerce' ); ?></label></th>
338
					<td>
339
						<input type="text" id="decimal_sep" name="decimal_sep" size="2" value="<?php echo esc_attr( $decimal_sep ) ; ?>" />
340
					</td>
341
				</tr>
342
				<tr>
343
					<th scope="row"><label for="num_decimals"><?php _e( 'Number of Decimals', 'woocommerce' ); ?></label></th>
344
					<td>
345
						<input type="text" id="num_decimals" name="num_decimals" size="2" value="<?php echo esc_attr( $num_decimals ) ; ?>" />
346
					</td>
347
				</tr>
348
				<tr>
349
					<th scope="row"><label for="weight_unit"><?php _e( 'Which unit should be used for product weights?', 'woocommerce' ); ?></label></th>
350
					<td>
351
						<select id="weight_unit" name="weight_unit" class="wc-enhanced-select">
352
							<option value="kg" <?php selected( $weight_unit, 'kg' ); ?>><?php echo __( 'kg', 'woocommerce' ); ?></option>
353
							<option value="g" <?php selected( $weight_unit, 'g' ); ?>><?php echo __( 'g', 'woocommerce' ); ?></option>
354
							<option value="lbs" <?php selected( $weight_unit, 'lbs' ); ?>><?php echo __( 'lbs', 'woocommerce' ); ?></option>
355
							<option value="oz" <?php selected( $weight_unit, 'oz' ); ?>><?php echo __( 'oz', 'woocommerce' ); ?></option>
356
						</select>
357
					</td>
358
				</tr>
359
				<tr>
360
					<th scope="row"><label for="dimension_unit"><?php _e( 'Which unit should be used for product dimensions?', 'woocommerce' ); ?></label></th>
361
					<td>
362
						<select id="dimension_unit" name="dimension_unit" class="wc-enhanced-select">
363
							<option value="m" <?php selected( $dimension_unit, 'm' ); ?>><?php echo __( 'm', 'woocommerce' ); ?></option>
364
							<option value="cm" <?php selected( $dimension_unit, 'cm' ); ?>><?php echo __( 'cm', 'woocommerce' ); ?></option>
365
							<option value="mm" <?php selected( $dimension_unit, 'mm' ); ?>><?php echo __( 'mm', 'woocommerce' ); ?></option>
366
							<option value="in" <?php selected( $dimension_unit, 'in' ); ?>><?php echo __( 'in', 'woocommerce' ); ?></option>
367
							<option value="yd" <?php selected( $dimension_unit, 'yd' ); ?>><?php echo __( 'yd', 'woocommerce' ); ?></option>
368
						</select>
369
					</td>
370
				</tr>
371
			</table>
372
			<p class="wc-setup-actions step">
373
				<input type="submit" class="button-primary button button-large button-next" value="<?php esc_attr_e( 'Continue', 'woocommerce' ); ?>" name="save_step" />
374
				<a href="<?php echo esc_url( $this->get_next_step_link() ); ?>" class="button button-large button-next"><?php _e( 'Skip this step', 'woocommerce' ); ?></a>
375
				<?php wp_nonce_field( 'wc-setup' ); ?>
376
			</p>
377
		</form>
378
		<?php
379
	}
380
381
	/**
382
	 * Save Locale Settings.
383
	 */
384
	public function wc_setup_locale_save() {
385
		check_admin_referer( 'wc-setup' );
386
387
		$store_location = sanitize_text_field( $_POST['store_location'] );
388
		$currency_code  = sanitize_text_field( $_POST['currency_code'] );
389
		$currency_pos   = sanitize_text_field( $_POST['currency_pos'] );
390
		$decimal_sep    = sanitize_text_field( $_POST['decimal_sep'] );
391
		$num_decimals   = sanitize_text_field( $_POST['num_decimals'] );
392
		$thousand_sep   = sanitize_text_field( $_POST['thousand_sep'] );
393
		$weight_unit    = sanitize_text_field( $_POST['weight_unit'] );
394
		$dimension_unit = sanitize_text_field( $_POST['dimension_unit'] );
395
396
		update_option( 'woocommerce_default_country', $store_location );
397
		update_option( 'woocommerce_currency', $currency_code );
398
		update_option( 'woocommerce_currency_pos', $currency_pos );
399
		update_option( 'woocommerce_price_decimal_sep', $decimal_sep );
400
		update_option( 'woocommerce_price_num_decimals', $num_decimals );
401
		update_option( 'woocommerce_price_thousand_sep', $thousand_sep );
402
		update_option( 'woocommerce_weight_unit', $weight_unit );
403
		update_option( 'woocommerce_dimension_unit', $dimension_unit );
404
405
		wp_redirect( esc_url_raw( $this->get_next_step_link() ) );
406
		exit;
407
	}
408
409
	/**
410
	 * Shipping and taxes.
411
	 */
412
	public function wc_setup_shipping_taxes() {
413
		?>
414
		<h1><?php _e( 'Shipping &amp; Tax Setup', 'woocommerce' ); ?></h1>
415
		<form method="post">
416
			<p><?php printf( __( 'If you will be charging sales tax, or shipping physical goods to customers, you can configure the basic options below. This is optional and can be changed later via %1$sWooCommerce > Settings > Tax%3$s and %2$sWooCommerce > Settings > Shipping%3$s.', 'woocommerce' ), '<a href="' . admin_url( 'admin.php?page=wc-settings&tab=tax' ) . '" target="_blank">', '<a href="' . admin_url( 'admin.php?page=wc-settings&tab=shipping' ) . '" target="_blank">', '</a>' ); ?></p>
417
			<table class="form-table">
418
				<tr class="section_title">
419
					<td colspan="2">
420
						<h2><?php _e( 'Basic Shipping Setup', 'woocommerce' ); ?></h2>
421
					</td>
422
				</tr>
423
				<tr>
424
					<th scope="row"><label for="woocommerce_calc_shipping"><?php _e( 'Will you be shipping products?', 'woocommerce' ); ?></label></th>
425
					<td>
426
						<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" />
427
						<label for="woocommerce_calc_shipping"><?php _e( 'Yes, I will be shipping physical goods to customers', 'woocommerce' ); ?></label>
428
					</td>
429
				</tr>
430
				<tr>
431
					<th scope="row"><label for="shipping_cost_domestic"><?php _e( '<strong>Domestic</strong> shipping cost:', 'woocommerce' ); ?></label></th>
432
					<td>
433
						<?php printf( __( 'A total of %s per order and/or %s per item', 'woocommerce' ), get_woocommerce_currency_symbol() . ' <input type="text" id="shipping_cost_domestic" name="shipping_cost_domestic" size="5" />', get_woocommerce_currency_symbol() . ' <input type="text" id="shipping_cost_domestic_item" name="shipping_cost_domestic_item" size="5" />' ); ?>
434
					</td>
435
				</tr>
436
				<tr>
437
					<th scope="row"><label for="shipping_cost_worldwide"><?php _e( '<strong>Worldwide</strong> shipping cost:', 'woocommerce' ); ?></label></th>
438
					<td>
439
						<?php printf( __( 'A total of %s per order and/or %s per item', 'woocommerce' ), get_woocommerce_currency_symbol() . ' <input type="text" id="shipping_cost_worldwide" name="shipping_cost_worldwide" size="5" />', get_woocommerce_currency_symbol() . ' <input type="text" id="shipping_cost_worldwide_item" name="shipping_cost_worldwide_item" size="5" />' ); ?>
440
					</td>
441
				</tr>
442
				<tr class="section_title">
443
					<td colspan="2">
444
						<h2><?php _e( 'Basic Tax Setup', 'woocommerce' ); ?></h2>
445
					</td>
446
				</tr>
447
				<tr>
448
					<th scope="row"><label for="woocommerce_calc_taxes"><?php _e( 'Will you be charging sales tax?', 'woocommerce' ); ?></label></th>
449
					<td>
450
						<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" />
451
						<label for="woocommerce_calc_taxes"><?php _e( 'Yes, I will be charging sales tax', 'woocommerce' ); ?></label>
452
					</td>
453
				</tr>
454
				<tr>
455
					<th scope="row"><label for="woocommerce_prices_include_tax"><?php _e( 'How will you enter product prices?', 'woocommerce' ); ?></label></th>
456
					<td>
457
						<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 _e( 'I will enter prices inclusive of tax', 'woocommerce' ); ?></label><br/>
458
						<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 _e( 'I will enter prices exclusive of tax', 'woocommerce' ); ?></label>
459
					</td>
460
				</tr>
461
				<?php
462
					$locale_info = include( WC()->plugin_path() . '/i18n/locale-info.php' );
463
					$tax_rates   = array();
464
					$country     = WC()->countries->get_base_country();
465
					$state       = WC()->countries->get_base_state();
466
467 View Code Duplication
					if ( isset( $locale_info[ $country ] ) ) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
468
						if ( isset( $locale_info[ $country ]['tax_rates'][ $state ] ) ) {
469
							$tax_rates = $locale_info[ $country ]['tax_rates'][ $state ];
470
						} elseif ( isset( $locale_info[ $country ]['tax_rates'][''] ) ) {
471
							$tax_rates = $locale_info[ $country ]['tax_rates'][''];
472
						}
473
						if ( isset( $locale_info[ $country ]['tax_rates']['*'] ) ) {
474
							$tax_rates = array_merge( $locale_info[ $country ]['tax_rates']['*'], $tax_rates );
475
						}
476
					}
477
					if ( $tax_rates ) {
478
						?>
479
						<tr>
480
							<th scope="row"><label for="woocommerce_import_tax_rates"><?php _e( 'Import Tax Rates?', 'woocommerce' ); ?></label></th>
481
							<td>
482
								<label><input type="checkbox" id="woocommerce_import_tax_rates" name="woocommerce_import_tax_rates" class="input-checkbox" value="yes" /> <?php _e( 'Yes, please import some starter tax rates', 'woocommerce' ); ?></label>
483
								<div class="importing-tax-rates">
484
									<table class="tax-rates">
485
										<thead>
486
											<tr>
487
												<th><?php _e( 'Country', 'woocommerce' ); ?></th>
488
												<th><?php _e( 'State', 'woocommerce' ); ?></th>
489
												<th><?php _e( 'Rate (%)', 'woocommerce' ); ?></th>
490
												<th><?php _e( 'Name', 'woocommerce' ); ?></th>
491
												<th><?php _e( 'Tax Shipping', 'woocommerce' ); ?></th>
492
											</tr>
493
										</thead>
494
										<tbody>
495
											<?php
496
												foreach ( $tax_rates as $rate ) {
497
													?>
498
													<tr>
499
														<td><?php echo esc_attr( $rate['country'] ); ?></td>
500
														<td><?php echo esc_attr( $rate['state'] ? $rate['state'] : '*' ); ?></td>
501
														<td><?php echo esc_attr( $rate['rate'] ); ?></td>
502
														<td><?php echo esc_attr( $rate['name'] ); ?></td>
503
														<td><?php echo empty( $rate['shipping'] ) ? '-' : '&#10004;'; ?></td>
504
													</tr>
505
													<?php
506
												}
507
											?>
508
										</tbody>
509
									</table>
510
									<p class="description"><?php _e( 'Please note: you may still need to add local and product specific tax rates depending on your business location. If in doubt, speak to an accountant.', 'woocommerce' ); ?></p>
511
								</div>
512
								<p class="description"><?php printf( __( 'You can edit tax rates later from the %1$stax settings%3$s screen and read more about taxes in %2$sour documentation%3$s.', 'woocommerce' ), '<a href="' . admin_url( 'admin.php?page=wc-settings&tab=tax' ) . '" target="_blank">', '<a href="http://docs.woothemes.com/document/setting-up-taxes-in-woocommerce/" target="_blank">', '</a>' ); ?></p>
513
							</td>
514
						</tr>
515
						<?php
516
					}
517
				?>
518
			</table>
519
			<p class="wc-setup-actions step">
520
				<input type="submit" class="button-primary button button-large button-next" value="<?php esc_attr_e( 'Continue', 'woocommerce' ); ?>" name="save_step" />
521
				<a href="<?php echo esc_url( $this->get_next_step_link() ); ?>" class="button button-large button-next"><?php _e( 'Skip this step', 'woocommerce' ); ?></a>
522
				<?php wp_nonce_field( 'wc-setup' ); ?>
523
			</p>
524
		</form>
525
		<?php
526
	}
527
528
	/**
529
	 * Save shipping and tax options.
530
	 */
531
	public function wc_setup_shipping_taxes_save() {
532
		check_admin_referer( 'wc-setup' );
533
534
		$enable_shipping = isset( $_POST['woocommerce_calc_shipping'] );
535
		$enable_taxes    = isset( $_POST['woocommerce_calc_taxes'] );
536
537
		if ( $enable_shipping ) {
538
			update_option( 'woocommerce_ship_to_countries', '' );
539
		} else {
540
			update_option( 'woocommerce_ship_to_countries', 'disabled' );
541
		}
542
543
		update_option( 'woocommerce_calc_taxes', $enable_taxes ? 'yes' : 'no' );
544
		update_option( 'woocommerce_prices_include_tax', sanitize_text_field( $_POST['woocommerce_prices_include_tax'] ) );
545
546
		if ( $enable_shipping && ! empty( $_POST['shipping_cost_domestic'] ) ) {
547
			// Create a domestic shipping zone
548
			$zone = new WC_Shipping_Zone( $zone_data['zone_id'] );
549
			$zone->set_zone_name( __( 'Domestic', 'woocommerce' ) );
550
			$zone->set_zone_order( 1 );
551
			$zone->add_location( WC()->countries->get_base_country(), 'country' );
552
			$zone->save();
553
554
			// Add a flat rate shipping method to this domestic zone
555
			$instance_id     = $zone->add_shipping_method( 'flat_rate' );
556
			$shipping_method = new WC_Shipping_Flat_Rate( $instance_id );
557
			$option_key      = $shipping_method->get_instance_option_key();
558
559
			// Update rate settings
560
			$costs           = array();
561
			$costs[]         = wc_format_decimal( sanitize_text_field( $_POST['shipping_cost_domestic'] ) );
562
			if ( $item_cost = sanitize_text_field( $_POST['shipping_cost_domestic_item'] ) ) {
563
				$costs[] = $item_cost . ' * [qty]';
564
			}
565
			$shipping_method->instance_settings['cost']    = implode( ' + ', array_filter( $costs ) );
566
			$shipping_method->instance_settings['enabled'] = 'yes';
567
			$shipping_method->instance_settings['type']    = 'order';
568
			update_option( $option_key, $shipping_method->instance_settings );
569
		}
570
571
		if ( $enable_shipping && ! empty( $_POST['shipping_cost_worldwide'] ) ) {
572
			// Add a flat rate shipping method to the worldwide zone
573
			$zone            = WC_Shipping_Zones::get_zone( 0 );
574
			$instance_id     = $zone->add_shipping_method( 'flat_rate' );
575
			$shipping_method = new WC_Shipping_Flat_Rate( $instance_id );
576
			$option_key      = $shipping_method->get_instance_option_key();
577
578
			// Update rate settings
579
			$costs           = array();
580
			$costs[]         = wc_format_decimal( sanitize_text_field( $_POST['shipping_cost_worldwide'] ) );
581
			if ( $item_cost = sanitize_text_field( $_POST['shipping_cost_worldwide_item'] ) ) {
582
				$costs[] = $item_cost . ' * [qty]';
583
			}
584
			$shipping_method->instance_settings['cost']    = implode( ' + ', array_filter( $costs ) );
585
			$shipping_method->instance_settings['enabled'] = 'yes';
586
			$shipping_method->instance_settings['type']    = 'order';
587
			update_option( $option_key, $shipping_method->instance_settings );
588
		}
589
590
		if ( $enable_taxes && ! empty( $_POST['woocommerce_import_tax_rates'] ) ) {
591
			$locale_info = include( WC()->plugin_path() . '/i18n/locale-info.php' );
592
			$tax_rates   = array();
593
			$country     = WC()->countries->get_base_country();
594
			$state       = WC()->countries->get_base_state();
595
596 View Code Duplication
			if ( isset( $locale_info[ $country ] ) ) {
0 ignored issues
show
Duplication introduced by
This code seems to be duplicated across your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
597
				if ( isset( $locale_info[ $country ]['tax_rates'][ $state ] ) ) {
598
					$tax_rates = $locale_info[ $country ]['tax_rates'][ $state ];
599
				} elseif ( isset( $locale_info[ $country ]['tax_rates'][''] ) ) {
600
					$tax_rates = $locale_info[ $country ]['tax_rates'][''];
601
				}
602
				if ( isset( $locale_info[ $country ]['tax_rates']['*'] ) ) {
603
					$tax_rates = array_merge( $locale_info[ $country ]['tax_rates']['*'], $tax_rates );
604
				}
605
			}
606
			if ( $tax_rates ) {
607
				$loop = 0;
608
				foreach ( $tax_rates as $rate ) {
609
					$tax_rate = array(
610
						'tax_rate_country'  => $rate['country'],
611
						'tax_rate_state'    => $rate['state'],
612
						'tax_rate'          => $rate['rate'],
613
						'tax_rate_name'     => $rate['name'],
614
						'tax_rate_priority' => isset( $rate['priority'] ) ? absint( $rate['priority'] ) : 1,
615
						'tax_rate_compound' => 0,
616
						'tax_rate_shipping' => $rate['shipping'] ? 1 : 0,
617
						'tax_rate_order'    => $loop ++,
618
						'tax_rate_class'    => ''
619
					);
620
					WC_Tax::_insert_tax_rate( $tax_rate );
621
				}
622
			}
623
		}
624
625
		wp_redirect( esc_url_raw( $this->get_next_step_link() ) );
626
		exit;
627
	}
628
629
	/**
630
	 * Payments Step.
631
	 */
632
	public function wc_setup_payments() {
633
		$paypal_settings = array_filter( (array) get_option( 'woocommerce_paypal_settings', array() ) );
634
		$cheque_settings = array_filter( (array) get_option( 'woocommerce_cheque_settings', array() ) );
635
		$cod_settings    = array_filter( (array) get_option( 'woocommerce_cod_settings', array() ) );
636
		$bacs_settings   = array_filter( (array) get_option( 'woocommerce_bacs_settings', array() ) );
637
		?>
638
		<h1><?php _e( 'Payments', 'woocommerce' ); ?></h1>
639
		<form method="post">
640
			<p><?php printf( __( 'WooCommerce can accept both online and offline payments. %2$sAdditional payment methods%3$s can be installed later and managed from the %1$scheckout settings%3$s screen.', 'woocommerce' ), '<a href="' . admin_url( 'admin.php?page=wc-settings&tab=checkout' ) . '" target="_blank">', '<a href="' . admin_url( 'admin.php?page=wc-addons&view=payment-gateways' ) . '" target="_blank">', '</a>' ); ?></p>
641
			<table class="form-table">
642
				<tr class="section_title">
643
					<td colspan="2">
644
						<h2><?php _e( 'PayPal Standard', 'woocommerce' ); ?></h2>
645
						<p><?php _e( 'To accept payments via PayPal on your store, simply enter your PayPal email address below.', 'woocommerce' ); ?></p>
646
					</td>
647
				</tr>
648
				<tr>
649
					<th scope="row"><label for="woocommerce_paypal_email"><?php _e( 'PayPal Email Address:', 'woocommerce' ); ?></label></th>
650
					<td>
651
						<input type="email" id="woocommerce_paypal_email" name="woocommerce_paypal_email" class="input-text" value="<?php echo esc_attr( isset( $paypal_settings['email'] ) ? $paypal_settings['email'] : '' ); ?>" />
652
					</td>
653
				</tr>
654
				<tr class="section_title">
655
					<td colspan="2">
656
						<h2><?php _e( 'Offline Payments', 'woocommerce' ); ?></h2>
657
						<p><?php _e( 'Offline gateways require manual processing, but can be useful in certain circumstances or for testing payments.', 'woocommerce' ); ?></p>
658
					</td>
659
				</tr>
660
				<tr>
661
					<th scope="row"><label for="woocommerce_enable_cheque"><?php _e( 'Cheque Payments', 'woocommerce' ); ?></label></th>
662
					<td>
663
						<label><input type="checkbox" id="woocommerce_enable_cheque" name="woocommerce_enable_cheque" class="input-checkbox" value="yes" <?php checked( ( isset( $cheque_settings['enabled'] ) && 'yes' === $cheque_settings['enabled'] ), true ); ?> /> <?php _e( 'Enable payment via Cheques', 'woocommerce' ); ?></label>
664
					</td>
665
				</tr>
666
				<tr>
667
					<th scope="row"><label for="woocommerce_enable_cod"><?php _e( 'Cash on Delivery', 'woocommerce' ); ?></label></th>
668
					<td>
669
						<label><input type="checkbox" id="woocommerce_enable_cod" name="woocommerce_enable_cod" class="input-checkbox" value="yes" <?php checked( ( isset( $cod_settings['enabled'] ) && 'yes' === $cod_settings['enabled'] ), true ); ?> /> <?php _e( 'Enable cash on delivery', 'woocommerce' ); ?></label>
670
					</td>
671
				</tr>
672
				<tr>
673
					<th scope="row"><label for="woocommerce_enable_bacs"><?php _e( 'Bank Transfer (BACS)', 'woocommerce' ); ?></label></th>
674
					<td>
675
						<label><input type="checkbox" id="woocommerce_enable_bacs" name="woocommerce_enable_bacs" class="input-checkbox" value="yes" <?php checked( ( isset( $bacs_settings['enabled'] ) && 'yes' === $bacs_settings['enabled'] ), true ); ?> /> <?php _e( 'Enable BACS payments', 'woocommerce' ); ?></label>
676
					</td>
677
				</tr>
678
			</table>
679
			<p class="wc-setup-actions step">
680
				<input type="submit" class="button-primary button button-large button-next" value="<?php esc_attr_e( 'Continue', 'woocommerce' ); ?>" name="save_step" />
681
				<a href="<?php echo esc_url( $this->get_next_step_link() ); ?>" class="button button-large button-next"><?php _e( 'Skip this step', 'woocommerce' ); ?></a>
682
				<?php wp_nonce_field( 'wc-setup' ); ?>
683
			</p>
684
		</form>
685
		<?php
686
	}
687
688
	/**
689
	 * Payments Step save.
690
	 */
691
	public function wc_setup_payments_save() {
692
		check_admin_referer( 'wc-setup' );
693
694
		$paypal_settings            = array_filter( (array) get_option( 'woocommerce_paypal_settings', array() ) );
695
		$cheque_settings            = array_filter( (array) get_option( 'woocommerce_cheque_settings', array() ) );
696
		$cod_settings               = array_filter( (array) get_option( 'woocommerce_cod_settings', array() ) );
697
		$bacs_settings              = array_filter( (array) get_option( 'woocommerce_bacs_settings', array() ) );
698
699
		$paypal_settings['enabled'] = ! empty( $_POST['woocommerce_paypal_email'] ) ? 'yes' : 'no';
700
		$cheque_settings['enabled'] = isset( $_POST['woocommerce_enable_cheque'] ) ? 'yes' : 'no';
701
		$cod_settings['enabled']    = isset( $_POST['woocommerce_enable_cod'] ) ? 'yes' : 'no';
702
		$bacs_settings['enabled']   = isset( $_POST['woocommerce_enable_bacs'] ) ? 'yes' : 'no';
703
704
		if ( ! empty( $_POST['woocommerce_paypal_email'] ) ) {
705
			$paypal_settings['email'] = wc_clean( $_POST['woocommerce_paypal_email'] );
706
		}
707
708
		update_option( 'woocommerce_paypal_settings', $paypal_settings );
709
		update_option( 'woocommerce_cheque_settings', $cheque_settings );
710
		update_option( 'woocommerce_cod_settings', $cod_settings );
711
		update_option( 'woocommerce_bacs_settings', $bacs_settings );
712
713
		wp_redirect( esc_url_raw( $this->get_next_step_link() ) );
714
		exit;
715
	}
716
717
	/**
718
	 * Actions on the final step.
719
	 */
720
	private function wc_setup_ready_actions() {
721
		WC_Admin_Notices::remove_notice( 'install' );
722
723
		if ( isset( $_GET['wc_tracker_optin'] ) && isset( $_GET['wc_tracker_nonce'] ) && wp_verify_nonce( $_GET['wc_tracker_nonce'], 'wc_tracker_optin' ) ) {
724
			update_option( 'woocommerce_allow_tracking', 'yes' );
725
			WC_Tracker::send_tracking_data( true );
726
727
		} elseif ( isset( $_GET['wc_tracker_optout'] ) && isset( $_GET['wc_tracker_nonce'] ) && wp_verify_nonce( $_GET['wc_tracker_nonce'], 'wc_tracker_optout' ) ) {
728
			update_option( 'woocommerce_allow_tracking', 'no' );
729
		}
730
	}
731
732
	/**
733
	 * Final step.
734
	 */
735
	public function wc_setup_ready() {
736
		$this->wc_setup_ready_actions();
737
		shuffle( $this->tweets );
738
		?>
739
		<a href="https://twitter.com/share" class="twitter-share-button" data-url="http://www.woothemes.com/woocommerce/" data-text="<?php echo esc_attr( $this->tweets[0] ); ?>" data-via="WooThemes" data-size="large">Tweet</a>
740
		<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>
741
742
		<h1><?php _e( 'Your Store is Ready!', 'woocommerce' ); ?></h1>
743
744
		<?php if ( 'unknown' === get_option( 'woocommerce_allow_tracking', 'unknown' ) ) : ?>
745
			<div class="woocommerce-message woocommerce-tracker">
746
				<p><?php printf( __( 'Want to help make WooCommerce even more awesome? Allow WooThemes to collect non-sensitive diagnostic data and usage information. %sFind out more%s.', 'woocommerce' ), '<a href="http://www.woothemes.com/woocommerce/usage-tracking/" target="_blank">', '</a>' ); ?></p>
747
				<p class="submit">
748
					<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 _e( 'Allow', 'woocommerce' ); ?></a>
749
					<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 _e( 'No thanks', 'woocommerce' ); ?></a>
750
				</p>
751
			</div>
752
		<?php endif; ?>
753
754
		<div class="wc-setup-next-steps">
755
			<div class="wc-setup-next-steps-first">
756
				<h2><?php _e( 'Next Steps', 'woocommerce' ); ?></h2>
757
				<ul>
758
					<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 _e( 'Create your first product!', 'woocommerce' ); ?></a></li>
759
				</ul>
760
			</div>
761
			<div class="wc-setup-next-steps-last">
762
				<h2><?php _e( 'Learn More', 'woocommerce' ); ?></h2>
763
				<ul>
764
					<li class="video-walkthrough"><a href="http://docs.woothemes.com/document/woocommerce-101-video-series/?utm_source=WooCommercePlugin&amp;utm_medium=Wizard&amp;utm_content=Videos&amp;utm_campaign=Onboarding"><?php _e( 'Watch the WC 101 video walkthroughs', 'woocommerce' ); ?></a></li>
765
					<li class="newsletter"><a href="http://www.woothemes.com/woocommerce-onboarding-email/?utm_source=WooCommercePlugin&amp;utm_medium=Wizard&amp;utm_content=Newsletter&amp;utm_campaign=Onboarding"><?php _e( 'Get eCommerce advice in your inbox', 'woocommerce' ); ?></a></li>
766
					<li class="sidekick"><a href="http://www.woothemes.com/sidekick/"><?php _e( 'Follow Sidekick interactive walkthroughs', 'woocommerce' ); ?></a></li>
767
					<li class="learn-more"><a href="http://docs.woothemes.com/documentation/plugins/woocommerce/getting-started/?utm_source=WooCommercePlugin&amp;utm_medium=Wizard&amp;utm_content=Docs&amp;utm_campaign=Onboarding"><?php _e( 'Read more about getting started', 'woocommerce' ); ?></a></li>
768
				</ul>
769
			</div>
770
		</div>
771
		<?php
772
	}
773
}
774
775
new WC_Admin_Setup_Wizard();
776