2013-08-22 10:58:03 +00:00
< ? php
/**
2015-11-03 13:53:50 +00:00
* WooCommerce Product Settings
2013-08-22 10:58:03 +00:00
*
2015-05-27 17:26:12 +00:00
* @ author WooThemes
* @ category Admin
* @ package WooCommerce / Admin
* @ version 2.4 . 0
2013-08-22 10:58:03 +00:00
*/
2014-09-20 19:55:47 +00:00
if ( ! defined ( 'ABSPATH' ) ) {
exit ; // Exit if accessed directly
}
2013-08-22 10:58:03 +00:00
if ( ! class_exists ( 'WC_Settings_Products' ) ) :
/**
2015-11-03 13:31:20 +00:00
* WC_Settings_Products .
2013-08-22 10:58:03 +00:00
*/
class WC_Settings_Products extends WC_Settings_Page {
/**
* Constructor .
*/
public function __construct () {
2014-08-31 08:22:03 +00:00
2013-08-22 10:58:03 +00:00
$this -> id = 'products' ;
$this -> label = __ ( 'Products' , 'woocommerce' );
add_filter ( 'woocommerce_settings_tabs_array' , array ( $this , 'add_settings_page' ), 20 );
add_action ( 'woocommerce_settings_' . $this -> id , array ( $this , 'output' ) );
add_action ( 'woocommerce_settings_save_' . $this -> id , array ( $this , 'save' ) );
add_action ( 'woocommerce_sections_' . $this -> id , array ( $this , 'output_sections' ) );
}
/**
2015-11-03 13:31:20 +00:00
* Get sections .
2013-08-22 10:58:03 +00:00
*
* @ return array
*/
public function get_sections () {
2014-08-31 08:22:03 +00:00
2013-08-22 10:58:03 +00:00
$sections = array (
2014-11-11 14:25:46 +00:00
'' => __ ( 'General' , 'woocommerce' ),
'display' => __ ( 'Display' , 'woocommerce' ),
2014-10-31 19:07:00 +00:00
'inventory' => __ ( 'Inventory' , 'woocommerce' ),
'downloadable' => __ ( 'Downloadable Products' , 'woocommerce' ),
2013-08-22 10:58:03 +00:00
);
2014-02-17 14:30:37 +00:00
return apply_filters ( 'woocommerce_get_sections_' . $this -> id , $sections );
2013-08-22 10:58:03 +00:00
}
/**
2015-11-03 13:31:20 +00:00
* Output the settings .
2013-08-22 10:58:03 +00:00
*/
public function output () {
global $current_section ;
$settings = $this -> get_settings ( $current_section );
2015-05-15 19:35:50 +00:00
WC_Admin_Settings :: output_fields ( $settings );
2013-08-22 10:58:03 +00:00
}
/**
2015-11-03 13:31:20 +00:00
* Save settings .
2013-08-22 10:58:03 +00:00
*/
public function save () {
global $current_section ;
$settings = $this -> get_settings ( $current_section );
WC_Admin_Settings :: save_fields ( $settings );
}
/**
2015-11-03 13:31:20 +00:00
* Get settings array .
2013-08-22 10:58:03 +00:00
*
* @ return array
*/
public function get_settings ( $current_section = '' ) {
2014-11-11 14:31:27 +00:00
if ( 'display' == $current_section ) {
2014-11-11 14:29:54 +00:00
$settings = apply_filters ( 'woocommerce_product_settings' , array (
2014-11-11 14:40:13 +00:00
array (
'title' => __ ( 'Shop & Product Pages' , 'woocommerce' ),
'type' => 'title' ,
'desc' => '' ,
'id' => 'catalog_options'
),
2014-11-11 14:29:54 +00:00
array (
'title' => __ ( 'Shop Page' , 'woocommerce' ),
'desc' => '<br/>' . sprintf ( __ ( 'The base page can also be used in your <a href="%s">product permalinks</a>.' , 'woocommerce' ), admin_url ( 'options-permalink.php' ) ),
'id' => 'woocommerce_shop_page_id' ,
'type' => 'single_select_page' ,
'default' => '' ,
2015-01-12 16:29:01 +00:00
'class' => 'wc-enhanced-select-nostd' ,
2014-11-11 14:29:54 +00:00
'css' => 'min-width:300px;' ,
'desc_tip' => __ ( 'This sets the base page of your shop - this is where your product archive will be.' , 'woocommerce' ),
),
array (
'title' => __ ( 'Shop Page Display' , 'woocommerce' ),
'desc' => __ ( 'This controls what is shown on the product archive.' , 'woocommerce' ),
'id' => 'woocommerce_shop_page_display' ,
2015-01-12 16:29:01 +00:00
'class' => 'wc-enhanced-select' ,
2014-11-11 14:29:54 +00:00
'css' => 'min-width:300px;' ,
'default' => '' ,
'type' => 'select' ,
'options' => array (
'' => __ ( 'Show products' , 'woocommerce' ),
2016-04-15 14:57:06 +00:00
'subcategories' => __ ( 'Show categories' , 'woocommerce' ),
'both' => __ ( 'Show categories & products' , 'woocommerce' ),
2014-11-11 14:29:54 +00:00
),
'desc_tip' => true ,
),
array (
'title' => __ ( 'Default Category Display' , 'woocommerce' ),
'desc' => __ ( 'This controls what is shown on category archives.' , 'woocommerce' ),
'id' => 'woocommerce_category_archive_display' ,
2015-01-12 16:29:01 +00:00
'class' => 'wc-enhanced-select' ,
2014-11-11 14:29:54 +00:00
'css' => 'min-width:300px;' ,
'default' => '' ,
'type' => 'select' ,
'options' => array (
'' => __ ( 'Show products' , 'woocommerce' ),
'subcategories' => __ ( 'Show subcategories' , 'woocommerce' ),
2016-04-15 14:57:06 +00:00
'both' => __ ( 'Show subcategories & products' , 'woocommerce' ),
2014-11-11 14:29:54 +00:00
),
'desc_tip' => true ,
),
array (
'title' => __ ( 'Default Product Sorting' , 'woocommerce' ),
'desc' => __ ( 'This controls the default sort order of the catalog.' , 'woocommerce' ),
'id' => 'woocommerce_default_catalog_orderby' ,
2015-01-12 16:29:01 +00:00
'class' => 'wc-enhanced-select' ,
2014-11-11 14:29:54 +00:00
'css' => 'min-width:300px;' ,
2014-11-17 08:37:02 +00:00
'default' => 'menu_order' ,
2014-11-11 14:29:54 +00:00
'type' => 'select' ,
2014-11-11 14:54:32 +00:00
'options' => apply_filters ( 'woocommerce_default_catalog_orderby_options' , array (
2014-11-11 14:29:54 +00:00
'menu_order' => __ ( 'Default sorting (custom ordering + name)' , 'woocommerce' ),
'popularity' => __ ( 'Popularity (sales)' , 'woocommerce' ),
'rating' => __ ( 'Average Rating' , 'woocommerce' ),
'date' => __ ( 'Sort by most recent' , 'woocommerce' ),
'price' => __ ( 'Sort by price (asc)' , 'woocommerce' ),
'price-desc' => __ ( 'Sort by price (desc)' , 'woocommerce' ),
2014-11-11 14:54:32 +00:00
) ),
2014-11-11 14:29:54 +00:00
'desc_tip' => true ,
),
array (
'title' => __ ( 'Add to cart behaviour' , 'woocommerce' ),
'desc' => __ ( 'Redirect to the cart page after successful addition' , 'woocommerce' ),
'id' => 'woocommerce_cart_redirect_after_add' ,
'default' => 'no' ,
'type' => 'checkbox' ,
'checkboxgroup' => 'start'
),
array (
'desc' => __ ( 'Enable AJAX add to cart buttons on archives' , 'woocommerce' ),
'id' => 'woocommerce_enable_ajax_add_to_cart' ,
'default' => 'yes' ,
'type' => 'checkbox' ,
'checkboxgroup' => 'end'
),
2014-11-11 14:40:13 +00:00
array (
'type' => 'sectionend' ,
'id' => 'catalog_options'
),
2014-11-11 14:29:54 +00:00
2014-11-11 14:40:13 +00:00
array (
'title' => __ ( 'Product Images' , 'woocommerce' ),
'type' => 'title' ,
2016-05-27 01:48:49 +00:00
'desc' => sprintf ( __ ( 'These settings affect the display and 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' ), 'https://wordpress.org/extend/plugins/regenerate-thumbnails/' ),
2014-11-11 14:40:13 +00:00
'id' => 'image_options'
),
2014-11-11 14:29:54 +00:00
array (
'title' => __ ( 'Catalog Images' , 'woocommerce' ),
'desc' => __ ( 'This size is usually used in product listings' , 'woocommerce' ),
'id' => 'shop_catalog_image_size' ,
'css' => '' ,
'type' => 'image_width' ,
'default' => array (
'width' => '300' ,
'height' => '300' ,
'crop' => 1
),
'desc_tip' => true ,
),
array (
'title' => __ ( 'Single Product Image' , 'woocommerce' ),
'desc' => __ ( 'This is the size used by the main image on the product page.' , 'woocommerce' ),
'id' => 'shop_single_image_size' ,
'css' => '' ,
'type' => 'image_width' ,
'default' => array (
'width' => '600' ,
'height' => '600' ,
'crop' => 1
),
'desc_tip' => true ,
),
array (
'title' => __ ( 'Product Thumbnails' , 'woocommerce' ),
'desc' => __ ( 'This size is usually used for the gallery of images on the product page.' , 'woocommerce' ),
'id' => 'shop_thumbnail_image_size' ,
'css' => '' ,
'type' => 'image_width' ,
'default' => array (
'width' => '180' ,
'height' => '180' ,
'crop' => 1
),
'desc_tip' => true ,
),
array (
'title' => __ ( 'Product Image Gallery' , 'woocommerce' ),
'desc' => __ ( 'Enable Lightbox for product images' , 'woocommerce' ),
'id' => 'woocommerce_enable_lightbox' ,
'default' => 'yes' ,
'desc_tip' => __ ( 'Include WooCommerce\'s lightbox. Product gallery images will open in a lightbox.' , 'woocommerce' ),
'type' => 'checkbox'
),
2014-11-11 14:40:13 +00:00
array (
'type' => 'sectionend' ,
'id' => 'image_options'
)
2014-11-11 14:29:54 +00:00
));
2014-11-11 14:31:27 +00:00
} elseif ( 'inventory' == $current_section ) {
2013-08-22 10:58:03 +00:00
2014-09-12 11:20:06 +00:00
$settings = apply_filters ( 'woocommerce_inventory_settings' , array (
2013-08-22 10:58:03 +00:00
2014-11-11 14:40:13 +00:00
array (
'title' => __ ( 'Inventory' , 'woocommerce' ),
'type' => 'title' ,
'desc' => '' ,
'id' => 'product_inventory_options'
),
2013-08-22 10:58:03 +00:00
array (
2014-08-31 08:22:03 +00:00
'title' => __ ( 'Manage Stock' , 'woocommerce' ),
'desc' => __ ( 'Enable stock management' , 'woocommerce' ),
'id' => 'woocommerce_manage_stock' ,
'default' => 'yes' ,
'type' => 'checkbox'
2013-08-22 10:58:03 +00:00
),
array (
2014-08-31 08:22:03 +00:00
'title' => __ ( 'Hold Stock (minutes)' , 'woocommerce' ),
'desc' => __ ( 'Hold stock (for unpaid orders) for x minutes. When this limit is reached, the pending order will be cancelled. Leave blank to disable.' , 'woocommerce' ),
'id' => 'woocommerce_hold_stock_minutes' ,
'type' => 'number' ,
2013-08-22 10:58:03 +00:00
'custom_attributes' => array (
2014-08-31 08:22:03 +00:00
'min' => 0 ,
'step' => 1
2013-08-22 10:58:03 +00:00
),
2015-05-27 17:26:12 +00:00
'css' => 'width: 80px;' ,
2014-08-31 08:22:03 +00:00
'default' => '60' ,
'autoload' => false
2013-08-22 10:58:03 +00:00
),
array (
2014-08-31 08:22:03 +00:00
'title' => __ ( 'Notifications' , 'woocommerce' ),
'desc' => __ ( 'Enable low stock notifications' , 'woocommerce' ),
'id' => 'woocommerce_notify_low_stock' ,
'default' => 'yes' ,
'type' => 'checkbox' ,
2013-08-22 10:58:03 +00:00
'checkboxgroup' => 'start' ,
'autoload' => false
),
array (
2014-08-31 08:22:03 +00:00
'desc' => __ ( 'Enable out of stock notifications' , 'woocommerce' ),
'id' => 'woocommerce_notify_no_stock' ,
'default' => 'yes' ,
'type' => 'checkbox' ,
2013-08-22 10:58:03 +00:00
'checkboxgroup' => 'end' ,
'autoload' => false
),
array (
2015-09-01 12:11:41 +00:00
'title' => __ ( 'Notification Recipient(s)' , 'woocommerce' ),
2015-09-22 16:06:10 +00:00
'desc' => __ ( 'Enter recipients (comma separated) that will receive this notification.' , 'woocommerce' ),
2014-08-31 08:22:03 +00:00
'id' => 'woocommerce_stock_email_recipient' ,
2015-09-01 12:11:41 +00:00
'type' => 'text' ,
2014-08-31 08:22:03 +00:00
'default' => get_option ( 'admin_email' ),
2015-09-01 12:11:41 +00:00
'css' => 'width: 250px;' ,
'autoload' => false ,
'desc_tip' => true
2013-08-22 10:58:03 +00:00
),
array (
2014-08-31 08:22:03 +00:00
'title' => __ ( 'Low Stock Threshold' , 'woocommerce' ),
'desc' => '' ,
'id' => 'woocommerce_notify_low_stock_amount' ,
'css' => 'width:50px;' ,
'type' => 'number' ,
2013-08-22 10:58:03 +00:00
'custom_attributes' => array (
2014-08-31 08:22:03 +00:00
'min' => 0 ,
'step' => 1
2013-08-22 10:58:03 +00:00
),
2014-08-31 08:22:03 +00:00
'default' => '2' ,
'autoload' => false
2013-08-22 10:58:03 +00:00
),
array (
2014-08-31 08:22:03 +00:00
'title' => __ ( 'Out Of Stock Threshold' , 'woocommerce' ),
'desc' => '' ,
'id' => 'woocommerce_notify_no_stock_amount' ,
'css' => 'width:50px;' ,
'type' => 'number' ,
2013-08-22 10:58:03 +00:00
'custom_attributes' => array (
2014-08-31 08:22:03 +00:00
'min' => 0 ,
'step' => 1
2013-08-22 10:58:03 +00:00
),
2016-02-09 23:26:22 +00:00
'default' => '0'
2013-08-22 10:58:03 +00:00
),
array (
2014-08-31 08:22:03 +00:00
'title' => __ ( 'Out Of Stock Visibility' , 'woocommerce' ),
'desc' => __ ( 'Hide out of stock items from the catalog' , 'woocommerce' ),
'id' => 'woocommerce_hide_out_of_stock_items' ,
'default' => 'no' ,
'type' => 'checkbox'
2013-08-22 10:58:03 +00:00
),
array (
2014-08-31 08:22:03 +00:00
'title' => __ ( 'Stock Display Format' , 'woocommerce' ),
'desc' => __ ( 'This controls how stock is displayed on the frontend.' , 'woocommerce' ),
'id' => 'woocommerce_stock_format' ,
'css' => 'min-width:150px;' ,
2015-01-12 17:45:47 +00:00
'class' => 'wc-enhanced-select' ,
2014-08-31 08:22:03 +00:00
'default' => '' ,
'type' => 'select' ,
'options' => array (
'' => __ ( 'Always show stock e.g. "12 in stock"' , 'woocommerce' ),
'low_amount' => __ ( 'Only show stock when low e.g. "Only 2 left in stock" vs. "In Stock"' , 'woocommerce' ),
'no_amount' => __ ( 'Never show stock amount' , 'woocommerce' ),
2013-08-22 10:58:03 +00:00
),
2014-08-31 08:22:03 +00:00
'desc_tip' => true ,
2013-08-22 10:58:03 +00:00
),
2014-11-11 14:40:13 +00:00
array (
'type' => 'sectionend' ,
'id' => 'product_inventory_options'
),
2013-08-22 10:58:03 +00:00
));
2014-11-11 14:31:27 +00:00
} elseif ( 'downloadable' == $current_section ) {
2014-10-31 19:07:00 +00:00
$settings = apply_filters ( 'woocommerce_downloadable_products_settings' , array (
2014-11-11 14:40:13 +00:00
array (
'title' => __ ( 'Downloadable Products' , 'woocommerce' ),
'type' => 'title' ,
'id' => 'digital_download_options'
),
2014-10-31 19:07:00 +00:00
array (
'title' => __ ( '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' ,
2015-01-12 16:29:01 +00:00
'class' => 'wc-enhanced-select' ,
2014-10-31 19:07:00 +00:00
'css' => 'min-width:300px;' ,
'default' => 'force' ,
'desc_tip' => true ,
'options' => array (
'force' => __ ( 'Force Downloads' , 'woocommerce' ),
'xsendfile' => __ ( 'X-Accel-Redirect/X-Sendfile' , 'woocommerce' ),
'redirect' => __ ( 'Redirect only' , 'woocommerce' ),
),
'autoload' => false
),
array (
'title' => __ ( 'Access Restriction' , 'woocommerce' ),
'desc' => __ ( 'Downloads require login' , 'woocommerce' ),
'id' => 'woocommerce_downloads_require_login' ,
'type' => 'checkbox' ,
'default' => 'no' ,
'desc_tip' => __ ( 'This setting does not apply to guest purchases.' , 'woocommerce' ),
'checkboxgroup' => 'start' ,
'autoload' => false
),
array (
'desc' => __ ( 'Grant access to downloadable products after payment' , 'woocommerce' ),
'id' => 'woocommerce_downloads_grant_access_after_payment' ,
'type' => 'checkbox' ,
'default' => 'yes' ,
'desc_tip' => __ ( 'Enable this option to grant access to downloads when orders are "processing", rather than "completed".' , 'woocommerce' ),
'checkboxgroup' => 'end' ,
'autoload' => false
),
2014-11-11 14:40:13 +00:00
array (
'type' => 'sectionend' ,
'id' => 'digital_download_options'
),
2014-10-31 19:07:00 +00:00
));
2014-11-11 14:25:46 +00:00
} else {
$settings = apply_filters ( 'woocommerce_products_general_settings' , array (
2014-11-11 14:40:13 +00:00
array (
'title' => __ ( 'Measurements' , 'woocommerce' ),
'type' => 'title' ,
'id' => 'product_measurement_options'
),
2014-11-11 14:25:46 +00:00
array (
'title' => __ ( 'Weight Unit' , 'woocommerce' ),
'desc' => __ ( 'This controls what unit you will define weights in.' , 'woocommerce' ),
'id' => 'woocommerce_weight_unit' ,
2015-01-12 16:29:01 +00:00
'class' => 'wc-enhanced-select' ,
2014-11-11 14:25:46 +00:00
'css' => 'min-width:300px;' ,
'default' => 'kg' ,
'type' => 'select' ,
'options' => array (
'kg' => __ ( 'kg' , 'woocommerce' ),
'g' => __ ( 'g' , 'woocommerce' ),
'lbs' => __ ( 'lbs' , 'woocommerce' ),
'oz' => __ ( 'oz' , 'woocommerce' ),
),
'desc_tip' => true ,
),
array (
'title' => __ ( 'Dimensions Unit' , 'woocommerce' ),
'desc' => __ ( 'This controls what unit you will define lengths in.' , 'woocommerce' ),
'id' => 'woocommerce_dimension_unit' ,
2015-01-12 16:29:01 +00:00
'class' => 'wc-enhanced-select' ,
2014-11-11 14:25:46 +00:00
'css' => 'min-width:300px;' ,
'default' => 'cm' ,
'type' => 'select' ,
'options' => array (
'm' => __ ( 'm' , 'woocommerce' ),
'cm' => __ ( 'cm' , 'woocommerce' ),
'mm' => __ ( 'mm' , 'woocommerce' ),
'in' => __ ( 'in' , 'woocommerce' ),
'yd' => __ ( 'yd' , 'woocommerce' ),
),
'desc_tip' => true ,
),
2014-11-11 14:40:13 +00:00
array (
'type' => 'sectionend' ,
2016-02-11 11:13:48 +00:00
'id' => 'product_measurement_options' ,
2014-11-11 14:40:13 +00:00
),
2014-11-11 14:25:46 +00:00
2014-11-11 14:40:13 +00:00
array (
'title' => __ ( 'Reviews' , 'woocommerce' ),
'type' => 'title' ,
'desc' => '' ,
2016-02-11 11:13:48 +00:00
'id' => 'product_rating_options' ,
2014-11-11 14:40:13 +00:00
),
2014-11-11 14:25:46 +00:00
array (
'title' => __ ( 'Product Ratings' , 'woocommerce' ),
'desc' => __ ( 'Enable ratings on reviews' , 'woocommerce' ),
'id' => 'woocommerce_enable_review_rating' ,
'default' => 'yes' ,
'type' => 'checkbox' ,
'checkboxgroup' => 'start' ,
2016-02-11 11:13:48 +00:00
'show_if_checked' => 'option' ,
2014-11-11 14:25:46 +00:00
),
array (
'desc' => __ ( 'Ratings are required to leave a review' , 'woocommerce' ),
'id' => 'woocommerce_review_rating_required' ,
'default' => 'yes' ,
'type' => 'checkbox' ,
'checkboxgroup' => '' ,
'show_if_checked' => 'yes' ,
2016-02-11 11:13:48 +00:00
'autoload' => false ,
2014-11-11 14:25:46 +00:00
),
array (
'desc' => __ ( 'Show "verified owner" label for customer reviews' , 'woocommerce' ),
'id' => 'woocommerce_review_rating_verification_label' ,
'default' => 'yes' ,
'type' => 'checkbox' ,
'checkboxgroup' => '' ,
'show_if_checked' => 'yes' ,
2016-02-11 11:13:48 +00:00
'autoload' => false ,
2014-11-11 14:25:46 +00:00
),
array (
'desc' => __ ( 'Only allow reviews from "verified owners"' , 'woocommerce' ),
'id' => 'woocommerce_review_rating_verification_required' ,
'default' => 'no' ,
'type' => 'checkbox' ,
'checkboxgroup' => 'end' ,
'show_if_checked' => 'yes' ,
2016-02-11 11:13:48 +00:00
'autoload' => false ,
2014-11-11 14:25:46 +00:00
),
2014-11-11 14:40:13 +00:00
array (
'type' => 'sectionend' ,
'id' => 'product_rating_options'
),
2014-11-11 14:25:46 +00:00
2013-08-22 10:58:03 +00:00
));
}
2014-09-12 11:20:06 +00:00
return apply_filters ( 'woocommerce_get_settings_' . $this -> id , $settings , $current_section );
2013-08-22 10:58:03 +00:00
}
}
endif ;
2014-08-31 08:22:03 +00:00
return new WC_Settings_Products ();