woocommerce/admin/woocommerce-admin-settings.php

1350 lines
47 KiB
PHP

<?php
/**
* Functions for the settings page in admin.
*
* The settings page contains options for the WooCommerce plugin - this file contains functions to display
* and save the list of options.
*
* @author WooThemes
* @category Admin
* @package WooCommerce
*/
/**
* Define settings for the WooCommerce settings pages
*/
global $woocommerce_settings;
$woocommerce_settings['general'] = apply_filters('woocommerce_general_settings', array(
array( 'name' => __( 'General Options', 'woocommerce' ), 'type' => 'title', 'desc' => '', 'id' => 'general_options' ),
array(
'name' => __( 'Base Country/Region', 'woocommerce' ),
'desc' => __( 'This is the base country for your business. Tax rates will be based on this country.', 'woocommerce' ),
'id' => 'woocommerce_default_country',
'css' => 'min-width:300px;',
'std' => 'GB',
'type' => 'single_select_country'
),
array(
'name' => __( 'Currency', 'woocommerce' ),
'desc' => __("This controls what currency prices are listed at in the catalog and which currency gateways will take payments in.", 'woocommerce' ),
'tip' => '',
'id' => 'woocommerce_currency',
'css' => 'min-width:300px;',
'std' => 'GBP',
'type' => 'select',
'class' => 'chosen_select',
'options' => array_unique(apply_filters('woocommerce_currencies', array(
'USD' => __( 'US Dollars (&#36;)', 'woocommerce' ),
'EUR' => __( 'Euros (&euro;)', 'woocommerce' ),
'GBP' => __( 'Pounds Sterling (&pound;)', 'woocommerce' ),
'AUD' => __( 'Australian Dollars (&#36;)', 'woocommerce' ),
'BRL' => __( 'Brazilian Real (&#36;)', 'woocommerce' ),
'CAD' => __( 'Canadian Dollars (&#36;)', 'woocommerce' ),
'CZK' => __( 'Czech Koruna (&#75;&#269;)', 'woocommerce' ),
'DKK' => __( 'Danish Krone', 'woocommerce' ),
'HKD' => __( 'Hong Kong Dollar (&#36;)', 'woocommerce' ),
'HUF' => __( 'Hungarian Forint', 'woocommerce' ),
'ILS' => __( 'Israeli Shekel', 'woocommerce' ),
'JPY' => __( 'Japanese Yen (&yen;)', 'woocommerce' ),
'MYR' => __( 'Malaysian Ringgits', 'woocommerce' ),
'MXN' => __( 'Mexican Peso (&#36;)', 'woocommerce' ),
'NZD' => __( 'New Zealand Dollar (&#36;)', 'woocommerce' ),
'NOK' => __( 'Norwegian Krone', 'woocommerce' ),
'PHP' => __( 'Philippine Pesos', 'woocommerce' ),
'PLN' => __( 'Polish Zloty', 'woocommerce' ),
'SGD' => __( 'Singapore Dollar (&#36;)', 'woocommerce' ),
'SEK' => __( 'Swedish Krona', 'woocommerce' ),
'CHF' => __( 'Swiss Franc', 'woocommerce' ),
'TWD' => __( 'Taiwan New Dollars', 'woocommerce' ),
'THB' => __( 'Thai Baht', 'woocommerce' ),
'TRY' => __( 'Turkish Lira (TL)', 'woocommerce' ),
'ZAR' => __( 'South African rand (R)', 'woocommerce' ),
))
)
),
array(
'name' => __( 'Allowed Countries', 'woocommerce' ),
'desc' => __( 'These are countries that you are willing to ship to.', 'woocommerce' ),
'id' => 'woocommerce_allowed_countries',
'std' => 'all',
'type' => 'select',
'class' => 'chosen_select',
'css' => 'min-width:300px;',
'options' => array(
'all' => __( 'All Countries', 'woocommerce' ),
'specific' => __( 'Specific Countries', 'woocommerce' )
)
),
array(
'name' => __( 'Specific Countries', 'woocommerce' ),
'desc' => '',
'id' => 'woocommerce_specific_allowed_countries',
'css' => '',
'std' => '',
'type' => 'multi_select_countries'
),
array(
'name' => __( 'Checkout Fields', 'woocommerce' ),
'desc' => __( 'Enable coupon form on checkout', 'woocommerce' ),
'id' => 'woocommerce_enable_coupon_form_on_checkout',
'std' => 'no',
'type' => 'checkbox',
'checkboxgroup' => 'start'
),
array(
'desc' => __( 'Show order comments section', 'woocommerce' ),
'id' => 'woocommerce_enable_order_comments',
'std' => 'yes',
'type' => 'checkbox',
'checkboxgroup' => ''
),
array(
'desc' => __( 'Allow unregistered users to register from the checkout page', 'woocommerce' ),
'id' => 'woocommerce_enable_signup_and_login_from_checkout',
'std' => 'yes',
'type' => 'checkbox',
'checkboxgroup' => 'end'
),
array(
'name' => __( 'Security', 'woocommerce' ),
'desc' => __( 'Force <abbr title="Secure Sockets Layer, a computing protocol that ensures the security of data sent via the Internet by using encryption">SSL</abbr>/HTTPS (an SSL Certificate is required)', 'woocommerce' ),
'id' => 'woocommerce_force_ssl_checkout',
'std' => 'no',
'type' => 'checkbox',
'checkboxgroup' => 'start',
'show_if_checked' => 'option',
),
array(
'desc' => __( 'Un-force <abbr title="Secure Sockets Layer, a computing protocol that ensures the security of data sent via the Internet by using encryption">SSL</abbr>/HTTPS when leaving the checkout', 'woocommerce' ),
'id' => 'woocommerce_unforce_ssl_checkout',
'std' => 'no',
'type' => 'checkbox',
'checkboxgroup' => 'end',
'show_if_checked' => 'yes',
),
array(
'name' => __( 'Customer Accounts', 'woocommerce' ),
'desc' => __( 'Allow unregistered users to register from the My Account page', 'woocommerce' ),
'id' => 'woocommerce_enable_myaccount_registration',
'std' => 'no',
'type' => 'checkbox',
'checkboxgroup' => 'start'
),
array(
'name' => __( 'Checkout', 'woocommerce' ),
'desc' => __( 'Allow users to checkout without signing up for an account', 'woocommerce' ),
'id' => 'woocommerce_enable_guest_checkout',
'std' => 'yes',
'type' => 'checkbox',
'checkboxgroup' => ''
),
array(
'desc' => __( 'Clear cart when logging out', 'woocommerce' ),
'id' => 'woocommerce_clear_cart_on_logout',
'std' => 'no',
'type' => 'checkbox',
'checkboxgroup' => ''
),
array(
'desc' => __( 'Prevent customers from accessing WordPress admin', 'woocommerce' ),
'id' => 'woocommerce_lock_down_admin',
'std' => 'no',
'type' => 'checkbox',
'checkboxgroup' => 'end'
),
array(
'name' => __( 'Styling', 'woocommerce' ),
'desc' => __( 'Enable WooCommerce CSS styles', 'woocommerce' ),
'id' => 'woocommerce_frontend_css',
'std' => 'yes',
'type' => 'checkbox',
'checkboxgroup' => 'start'
),
array(
'desc' => __( 'Enable the "Demo Store" notice on your site', 'woocommerce' ),
'id' => 'woocommerce_demo_store',
'std' => 'no',
'type' => 'checkbox',
'checkboxgroup' => 'end'
),
array(
'name' => __( 'Scripts', 'woocommerce' ),
'desc' => __( 'Enable AJAX add to cart buttons on product archives', 'woocommerce' ),
'id' => 'woocommerce_enable_ajax_add_to_cart',
'std' => 'yes',
'type' => 'checkbox',
'checkboxgroup' => 'start'
),
array(
'desc' => __( 'Enable WooCommerce lightbox on the product page', 'woocommerce' ),
'id' => 'woocommerce_enable_lightbox',
'std' => 'yes',
'type' => 'checkbox',
'checkboxgroup' => ''
),
array(
'desc' => __( 'Enable "chosen" (enhanced select input) for country selection inputs', 'woocommerce' ),
'id' => 'woocommerce_enable_chosen',
'std' => 'yes',
'type' => 'checkbox',
'checkboxgroup' => ''
),
array(
'desc' => __( 'Enable jQuery UI (used by the price slider widget)', 'woocommerce' ),
'id' => 'woocommerce_enable_jquery_ui',
'std' => 'yes',
'type' => 'checkbox',
'checkboxgroup' => ''
),
array(
'desc' => __( 'Output WooCommerce JavaScript in the footer (<code>wp_footer</code>)', 'woocommerce' ),
'id' => 'woocommerce_scripts_position',
'std' => 'yes',
'type' => 'checkbox',
'checkboxgroup' => 'end'
),
array(
'name' => __('File download method', 'woocommerce'),
'desc' => __('Forcing downloads will keep URLs hidden, but some servers may serve large files unreliably. If supported, <code>X-Accel-Redirect</code>/ <code>X-Sendfile</code> can be used to serve downloads instead (server requires <code>mod_xsendfile</code>).', 'woocommerce'),
'id' => 'woocommerce_file_download_method',
'type' => 'select',
'class' => 'chosen_select',
'css' => 'min-width:300px;',
'std' => 'force',
'options' => array(
'force' => __( 'Force Downloads', 'woocommerce' ),
'xsendfile' => __( 'X-Accel-Redirect/X-Sendfile', 'woocommerce' ),
'redirect' => __( 'Redirect only', 'woocommerce' ),
)
),
array(
'name' => __('Localisation', 'woocommerce'),
'desc' => __('Use informal localisation file if it exists', 'woocommerce'),
'id' => 'woocommerce_informal_localisation_type',
'type' => 'checkbox',
'std' => 'no',
),
array( 'type' => 'sectionend', 'id' => 'general_options'),
)); // End general settings
$shop_page_id = woocommerce_get_page_id('shop');
$base_slug = ($shop_page_id > 0 && get_page( $shop_page_id )) ? get_page_uri( $shop_page_id ) : 'shop';
$woocommerce_settings['pages'] = apply_filters('woocommerce_page_settings', array(
array( 'name' => __( 'Page Setup', 'woocommerce' ), 'type' => 'title', 'desc' => '', 'id' => 'page_options' ),
array(
'name' => __( 'Shop Base Page', 'woocommerce' ),
'desc' => sprintf( __( 'This sets the base page of your shop.', 'woocommerce' ), '<a target="_blank" href="options-permalink.php">', '</a>' ),
'id' => 'woocommerce_shop_page_id',
'type' => 'single_select_page',
'std' => '',
'class' => 'chosen_select_nostd',
'css' => 'min-width:300px;',
),
array(
'name' => __( 'Base Page Title', 'woocommerce' ),
'desc' => __( 'This title to show on the shop base page. Leave blank to use the page title.', 'woocommerce' ),
'id' => 'woocommerce_shop_page_title',
'type' => 'text',
'css' => 'min-width:300px;',
'std' => 'All Products' // Default value for the page title - changed in settings
),
array(
'name' => __( 'Terms page ID', 'woocommerce' ),
'desc' => __( 'If you define a "Terms" page the customer will be asked if they accept them when checking out.', 'woocommerce' ),
'tip' => '',
'id' => 'woocommerce_terms_page_id',
'std' => '',
'class' => 'chosen_select_nostd',
'css' => 'min-width:300px;',
'type' => 'single_select_page'
),
array(
'name' => __( 'Logout link', 'woocommerce' ),
'desc' => sprintf(__( 'Append a logout link to menus containing "My Account"', 'woocommerce' ), $base_slug),
'id' => 'woocommerce_menu_logout_link',
'std' => 'yes',
'type' => 'checkbox',
),
array( 'type' => 'sectionend', 'id' => 'page_options' ),
array( 'name' => __( 'Permalinks', 'woocommerce' ), 'type' => 'title', 'desc' => '', 'id' => 'permalink_options' ),
array(
'name' => __( 'Taxonomy base page', 'woocommerce' ),
'desc' => sprintf(__( 'Prepend shop categories/tags with shop base page (<code>%s</code>)', 'woocommerce' ), $base_slug),
'id' => 'woocommerce_prepend_shop_page_to_urls',
'std' => 'no',
'type' => 'checkbox',
),
array(
'name' => __( 'Product category slug', 'woocommerce' ),
'desc' => __( 'Shows in the product category URLs. Leave blank to use the default slug.', 'woocommerce' ),
'id' => 'woocommerce_product_category_slug',
'type' => 'text',
'css' => 'min-width:300px;',
'std' => ''
),
array(
'name' => __( 'Product tag slug', 'woocommerce' ),
'desc' => __( 'Shows in the product tag URLs. Leave blank to use the default slug.', 'woocommerce' ),
'id' => 'woocommerce_product_tag_slug',
'type' => 'text',
'css' => 'min-width:300px;',
'std' => ''
),
array(
'name' => __( 'Product base page', 'woocommerce' ),
'desc' => sprintf(__( 'Prepend product permalinks with shop base page (<code>%s</code>)', 'woocommerce' ), $base_slug),
'id' => 'woocommerce_prepend_shop_page_to_products',
'std' => 'yes',
'type' => 'checkbox',
'checkboxgroup' => 'start'
),
array(
'name' => __( 'Product base category', 'woocommerce' ),
'desc' => __( 'Prepend product permalinks with product category', 'woocommerce' ),
'id' => 'woocommerce_prepend_category_to_products',
'std' => 'no',
'type' => 'checkbox',
'checkboxgroup' => 'end'
),
array( 'type' => 'sectionend', 'id' => 'permalink_options' ),
array( 'name' => __( 'Shop Pages', 'woocommerce' ), 'type' => 'title', 'desc' => __( 'The following pages need selecting so that WooCommerce knows which are which. These pages should have been created upon installation of the plugin.', 'woocommerce' ) ),
array(
'name' => __( 'Cart Page', 'woocommerce' ),
'desc' => __( 'Page contents: [woocommerce_cart]', 'woocommerce' ),
'id' => 'woocommerce_cart_page_id',
'type' => 'single_select_page',
'std' => '',
'class' => 'chosen_select_nostd',
'css' => 'min-width:300px;',
),
array(
'name' => __( 'Checkout Page', 'woocommerce' ),
'desc' => __( 'Page contents: [woocommerce_checkout]', 'woocommerce' ),
'id' => 'woocommerce_checkout_page_id',
'type' => 'single_select_page',
'std' => '',
'class' => 'chosen_select_nostd',
'css' => 'min-width:300px;',
),
array(
'name' => __( 'Pay Page', 'woocommerce' ),
'desc' => __( 'Page contents: [woocommerce_pay] Parent: "Checkout"', 'woocommerce' ),
'id' => 'woocommerce_pay_page_id',
'type' => 'single_select_page',
'std' => '',
'class' => 'chosen_select_nostd',
'css' => 'min-width:300px;',
),
array(
'name' => __('Thanks Page', 'woocommerce'),
'desc' => __( 'Page contents: [woocommerce_thankyou] Parent: "Checkout"', 'woocommerce' ),
'id' => 'woocommerce_thanks_page_id',
'type' => 'single_select_page',
'std' => '',
'class' => 'chosen_select_nostd',
'css' => 'min-width:300px;',
),
array(
'name' => __( 'My Account Page', 'woocommerce' ),
'desc' => __( 'Page contents: [woocommerce_my_account]', 'woocommerce' ),
'id' => 'woocommerce_myaccount_page_id',
'type' => 'single_select_page',
'std' => '',
'class' => 'chosen_select_nostd',
'css' => 'min-width:300px;',
),
array(
'name' => __( 'Edit Address Page', 'woocommerce' ),
'desc' => __( 'Page contents: [woocommerce_edit_address] Parent: "My Account"', 'woocommerce' ),
'id' => 'woocommerce_edit_address_page_id',
'type' => 'single_select_page',
'std' => '',
'class' => 'chosen_select_nostd',
'css' => 'min-width:300px;',
),
array(
'name' => __( 'View Order Page', 'woocommerce' ),
'desc' => __( 'Page contents: [woocommerce_view_order] Parent: "My Account"', 'woocommerce' ),
'id' => 'woocommerce_view_order_page_id',
'type' => 'single_select_page',
'std' => '',
'class' => 'chosen_select_nostd',
'css' => 'min-width:300px;',
),
array(
'name' => __( 'Change Password Page', 'woocommerce' ),
'desc' => __( 'Page contents: [woocommerce_change_password] Parent: "My Account"', 'woocommerce' ),
'id' => 'woocommerce_change_password_page_id',
'type' => 'single_select_page',
'std' => '',
'class' => 'chosen_select_nostd',
'css' => 'min-width:300px;',
),
array( 'type' => 'sectionend', 'id' => 'page_options'),
)); // End pages settings
$woocommerce_settings['catalog'] = apply_filters('woocommerce_catalog_settings', array(
array( 'name' => __( 'Catalog Options', 'woocommerce' ), 'type' => 'title','desc' => '', 'id' => 'catalog_options' ),
array(
'name' => __( 'Subcategories', 'woocommerce' ),
'desc' => __( 'Show subcategories on category pages', 'woocommerce' ),
'id' => 'woocommerce_show_subcategories',
'std' => 'no',
'type' => 'checkbox',
'checkboxgroup' => 'start'
),
array(
'desc' => __( 'Show subcategories on the shop page', 'woocommerce' ),
'id' => 'woocommerce_shop_show_subcategories',
'std' => 'no',
'type' => 'checkbox',
'checkboxgroup' => ''
),
array(
'desc' => __( 'When showing subcategories, hide products', 'woocommerce' ),
'id' => 'woocommerce_hide_products_when_showing_subcategories',
'std' => 'no',
'type' => 'checkbox',
'checkboxgroup' => 'end'
),
array(
'name' => __( 'Product fields', 'woocommerce' ),
'desc' => __( 'Enable the SKU field for products', 'woocommerce' ),
'id' => 'woocommerce_enable_sku',
'std' => 'yes',
'type' => 'checkbox',
'checkboxgroup' => 'start'
),
array(
'desc' => __( 'Enable the weight field for products', 'woocommerce' ),
'id' => 'woocommerce_enable_weight',
'std' => 'yes',
'type' => 'checkbox',
'checkboxgroup' => ''
),
array(
'desc' => __( 'Enable the dimension fields for products', 'woocommerce' ),
'id' => 'woocommerce_enable_dimensions',
'std' => 'yes',
'type' => 'checkbox',
'checkboxgroup' => ''
),
array(
'desc' => __( 'Show weight and dimension fields in product attributes tab', 'woocommerce' ),
'id' => 'woocommerce_enable_dimension_product_attributes',
'std' => 'yes',
'type' => 'checkbox',
'checkboxgroup' => 'end'
),
array(
'name' => __( 'Weight Unit', 'woocommerce' ),
'desc' => __( 'This controls what unit you will define weights in.', 'woocommerce' ),
'id' => 'woocommerce_weight_unit',
'css' => 'min-width:150px;',
'std' => 'GBP',
'type' => 'select',
'options' => array(
'kg' => __( 'kg', 'woocommerce' ),
'lbs' => __( 'lbs', 'woocommerce' )
)
),
array(
'name' => __( 'Dimensions Unit', 'woocommerce' ),
'desc' => __( 'This controls what unit you will define lengths in.', 'woocommerce' ),
'id' => 'woocommerce_dimension_unit',
'css' => 'min-width:150px;',
'std' => 'cm',
'type' => 'select',
'options' => array(
'cm' => __( 'cm', 'woocommerce' ),
'in' => __( 'in', 'woocommerce' )
)
),
array(
'name' => __( 'Cart redirect', 'woocommerce' ),
'desc' => __( 'Redirect to cart after adding a product to the cart (on single product pages)', 'woocommerce' ),
'id' => 'woocommerce_cart_redirect_after_add',
'std' => 'no',
'type' => 'checkbox'
),
array( 'type' => 'sectionend', 'id' => 'catalog_options' ),
array( 'name' => __( 'Pricing Options', 'woocommerce' ), 'type' => 'title','desc' => '', 'id' => 'pricing_options' ),
array(
'name' => __( 'Currency Position', 'woocommerce' ),
'desc' => __( 'This controls the position of the currency symbol.', 'woocommerce' ),
'tip' => '',
'id' => 'woocommerce_currency_pos',
'css' => 'min-width:150px;',
'std' => 'left',
'type' => 'select',
'options' => array(
'left' => __( 'Left', 'woocommerce' ),
'right' => __( 'Right', 'woocommerce' ),
'left_space' => __( 'Left (with space)', 'woocommerce' ),
'right_space' => __( 'Right (with space)', 'woocommerce' )
)
),
array(
'name' => __( 'Thousand separator', 'woocommerce' ),
'desc' => __( 'This sets the thousand separator of displayed prices.', 'woocommerce' ),
'tip' => '',
'id' => 'woocommerce_price_thousand_sep',
'css' => 'width:30px;',
'std' => ',',
'type' => 'text',
),
array(
'name' => __( 'Decimal separator', 'woocommerce' ),
'desc' => __( 'This sets the decimal separator of displayed prices.', 'woocommerce' ),
'tip' => '',
'id' => 'woocommerce_price_decimal_sep',
'css' => 'width:30px;',
'std' => '.',
'type' => 'text',
),
array(
'name' => __( 'Number of decimals', 'woocommerce' ),
'desc' => __( 'This sets the number of decimal points shown in displayed prices.', 'woocommerce' ),
'tip' => '',
'id' => 'woocommerce_price_num_decimals',
'css' => 'width:30px;',
'std' => '2',
'type' => 'text',
),
array(
'name' => __( 'Trim zeros', 'woocommerce' ),
'desc' => __( 'Trim zeros after the decimal point when displaying prices', 'woocommerce' ),
'id' => 'woocommerce_price_trim_zeros',
'std' => 'yes',
'type' => 'checkbox'
),
array( 'type' => 'sectionend', 'id' => 'pricing_options' ),
array( 'name' => __( 'Image Options', 'woocommerce' ), 'type' => 'title','desc' => sprintf(__('These settings affect the actual dimensions of images in your catalog - the display on the front-end will still be affected by CSS styles. After changing these settings you may need to <a href="%s">regenerate your thumbnails</a>.', 'woocommerce'), 'http://wordpress.org/extend/plugins/regenerate-thumbnails/'), 'id' => 'image_options' ),
array(
'name' => __( 'Catalog Images', 'woocommerce' ),
'desc' => __('This size is usually used in product listings', 'woocommerce'),
'id' => 'woocommerce_catalog_image',
'css' => '',
'type' => 'image_width',
'std' => '150'
),
array(
'name' => __( 'Single Product Image', 'woocommerce' ),
'desc' => __('This is the size used by the main image on the product page.', 'woocommerce'),
'id' => 'woocommerce_single_image',
'css' => '',
'type' => 'image_width',
'std' => '300'
),
array(
'name' => __( 'Product Thumbnails', 'woocommerce' ),
'desc' => __('This size is usually used for the gallery of images on the product page.', 'woocommerce'),
'id' => 'woocommerce_thumbnail_image',
'css' => '',
'type' => 'image_width',
'std' => '90'
),
array( 'type' => 'sectionend', 'id' => 'image_options' ),
)); // End catalog settings
$woocommerce_settings['inventory'] = apply_filters('woocommerce_inventory_settings', array(
array( 'name' => __( 'Inventory Options', 'woocommerce' ), 'type' => 'title','desc' => '', 'id' => 'inventory_options' ),
array(
'name' => __( 'Manage stock', 'woocommerce' ),
'desc' => __( 'Enable stock management', 'woocommerce' ),
'id' => 'woocommerce_manage_stock',
'std' => 'yes',
'type' => 'checkbox'
),
array(
'name' => __( 'Notifications', 'woocommerce' ),
'desc' => __( 'Enable low stock notifications', 'woocommerce' ),
'id' => 'woocommerce_notify_low_stock',
'std' => 'yes',
'type' => 'checkbox',
'checkboxgroup' => 'start'
),
array(
'desc' => __( 'Enable out of stock notifications', 'woocommerce' ),
'id' => 'woocommerce_notify_no_stock',
'std' => 'yes',
'type' => 'checkbox',
'checkboxgroup' => 'end'
),
array(
'name' => __( 'Low stock threshold', 'woocommerce' ),
'desc' => '',
'tip' => '',
'id' => 'woocommerce_notify_low_stock_amount',
'css' => 'width:30px;',
'type' => 'text',
'std' => '2'
),
array(
'name' => __( 'Out of stock threshold', 'woocommerce' ),
'desc' => '',
'tip' => '',
'id' => 'woocommerce_notify_no_stock_amount',
'css' => 'width:30px;',
'type' => 'text',
'std' => '0'
),
array(
'name' => __( 'Out of stock visibility', 'woocommerce' ),
'desc' => __('Hide out of stock items from the catalog', 'woocommerce'),
'id' => 'woocommerce_hide_out_of_stock_items',
'std' => 'no',
'type' => 'checkbox'
),
array( 'type' => 'sectionend', 'id' => 'inventory_options'),
)); // End inventory settings
$woocommerce_settings['shipping'] = apply_filters('woocommerce_shipping_settings', array(
array( 'name' => __( 'Shipping Options', 'woocommerce' ), 'type' => 'title', 'desc' => __('Shipping can be enabled and disabled from this section.', 'woocommerce'), 'id' => 'shipping_options' ),
array(
'name' => __( 'Shipping calculations', 'woocommerce' ),
'desc' => __( 'Enable shipping', 'woocommerce' ),
'id' => 'woocommerce_calc_shipping',
'std' => 'yes',
'type' => 'checkbox',
'checkboxgroup' => 'start'
),
array(
'name' => __( 'Shipping calculations', 'woocommerce' ),
'desc' => __( 'Enable the shipping calculator on the cart page', 'woocommerce' ),
'id' => 'woocommerce_enable_shipping_calc',
'std' => 'yes',
'type' => 'checkbox',
'checkboxgroup' => 'end'
),
array(
'name' => __( 'Shipping destination', 'woocommerce' ),
'desc' => __( 'Only ship to the users billing address', 'woocommerce' ),
'id' => 'woocommerce_ship_to_billing_address_only',
'std' => 'no',
'type' => 'checkbox',
'checkboxgroup' => 'start'
),
array(
'desc' => __( 'Ship to billing address by default', 'woocommerce' ),
'id' => 'woocommerce_ship_to_same_address',
'std' => 'yes',
'type' => 'checkbox',
'checkboxgroup' => 'end'
),
array( 'type' => 'sectionend', 'id' => 'shipping_options' ),
)); // End shipping settings
$woocommerce_settings['tax'] = apply_filters('woocommerce_tax_settings', array(
array( 'name' => __( 'Tax Options', 'woocommerce' ), 'type' => 'title','desc' => '', 'id' => 'tax_options' ),
array(
'name' => __( 'Tax calculations', 'woocommerce' ),
'desc' => __( 'Enable taxes and tax calculations', 'woocommerce' ),
'id' => 'woocommerce_calc_taxes',
'std' => 'yes',
'type' => 'checkbox',
'checkboxgroup' => 'start'
),
array(
'desc' => __( 'Display taxes on cart page', 'woocommerce' ),
'id' => 'woocommerce_display_cart_taxes',
'std' => 'yes',
'type' => 'checkbox',
'checkboxgroup' => ''
),
array(
'desc' => __( 'Round tax at subtotal level, instead of per line', 'woocommerce' ),
'id' => 'woocommerce_tax_round_at_subtotal',
'std' => 'no',
'type' => 'checkbox',
'checkboxgroup' => 'end'
),
array(
'name' => __( 'Catalog Prices', 'woocommerce' ),
'desc' => __( 'Catalog prices defined including tax', 'woocommerce' ),
'id' => 'woocommerce_prices_include_tax',
'std' => 'no',
'type' => 'checkbox',
'checkboxgroup' => 'start',
'show_if_checked' => 'option',
),
array(
'desc' => __( 'Display cart contents excluding tax', 'woocommerce' ),
'id' => 'woocommerce_display_cart_prices_excluding_tax',
'std' => 'yes',
'type' => 'checkbox',
'checkboxgroup' => '',
'show_if_checked' => 'yes',
),
array(
'desc' => __( 'Display cart totals excluding tax', 'woocommerce' ),
'id' => 'woocommerce_display_totals_excluding_tax',
'std' => 'yes',
'type' => 'checkbox',
'checkboxgroup' => 'end',
'show_if_checked' => 'yes',
),
array(
'name' => __( 'Additional Tax classes', 'woocommerce' ),
'desc' => __( 'List 1 per line. This is in addition to the default <em>Standard Rate</em>.', 'woocommerce' ),
'tip' => __( 'List product and shipping tax classes here, e.g. Zero Tax, Reduced Rate.', 'woocommerce' ),
'id' => 'woocommerce_tax_classes',
'css' => 'width:100%; height: 75px;',
'type' => 'textarea',
'std' => "Reduced Rate\nZero Rate"
),
array(
'name' => __( 'Tax rates', 'woocommerce' ),
'desc' => __( 'All fields are required.', 'woocommerce' ),
'tip' => __( 'To avoid rounding errors, insert tax rates with 4 decimal places.', 'woocommerce' ),
'id' => 'woocommerce_tax_rates',
'css' => 'min-width:50px;',
'type' => 'tax_rates',
'std' => ''
),
array( 'type' => 'sectionend', 'id' => 'tax_options' ),
)); // End tax settings
$woocommerce_settings['email'] = apply_filters('woocommerce_email_settings', array(
array( 'name' => __( 'Email Recipient Options', 'woocommerce' ), 'type' => 'title', '', 'id' => 'email_recipient_options' ),
array(
'name' => __( 'New order notifications', 'woocommerce' ),
'desc' => __( 'The recipient of new order emails. Defaults to the admin email.', 'woocommerce' ),
'id' => 'woocommerce_new_order_email_recipient',
'type' => 'text',
'css' => 'min-width:300px;',
'std' => esc_attr(get_option('admin_email'))
),
array(
'name' => __( 'Inventory notifications', 'woocommerce' ),
'desc' => __( 'The recipient of stock emails. Defaults to the admin email.', 'woocommerce' ),
'id' => 'woocommerce_stock_email_recipient',
'type' => 'text',
'css' => 'min-width:300px;',
'std' => esc_attr(get_option('admin_email'))
),
array( 'type' => 'sectionend', 'id' => 'email_recipient_options' ),
array( 'name' => __( 'Email Sender Options', 'woocommerce' ), 'type' => 'title', '', 'id' => 'email_options' ),
array(
'name' => __( '"From" name', 'woocommerce' ),
'desc' => __( 'The sender name for WooCommerce emails.', 'woocommerce' ),
'id' => 'woocommerce_email_from_name',
'type' => 'text',
'css' => 'min-width:300px;',
'std' => esc_attr(get_bloginfo('name'))
),
array(
'name' => __( '"From" email address', 'woocommerce' ),
'desc' => __( 'The sender email address for WooCommerce emails.', 'woocommerce' ),
'id' => 'woocommerce_email_from_address',
'type' => 'text',
'css' => 'min-width:300px;',
'std' => get_option('admin_email')
),
array( 'type' => 'sectionend', 'id' => 'email_options' ),
array( 'name' => __( 'Email template', 'woocommerce' ), 'type' => 'title', 'desc' => sprintf(__('This section lets you customise the WooCommerce emails. <a href="%s" target="_blank">Click here to preview your email template</a>. For more advanced control copy <code>woocommerce/templates/emails/</code> to <code>yourtheme/woocommmerce/emails/</code>.', 'woocommerce'), wp_nonce_url(admin_url('?preview_woocommerce_mail=true'), 'preview-mail')), 'id' => 'email_template_options' ),
array(
'name' => __( 'Header image', 'woocommerce' ),
'desc' => sprintf(__( 'Enter a URL to an image you want to show in the email\'s header. Upload your image using the <a href="%s">media uploader</a>.', 'woocommerce' ), admin_url('media-new.php')),
'id' => 'woocommerce_email_header_image',
'type' => 'text',
'css' => 'min-width:300px;',
'std' => ''
),
array(
'name' => __( 'Email footer text', 'woocommerce' ),
'desc' => __( 'The text to appear in the footer of WooCommerce emails.', 'woocommerce' ),
'id' => 'woocommerce_email_footer_text',
'css' => 'width:100%; height: 75px;',
'type' => 'textarea',
'std' => get_bloginfo('name') . ' - ' . __('Powered by WooCommerce', 'woocommerce')
),
array(
'name' => __( 'Base colour', 'woocommerce' ),
'desc' => __( 'The base colour for WooCommerce email templates. Default <code>#557da1</code>.', 'woocommerce' ),
'id' => 'woocommerce_email_base_color',
'type' => 'color',
'css' => 'width:6em;',
'std' => '#557da1'
),
array(
'name' => __( 'Background colour', 'woocommerce' ),
'desc' => __( 'The background colour for WooCommerce email templates. Default <code>#eeeeee</code>.', 'woocommerce' ),
'id' => 'woocommerce_email_background_color',
'type' => 'color',
'css' => 'width:6em;',
'std' => '#eeeeee'
),
array(
'name' => __( 'Email body background colour', 'woocommerce' ),
'desc' => __( 'The main body background colour. Default <code>#fdfdfd</code>.', 'woocommerce' ),
'id' => 'woocommerce_email_body_background_color',
'type' => 'color',
'css' => 'width:6em;',
'std' => '#fdfdfd'
),
array(
'name' => __( 'Email body text colour', 'woocommerce' ),
'desc' => __( 'The main body text colour. Default <code>#505050</code>.', 'woocommerce' ),
'id' => 'woocommerce_email_text_color',
'type' => 'color',
'css' => 'width:6em;',
'std' => '#505050'
),
array( 'type' => 'sectionend', 'id' => 'email_template_options' ),
)); // End email settings
$woocommerce_settings['integration'] = apply_filters('woocommerce_intregation_settings', array(
array( 'name' => __( 'ShareThis', 'woocommerce' ), 'type' => 'title', 'desc' => __('ShareThis offers a sharing widget which will allow customers to share links to products with their friends.', 'woocommerce'), 'id' => 'share_this' ),
array(
'name' => __( 'ShareThis Publisher ID', 'woocommerce' ),
'desc' => sprintf( __( 'Enter your %1$sShareThis publisher ID%2$s to show social sharing buttons on product pages.', 'woocommerce' ), '<a href="http://sharethis.com/account/">', '</a>' ),
'id' => 'woocommerce_sharethis',
'type' => 'text',
'std' => '',
'css' => 'min-width:300px;',
),
array( 'type' => 'sectionend', 'id' => 'share_this'),
array( 'name' => __( 'Google Analytics', 'woocommerce' ), 'type' => 'title', 'desc' => __('Google Analytics is a free service offered by Google that generates detailed statistics about the visitors to a website.', 'woocommerce'), 'id' => 'google_analytics' ),
array(
'name' => __('Google Analytics ID', 'woocommerce'),
'desc' => __('Log into your google analytics account to find your ID. e.g. <code>UA-XXXXX-X</code>', 'woocommerce'),
'id' => 'woocommerce_ga_id',
'type' => 'text',
'css' => 'min-width:300px;',
),
array(
'name' => __('Tracking code', 'woocommerce'),
'desc' => __('Add tracking code to your site\'s footer. You don\'t need to enable this if using a 3rd party analytics plugin.', 'woocommerce'),
'id' => 'woocommerce_ga_standard_tracking_enabled',
'type' => 'checkbox',
'checkboxgroup' => 'start'
),
array(
'name' => __('Tracking code', 'woocommerce'),
'desc' => __('Add eCommerce tracking code to the thankyou page', 'woocommerce'),
'id' => 'woocommerce_ga_ecommerce_tracking_enabled',
'type' => 'checkbox',
'checkboxgroup' => 'end'
),
array( 'type' => 'sectionend', 'id' => 'google_analytics'),
)); // End integration settings
/**
* Settings page
*
* Handles the display of the main woocommerce settings page in admin.
*/
if (!function_exists('woocommerce_settings')) {
function woocommerce_settings() {
global $woocommerce, $woocommerce_settings;
$current_tab = (isset($_GET['tab'])) ? $_GET['tab'] : 'general';
if( isset( $_POST ) && $_POST ) :
if ( ! wp_verify_nonce( $_REQUEST['_wpnonce'], 'woocommerce-settings' ) ) die( __( 'Action failed. Please refresh the page and retry.', 'woocommerce' ) );
switch ( $current_tab ) :
case "general" :
case "pages" :
case "catalog" :
case "inventory" :
case "shipping" :
case "tax" :
case "email" :
case "integration" :
woocommerce_update_options( $woocommerce_settings[$current_tab] );
break;
endswitch;
do_action( 'woocommerce_update_options' );
do_action( 'woocommerce_update_options_' . $current_tab );
// Backwards compat 1.4 <
if ($current_tab=='shipping') do_action( 'woocommerce_update_options_shipping_methods' );
flush_rewrite_rules( false );
wp_redirect( add_query_arg( 'subtab', esc_attr(str_replace('#', '', $_POST['subtab'])), add_query_arg( 'saved', 'true', admin_url( 'admin.php?page=woocommerce&tab=' . $current_tab ) )) );
endif;
if (isset($_GET['saved']) && $_GET['saved']) :
echo '<div id="message" class="updated fade"><p><strong>' . __( 'Your settings have been saved.', 'woocommerce' ) . '</strong></p></div>';
flush_rewrite_rules( false );
do_action('woocommerce_settings_saved');
endif;
// Install/page installer
$install_complete = false;
$show_page_installer = false;
// Add pages button
if (isset($_GET['install_woocommerce_pages']) && $_GET['install_woocommerce_pages']) :
require_once( 'woocommerce-admin-install.php' );
woocommerce_create_pages();
update_option('skip_install_woocommerce_pages', 1);
$install_complete = true;
// Skip button
elseif (isset($_GET['skip_install_woocommerce_pages']) && $_GET['skip_install_woocommerce_pages']) :
update_option('skip_install_woocommerce_pages', 1);
$install_complete = true;
// If we have just activated WooCommerce...
elseif (isset($_GET['installed']) && $_GET['installed']) :
flush_rewrite_rules( false );
if (woocommerce_get_page_id('shop')) :
$install_complete = true;
else :
$show_page_installer = true;
endif;
// If we havn't just installed, but page installed has not been skipped and shop page does not exist...
elseif (!get_option('skip_install_woocommerce_pages') && !woocommerce_get_page_id('shop')) :
$show_page_installer = true;
endif;
if ($show_page_installer) :
echo '<div id="message" class="updated fade">
<p><strong>' . __( 'Welcome to WooCommerce!', 'woocommerce' ) . '</strong></p>
<p>'. __('WooCommerce requires several WordPress pages containing shortcodes in order to work correctly; these include Shop, Cart, Checkout and My Account. To add these pages automatically please click the \'Automatically add pages\' button below, otherwise you can set them up manually. See the \'Pages\' tab in settings for more information.', 'woocommerce') .'</p>
<p><a href="'.remove_query_arg('installed', add_query_arg('install_woocommerce_pages', 'true')).'" class="button button-primary">'. __('Automatically add pages', 'woocommerce') .'</a> <a href="'.remove_query_arg('installed', add_query_arg('skip_install_woocommerce_pages', 'true')).'" class="button">'. __('Skip setup', 'woocommerce') .'</a></p>
</div>';
elseif ($install_complete) :
echo '<div id="message" class="updated fade">
<p style="float:right;">' . __( 'Like WooCommerce? <a href="http://wordpress.org/extend/plugins/woocommerce/">Support us by leaving a rating!</a>', 'woocommerce' ) . '</p>
<p><strong>' . __( 'WooCommerce has been installed and setup. Enjoy :)', 'woocommerce' ) . '</strong></p>
</div>';
flush_rewrite_rules( false );
endif;
?>
<div class="wrap woocommerce">
<form method="post" id="mainform" action="">
<div class="icon32 icon32-woocommerce-settings" id="icon-woocommerce"><br></div><h2 class="nav-tab-wrapper woo-nav-tab-wrapper">
<?php
$tabs = array(
'general' => __( 'General', 'woocommerce' ),
'pages' => __( 'Pages', 'woocommerce' ),
'catalog' => __( 'Catalog', 'woocommerce' ),
'inventory' => __( 'Inventory', 'woocommerce' ),
'tax' => __( 'Tax', 'woocommerce'),
'shipping' => __( 'Shipping', 'woocommerce' ),
'payment_gateways' => __( 'Payment Gateways', 'woocommerce' ),
'email' => __( 'Emails', 'woocommerce' ),
'integration' => __( 'Integration', 'woocommerce' )
);
$tabs = apply_filters('woocommerce_settings_tabs_array', $tabs);
foreach ($tabs as $name => $label) :
echo '<a href="' . admin_url( 'admin.php?page=woocommerce&tab=' . $name ) . '" class="nav-tab ';
if( $current_tab==$name ) echo 'nav-tab-active';
echo '">' . $label . '</a>';
endforeach;
do_action( 'woocommerce_settings_tabs' );
?>
</h2>
<?php wp_nonce_field( 'woocommerce-settings', '_wpnonce', true, true ); ?>
<div id="woocommerce_extensions"><?php echo sprintf(__('More functionality and gateway options available via <a href="%s" target="_blank">WC official extensions</a>.', 'woocommerce'), 'http://www.woothemes.com/extensions/woocommerce-extensions/'); ?></div>
<?php
switch ($current_tab) :
case "general" :
case "pages" :
case "catalog" :
case "inventory" :
case "tax" :
case "email" :
case "integration" :
woocommerce_admin_fields( $woocommerce_settings[$current_tab] );
break;
case "shipping" :
$links = array( '<a href="#shipping-options">'.__('Shipping Options', 'woocommerce').'</a>' );
foreach ( $woocommerce->shipping->shipping_methods as $method ) :
$title = ( isset( $method->method_title ) && $method->method_title) ? ucwords($method->method_title) : ucwords($method->id);
$links[] = '<a href="#shipping-'.$method->id.'">'.$title.'</a>';
endforeach;
echo '<div class="subsubsub_section"><ul class="subsubsub"><li>' . implode(' | </li><li>', $links) . '</li></ul><br class="clear" />';
// Gateway ordering
echo '<div class="section" id="shipping-options">';
woocommerce_admin_fields( $woocommerce_settings[$current_tab] );
?>
<h3><?php _e('Shipping Methods', 'woocommerce'); ?></h3>
<p><?php _e('Your activated shipping methods are listed below. Drag and drop rows to re-order them for display on the frontend.', 'woocommerce'); ?></p>
<table class="wc_shipping widefat" cellspacing="0">
<thead>
<tr>
<th><?php _e('Default', 'woocommerce'); ?></th>
<th><?php _e('Shipping Method', 'woocommerce'); ?></th>
<th><?php _e('Status', 'woocommerce'); ?></th>
</tr>
</thead>
<tbody>
<?php
foreach ( $woocommerce->shipping->shipping_methods as $method ) :
$default_shipping_method = get_option('woocommerce_default_shipping_method');
echo '<tr>
<td width="1%" class="radio">
<input type="radio" name="default_shipping_method" value="'.$method->id.'" '.checked($default_shipping_method, $method->id, false).' />
<input type="hidden" name="method_order[]" value="'.$method->id.'" />
<td>
<p><strong>'.$method->title.'</strong><br/>
<small>'.__('Method ID', 'woocommerce').': '.$method->id.'</small></p>
</td>
<td>';
if ($method->enabled == 'yes')
echo '<img src="'.$woocommerce->plugin_url().'/assets/images/success.png" alt="yes" />';
else
echo '<img src="'.$woocommerce->plugin_url().'/assets/images/success-off.png" alt="no" />';
echo '</td>
</tr>';
endforeach;
?>
</tbody>
</table>
<?php
echo '</div>';
// Specific method options
foreach ($woocommerce->shipping->shipping_methods as $method) :
echo '<div class="section" id="shipping-'.$method->id.'">';
$method->admin_options();
echo '</div>';
endforeach;
echo '</div>';
break;
case "payment_gateways" :
$links = array( '<a href="#gateway-order">'.__('Payment Gateways', 'woocommerce').'</a>' );
foreach ($woocommerce->payment_gateways->payment_gateways() as $gateway) :
$title = ( isset( $gateway->method_title ) && $gateway->method_title) ? ucwords($gateway->method_title) : ucwords($gateway->id);
$links[] = '<a href="#gateway-'.$gateway->id.'">'.$title.'</a>';
endforeach;
echo '<div class="subsubsub_section"><ul class="subsubsub"><li>' . implode(' | </li><li>', $links) . '</li></ul><br class="clear" />';
// Gateway ordering
echo '<div class="section" id="gateway-order">';
?>
<h3><?php _e('Payment Gateways', 'woocommerce'); ?></h3>
<p><?php _e('Your activated payment gateways are listed below. Drag and drop rows to re-order them for display on the checkout.', 'woocommerce'); ?></p>
<table class="wc_gateways widefat" cellspacing="0">
<thead>
<tr>
<th width="1%"><?php _e('Default', 'woocommerce'); ?></th>
<th><?php _e('Gateway', 'woocommerce'); ?></th>
<th><?php _e('Status', 'woocommerce'); ?></th>
</tr>
</thead>
<tbody>
<?php
foreach ( $woocommerce->payment_gateways->payment_gateways() as $gateway ) :
$default_gateway = get_option('woocommerce_default_gateway');
echo '<tr>
<td width="1%" class="radio">
<input type="radio" name="default_gateway" value="'.$gateway->id.'" '.checked($default_gateway, $gateway->id, false).' />
<input type="hidden" name="gateway_order[]" value="'.$gateway->id.'" />
</td>
<td>
<p><strong>'.$gateway->title.'</strong><br/>
<small>'.__('Gateway ID', 'woocommerce').': '.$gateway->id.'</small></p>
</td>
<td>';
if ($gateway->enabled == 'yes')
echo '<img src="'.$woocommerce->plugin_url().'/assets/images/success.png" alt="yes" />';
else
echo '<img src="'.$woocommerce->plugin_url().'/assets/images/success-off.png" alt="no" />';
echo '</td>
</tr>';
endforeach;
?>
</tbody>
</table>
<?php
echo '</div>';
// Specific gateway options
foreach ( $woocommerce->payment_gateways->payment_gateways() as $gateway ) :
echo '<div class="section" id="gateway-'.$gateway->id.'">';
$gateway->admin_options();
echo '</div>';
endforeach;
echo '</div>';
break;
default :
do_action( 'woocommerce_settings_tabs_' . $current_tab );
break;
endswitch;
?>
<p class="submit">
<input name="save" class="button-primary" type="submit" value="<?php _e( 'Save changes', 'woocommerce' ); ?>" />
<input type="hidden" name="subtab" id="last_tab" />
</p>
</form>
<script type="text/javascript">
jQuery(window).load(function(){
// Subsubsub tabs
jQuery('ul.subsubsub li a:eq(0)').addClass('current');
jQuery('.subsubsub_section .section:gt(0)').hide();
jQuery('ul.subsubsub li a').click(function(){
jQuery('a', jQuery(this).closest('ul.subsubsub')).removeClass('current');
jQuery(this).addClass('current');
jQuery('.section', jQuery(this).closest('.subsubsub_section')).hide();
jQuery( jQuery(this).attr('href') ).show();
jQuery('#last_tab').val( jQuery(this).attr('href') );
return false;
});
<?php if (isset($_GET['subtab']) && $_GET['subtab']) echo 'jQuery("ul.subsubsub li a[href=#'.$_GET['subtab'].']").click();'; ?>
// Countries
jQuery('select#woocommerce_allowed_countries').change(function(){
if (jQuery(this).val()=="specific") {
jQuery(this).parent().parent().next('tr').show();
} else {
jQuery(this).parent().parent().next('tr').hide();
}
}).change();
// Color picker
jQuery('.colorpick').each(function(){
jQuery('.colorpickdiv', jQuery(this).parent()).farbtastic(this);
jQuery(this).click(function() {
if ( jQuery(this).val() == "" ) jQuery(this).val('#');
jQuery('.colorpickdiv', jQuery(this).parent() ).show();
});
});
jQuery(document).mousedown(function(){
jQuery('.colorpickdiv').hide();
});
// Edit prompt
jQuery(function(){
var changed = false;
jQuery('input, textarea, select, checkbox').change(function(){
changed = true;
});
jQuery('.woo-nav-tab-wrapper a').click(function(){
if (changed) {
window.onbeforeunload = function() {
return '<?php echo __( 'The changes you made will be lost if you navigate away from this page.', 'woocommerce' ); ?>';
}
} else {
window.onbeforeunload = '';
}
});
jQuery('.submit input').click(function(){
window.onbeforeunload = '';
});
});
// Sorting
jQuery('table.wc_gateways tbody, table.wc_shipping tbody').sortable({
items:'tr',
cursor:'move',
axis:'y',
handle: 'td',
scrollSensitivity:40,
helper:function(e,ui){
ui.children().each(function(){
jQuery(this).width(jQuery(this).width());
});
ui.css('left', '0');
return ui;
},
start:function(event,ui){
ui.item.css('background-color','#f6f6f6');
},
stop:function(event,ui){
ui.item.removeAttr('style');
}
});
// Chosen selects
jQuery("select.chosen_select").chosen();
jQuery("select.chosen_select_nostd").chosen({
allow_single_deselect: 'true'
});
});
</script>
</div>
<?php
}
}