2011-08-10 17:11:11 +00:00
< ? php
2012-03-20 13:22:35 +00:00
/**
* Plugin Name : WooCommerce
* Plugin URI : http :// www . woothemes . com / woocommerce /
* Description : An e - commerce toolkit that helps you sell anything . Beautifully .
2012-12-20 15:17:31 +00:00
* Version : 2.0 . 0 - beta1
2012-03-20 13:22:35 +00:00
* Author : WooThemes
* Author URI : http :// woothemes . com
2012-12-18 12:04:33 +00:00
* Requires at least : 3.5
2012-12-13 15:27:47 +00:00
* Tested up to : 3.5
2012-08-07 08:38:08 +00:00
*
2012-03-20 13:22:35 +00:00
* Text Domain : woocommerce
2012-12-28 10:54:02 +00:00
* Domain Path : / i18n / languages /
2012-08-07 08:38:08 +00:00
*
2012-03-20 13:22:35 +00:00
* @ package WooCommerce
* @ category Core
* @ author WooThemes
*/
2012-04-16 12:52:28 +00:00
2012-05-24 11:20:11 +00:00
if ( ! defined ( 'ABSPATH' ) ) exit ; // Exit if accessed directly
2011-08-10 17:11:11 +00:00
2012-05-24 11:20:11 +00:00
if ( ! class_exists ( 'Woocommerce' ) ) {
2011-12-08 12:50:50 +00:00
2011-09-04 00:02:44 +00:00
/**
2011-12-09 17:01:56 +00:00
* Main WooCommerce Class
*
* Contains the main functions for WooCommerce , stores variables , and handles error messages
*
2012-08-14 19:42:38 +00:00
* @ class Woocommerce
2012-08-14 14:13:08 +00:00
* @ version 1.6 . 4
* @ since 1.4
* @ package WooCommerce
* @ author WooThemes
2011-09-06 11:11:22 +00:00
*/
2012-01-21 09:01:41 +00:00
class Woocommerce {
2012-08-07 08:38:08 +00:00
2012-08-14 14:13:08 +00:00
/**
* @ var string
*/
2012-12-14 21:19:40 +00:00
public $version = '2.0.0' ;
2012-08-07 08:38:08 +00:00
2012-08-14 14:13:08 +00:00
/**
* @ var string
*/
2012-12-14 21:19:40 +00:00
public $plugin_url ;
2012-08-14 14:13:08 +00:00
/**
* @ var string
*/
2012-12-14 21:19:40 +00:00
public $plugin_path ;
2012-08-07 08:38:08 +00:00
2012-08-14 14:13:08 +00:00
/**
* @ var string
*/
2012-12-14 21:19:40 +00:00
public $template_url ;
2012-08-07 08:38:08 +00:00
2012-08-14 14:13:08 +00:00
/**
* @ var array
*/
2012-12-14 21:19:40 +00:00
public $errors = array ();
2012-08-07 08:38:08 +00:00
2012-08-14 14:13:08 +00:00
/**
* @ var array
*/
2012-12-14 21:19:40 +00:00
public $messages = array ();
2012-08-07 08:38:08 +00:00
2012-08-14 14:13:08 +00:00
/**
* @ var WC_Query
*/
2012-12-14 21:19:40 +00:00
public $query ;
2012-08-14 14:13:08 +00:00
/**
* @ var WC_Customer
*/
2012-12-14 21:19:40 +00:00
public $customer ;
2012-08-14 14:13:08 +00:00
/**
* @ var WC_Shipping
*/
2012-12-14 21:19:40 +00:00
public $shipping ;
2012-08-14 14:13:08 +00:00
2012-11-22 13:00:25 +00:00
/**
* @ var WC_Product_Factory
*/
2012-12-14 21:19:40 +00:00
public $product_factory ;
2012-11-22 13:00:25 +00:00
2012-08-14 14:13:08 +00:00
/**
* @ var WC_Cart
*/
2012-12-14 21:19:40 +00:00
public $cart ;
2012-08-14 14:13:08 +00:00
/**
* @ var WC_Payment_Gateways
*/
2012-12-14 21:19:40 +00:00
public $payment_gateways ;
2012-08-14 14:13:08 +00:00
/**
* @ var WC_Countries
*/
2012-12-14 21:19:40 +00:00
public $countries ;
2012-08-14 14:13:08 +00:00
/**
* @ var WC_Email
*/
2012-12-14 21:19:40 +00:00
public $woocommerce_email ;
2011-12-09 17:01:56 +00:00
2012-08-14 14:13:08 +00:00
/**
* @ var WC_Checkout
*/
2012-12-14 21:19:40 +00:00
public $checkout ;
2012-08-07 08:38:08 +00:00
2012-08-14 14:13:08 +00:00
/**
* @ var WC_Integrations
*/
2012-12-14 21:19:40 +00:00
public $integrations ;
2012-08-07 08:38:08 +00:00
2012-08-14 14:13:08 +00:00
/**
* @ var array
*/
2011-12-09 19:55:09 +00:00
private $_body_classes = array ();
2012-08-07 08:38:08 +00:00
2012-08-14 14:13:08 +00:00
/**
* @ var string
*/
2011-12-09 17:01:56 +00:00
private $_inline_js = '' ;
2012-08-07 08:38:08 +00:00
2012-08-14 14:13:08 +00:00
2011-12-09 17:01:56 +00:00
/**
2012-08-14 14:13:08 +00:00
* WooCommerce Constructor .
2011-12-09 17:01:56 +00:00
*
2012-08-14 14:13:08 +00:00
* @ access public
* @ return void
2011-12-09 17:01:56 +00:00
*/
2012-12-14 21:19:40 +00:00
public function __construct () {
2011-12-11 15:20:34 +00:00
2012-02-01 21:49:08 +00:00
// Define version constant
define ( 'WOOCOMMERCE_VERSION' , $this -> version );
2012-02-28 08:37:42 +00:00
2012-12-12 12:52:35 +00:00
// Installation
if ( is_admin () && ! defined ( 'DOING_AJAX' ) ) {
register_activation_hook ( __FILE__ , array ( $this , 'activate' ) );
register_activation_hook ( __FILE__ , 'flush_rewrite_rules' );
if ( get_option ( 'woocommerce_version' ) != $this -> version )
2012-12-15 11:53:32 +00:00
add_action ( 'init' , array ( $this , 'install' ), 1 );
2012-12-12 12:52:35 +00:00
}
2011-12-09 17:01:56 +00:00
// Include required files
$this -> includes ();
2012-08-07 08:38:08 +00:00
2011-12-09 17:01:56 +00:00
// Actions
2012-12-15 11:53:32 +00:00
add_action ( 'init' , array ( $this , 'init' ), 0 );
add_action ( 'init' , array ( $this , 'include_template_functions' ), 25 );
add_action ( 'after_setup_theme' , array ( $this , 'compatibility' ) );
2012-08-07 08:38:08 +00:00
2012-03-20 18:59:12 +00:00
// Loaded action
do_action ( 'woocommerce_loaded' );
2011-10-03 08:14:07 +00:00
}
2011-12-09 17:01:56 +00:00
2012-08-14 14:13:08 +00:00
2012-12-12 12:52:35 +00:00
/**
* activate function .
*
* @ access public
* @ return void
*/
2012-12-14 21:19:40 +00:00
public function activate () {
2012-12-12 12:52:35 +00:00
update_option ( 'skip_install_woocommerce_pages' , 0 );
update_option ( 'woocommerce_installed' , 1 );
$this -> install ();
}
/**
* upgrade function .
*
* @ access public
* @ return void
*/
function install () {
include_once ( 'admin/woocommerce-admin-install.php' );
do_install_woocommerce ();
}
2011-12-09 17:01:56 +00:00
/**
2012-08-14 14:13:08 +00:00
* Include required core files .
*
* @ access public
* @ return void
*/
2011-12-09 17:01:56 +00:00
function includes () {
2012-03-20 13:22:35 +00:00
if ( is_admin () ) $this -> admin_includes ();
if ( defined ( 'DOING_AJAX' ) ) $this -> ajax_includes ();
if ( ! is_admin () || defined ( 'DOING_AJAX' ) ) $this -> frontend_includes ();
2011-12-09 17:01:56 +00:00
2012-03-20 13:22:35 +00:00
include ( 'woocommerce-core-functions.php' ); // Contains core functions for the front/back end
include ( 'widgets/widget-init.php' ); // Widget classes
2012-01-27 16:38:39 +00:00
include ( 'classes/class-wc-countries.php' ); // Defines countries and states
include ( 'classes/class-wc-order.php' ); // Single order class
2012-11-27 16:22:47 +00:00
2012-11-22 11:37:41 +00:00
include ( 'classes/class-wc-product-factory.php' ); // Product factory
2012-11-22 14:04:15 +00:00
include ( 'classes/abstracts/abstract-wc-product.php' ); // Product class abstract
2012-11-22 10:22:18 +00:00
include ( 'classes/class-wc-product-simple.php' ); // Simple product type class
2012-11-21 18:07:45 +00:00
include ( 'classes/class-wc-product-external.php' ); // External product type class
include ( 'classes/class-wc-product-variable.php' ); // Variable product type class
include ( 'classes/class-wc-product-grouped.php' ); // Grouped product type class
2012-01-27 16:38:39 +00:00
include ( 'classes/class-wc-product-variation.php' ); // Product variation class
2012-11-27 16:22:47 +00:00
2012-01-27 16:38:39 +00:00
include ( 'classes/class-wc-tax.php' ); // Tax class
2012-04-30 19:50:35 +00:00
include ( 'classes/class-wc-settings-api.php' ); // Settings API
2012-08-07 08:38:08 +00:00
2012-04-30 19:50:35 +00:00
// Include Core Payment Gateways
2012-01-27 16:38:39 +00:00
include ( 'classes/gateways/class-wc-payment-gateways.php' );
include ( 'classes/gateways/class-wc-payment-gateway.php' );
2012-06-08 10:46:10 +00:00
include ( 'classes/gateways/bacs/class-wc-bacs.php' );
include ( 'classes/gateways/cheque/class-wc-cheque.php' );
include ( 'classes/gateways/paypal/class-wc-paypal.php' );
include ( 'classes/gateways/cod/class-wc-cod.php' );
include ( 'classes/gateways/mijireh/class-wc-mijireh-checkout.php' );
2012-08-07 08:38:08 +00:00
2012-04-30 19:50:35 +00:00
// Include Core Shipping Methods
2012-01-27 16:38:39 +00:00
include ( 'classes/shipping/class-wc-shipping.php' );
include ( 'classes/shipping/class-wc-shipping-method.php' );
include ( 'classes/shipping/class-wc-flat-rate.php' );
2012-01-31 18:13:32 +00:00
include ( 'classes/shipping/class-wc-international-delivery.php' );
2012-01-27 16:38:39 +00:00
include ( 'classes/shipping/class-wc-free-shipping.php' );
include ( 'classes/shipping/class-wc-local-delivery.php' );
include ( 'classes/shipping/class-wc-local-pickup.php' );
2012-08-07 08:38:08 +00:00
2012-04-30 19:50:35 +00:00
// Include Core Integrations
include ( 'classes/integrations/class-wc-integration.php' );
include ( 'classes/integrations/class-wc-integrations.php' );
include ( 'classes/integrations/google-analytics/class-wc-google-analytics.php' );
include ( 'classes/integrations/sharethis/class-wc-sharethis.php' );
include ( 'classes/integrations/sharedaddy/class-wc-sharedaddy.php' );
include ( 'classes/integrations/shareyourcart/class-wc-shareyourcart.php' );
2012-05-08 15:23:09 +00:00
}
2012-08-07 08:38:08 +00:00
2012-08-14 14:13:08 +00:00
2011-12-09 17:01:56 +00:00
/**
2012-08-14 14:13:08 +00:00
* Include required admin files .
*
* @ access public
* @ return void
*/
2012-12-14 21:19:40 +00:00
public function admin_includes () {
2011-12-12 16:34:56 +00:00
include ( 'admin/woocommerce-admin-init.php' ); // Admin section
2011-10-03 08:14:07 +00:00
}
2012-08-07 08:38:08 +00:00
2012-08-14 14:13:08 +00:00
2011-12-09 17:01:56 +00:00
/**
2012-08-14 14:13:08 +00:00
* Include required ajax files .
*
* @ access public
* @ return void
*/
2012-12-14 21:19:40 +00:00
public function ajax_includes () {
2011-12-11 00:33:28 +00:00
include ( 'woocommerce-ajax.php' ); // Ajax functions for admin and the front-end
2011-10-03 08:14:07 +00:00
}
2012-08-07 08:38:08 +00:00
2012-08-14 14:13:08 +00:00
2011-12-09 17:01:56 +00:00
/**
2012-08-14 14:13:08 +00:00
* Include required frontend files .
*
* @ access public
* @ return void
*/
2012-12-14 21:19:40 +00:00
public function frontend_includes () {
2011-12-11 00:33:28 +00:00
include ( 'woocommerce-hooks.php' ); // Template hooks used on the front-end
include ( 'woocommerce-functions.php' ); // Contains functions for various front-end events
2012-03-20 13:22:35 +00:00
include ( 'shortcodes/shortcode-init.php' ); // Init the shortcodes
include ( 'classes/class-wc-query.php' ); // The main store queries
include ( 'classes/class-wc-cart.php' ); // The main cart class
include ( 'classes/class-wc-coupon.php' ); // Coupon class
include ( 'classes/class-wc-customer.php' ); // Customer class
2012-09-12 13:45:42 +00:00
include ( 'classes/abstracts/abstract-wc-session.php' ); // Abstract for session implementations
include ( 'classes/class-wc-session-transients.php' ); // Transients implementation of the session class
2011-10-03 08:14:07 +00:00
}
2012-08-07 08:38:08 +00:00
2012-08-14 14:13:08 +00:00
2011-12-09 17:01:56 +00:00
/**
2012-08-14 14:13:08 +00:00
* Function used to Init WooCommerce Template Functions - This makes them pluggable by plugins and themes .
*
* @ access public
* @ return void
*/
2012-12-14 21:19:40 +00:00
public function include_template_functions () {
2011-12-11 00:33:28 +00:00
include ( 'woocommerce-template.php' );
2011-12-09 19:55:09 +00:00
}
2012-08-07 08:38:08 +00:00
2012-08-14 14:13:08 +00:00
2011-12-09 19:55:09 +00:00
/**
2012-08-14 14:13:08 +00:00
* Init WooCommerce when WordPress Initialises .
*
* @ access public
* @ return void
*/
2012-12-14 21:19:40 +00:00
public function init () {
2012-10-10 09:21:04 +00:00
//Before init action
do_action ( 'before_woocommerce_init' );
2012-11-13 23:22:53 +00:00
2012-03-20 13:20:08 +00:00
// Set up localisation
$this -> load_plugin_textdomain ();
// Variables
$this -> template_url = apply_filters ( 'woocommerce_template_url' , 'woocommerce/' );
// Load class instances
2012-03-20 19:22:10 +00:00
$this -> payment_gateways = new WC_Payment_gateways (); // Payment gateways. Loads and stores payment methods
2012-03-20 13:20:08 +00:00
$this -> shipping = new WC_Shipping (); // Shipping class. loads and stores shipping methods
2012-11-22 13:00:25 +00:00
$this -> product_factory = new WC_Product_Factory (); // Product Factory to create new product instances
2012-03-20 13:20:08 +00:00
$this -> countries = new WC_Countries (); // Countries class
2012-04-30 19:50:35 +00:00
$this -> integrations = new WC_Integrations (); // Integrations class
2012-08-07 08:38:08 +00:00
2012-04-30 19:50:35 +00:00
// Init shipping, payment gateways, and integrations
2012-03-20 13:20:08 +00:00
$this -> shipping -> init ();
$this -> payment_gateways -> init ();
2012-04-30 19:50:35 +00:00
$this -> integrations -> init ();
2012-03-20 13:20:08 +00:00
// Classes/actions loaded for the frontend and for ajax requests
2012-03-20 14:32:29 +00:00
if ( ! is_admin () || defined ( 'DOING_AJAX' ) ) {
2012-08-07 08:38:08 +00:00
2012-09-30 19:11:32 +00:00
// Session class, handles session data for customers - can be overwritten if custom handler is needed
$session_class = apply_filters ( 'woocommerce_session_handler' , 'WC_Session_Transients' );
$this -> session = new $session_class ();
2012-03-20 13:20:08 +00:00
// Class instances
$this -> cart = new WC_Cart (); // Cart class, stores the cart contents
2012-09-07 17:26:13 +00:00
$this -> customer = new WC_Customer (); // Customer class, handles data such as customer location
2012-03-20 13:20:08 +00:00
$this -> query = new WC_Query (); // Query class, handles front-end queries and loops
2012-08-07 08:38:08 +00:00
2012-03-20 13:20:08 +00:00
// Load messages
$this -> load_messages ();
2012-03-20 14:32:29 +00:00
2012-03-20 13:20:08 +00:00
// Hooks
2012-12-15 11:53:32 +00:00
add_filter ( 'template_include' , array ( $this , 'template_loader' ) );
add_filter ( 'comments_template' , array ( $this , 'comments_template_loader' ) );
add_filter ( 'wp_redirect' , array ( $this , 'redirect' ), 1 , 2 );
add_action ( 'template_redirect' , array ( $this , 'buffer_checkout' ) );
add_action ( 'wp_enqueue_scripts' , array ( $this , 'frontend_scripts' ) );
add_action ( 'wp_print_scripts' , array ( $this , 'check_jquery' ), 25 );
add_action ( 'wp_head' , array ( $this , 'generator' ) );
add_action ( 'wp_head' , array ( $this , 'wp_head' ) );
add_filter ( 'body_class' , array ( $this , 'output_body_class' ) );
add_action ( 'wp_footer' , array ( $this , 'output_inline_js' ), 25 );
2012-03-20 14:32:29 +00:00
}
2012-03-20 13:20:08 +00:00
2012-03-20 14:08:29 +00:00
// Actions
2012-12-15 11:53:32 +00:00
add_action ( 'the_post' , array ( $this , 'setup_product_data' ) );
add_action ( 'admin_footer' , array ( $this , 'output_inline_js' ), 25 );
2012-03-20 14:08:29 +00:00
// Email Actions
$email_actions = array ( 'woocommerce_low_stock' , 'woocommerce_no_stock' , 'woocommerce_product_on_backorder' , 'woocommerce_order_status_pending_to_processing' , 'woocommerce_order_status_pending_to_completed' , 'woocommerce_order_status_pending_to_on-hold' , 'woocommerce_order_status_failed_to_processing' , 'woocommerce_order_status_failed_to_completed' , 'woocommerce_order_status_pending_to_processing' , 'woocommerce_order_status_pending_to_on-hold' , 'woocommerce_order_status_completed' , 'woocommerce_new_customer_note' );
2012-08-07 08:38:08 +00:00
2012-11-13 23:22:53 +00:00
foreach ( $email_actions as $action )
2012-12-15 11:53:32 +00:00
add_action ( $action , array ( $this , 'send_transactional_email' ) );
2012-03-20 14:32:29 +00:00
2012-03-20 14:08:29 +00:00
// Actions for SSL
2012-03-20 14:32:29 +00:00
if ( ! is_admin () || defined ( 'DOING_AJAX' ) ) {
2012-12-15 11:53:32 +00:00
add_action ( 'template_redirect' , array ( $this , 'ssl_redirect' ) );
2012-08-07 08:38:08 +00:00
2012-03-20 14:08:29 +00:00
$filters = array ( 'post_thumbnail_html' , 'widget_text' , 'wp_get_attachment_url' , 'wp_get_attachment_image_attributes' , 'wp_get_attachment_url' , 'option_siteurl' , 'option_homeurl' , 'option_home' , 'option_url' , 'option_wpurl' , 'option_stylesheet_url' , 'option_template_url' , 'script_loader_src' , 'style_loader_src' , 'template_directory_uri' , 'stylesheet_directory_uri' , 'site_url' );
2012-08-07 08:38:08 +00:00
foreach ( $filters as $filter )
2012-12-15 11:53:32 +00:00
add_filter ( $filter , array ( $this , 'force_ssl' ) );
2012-03-20 14:32:29 +00:00
}
2012-03-20 14:08:29 +00:00
2011-12-11 14:40:25 +00:00
// Register globals for WC environment
$this -> register_globals ();
2011-12-09 19:55:09 +00:00
// Init WooCommerce taxonomies
$this -> init_taxonomy ();
2012-08-07 08:38:08 +00:00
2011-12-09 19:55:09 +00:00
// Init Images sizes
$this -> init_image_sizes ();
2012-08-07 08:38:08 +00:00
2011-12-09 19:55:09 +00:00
// Init styles
2012-03-20 13:22:35 +00:00
if ( ! is_admin () ) $this -> init_styles ();
2012-08-07 08:38:08 +00:00
2012-02-19 17:12:42 +00:00
// Trigger API requests
$this -> api_requests ();
2012-08-07 08:38:08 +00:00
2012-02-19 17:12:42 +00:00
// Init action
2011-12-09 19:55:09 +00:00
do_action ( 'woocommerce_init' );
}
2012-08-07 08:38:08 +00:00
2012-08-14 14:13:08 +00:00
2012-02-19 17:12:42 +00:00
/**
2012-08-14 14:13:08 +00:00
* API request - Trigger any API requests ( handy for third party plugins / gateways ) .
*
* @ access public
* @ return void
*/
2012-12-14 21:19:40 +00:00
public function api_requests () {
2012-03-20 13:22:35 +00:00
if ( isset ( $_GET [ 'wc-api' ] ) ) {
$api = strtolower ( esc_attr ( $_GET [ 'wc-api' ] ) );
2012-02-19 17:12:42 +00:00
do_action ( 'woocommerce_api_' . $api );
}
}
2012-08-07 08:38:08 +00:00
2012-08-14 14:13:08 +00:00
2012-02-15 20:42:00 +00:00
/**
2012-08-14 14:13:08 +00:00
* Localisation .
*
* @ access public
* @ return void
*/
2012-12-14 21:19:40 +00:00
public function load_plugin_textdomain () {
2012-02-22 13:08:31 +00:00
// Note: the first-loaded translation file overrides any following ones if the same translation is present
2012-12-28 10:54:02 +00:00
$variable_lang = 'yes' == get_option ( 'woocommerce_informal_localisation_type' ) ? 'informal' : 'formal' ;
load_textdomain ( 'woocommerce' , WP_LANG_DIR . '/woocommerce/woocommerce-' . apply_filters ( 'plugin_locale' , get_locale (), 'woocommerce' ) . '.mo' );
load_plugin_textdomain ( 'woocommerce' , false , dirname ( plugin_basename ( __FILE__ ) ) . '/i18n/languages/' . $variable_lang );
load_plugin_textdomain ( 'woocommerce' , false , dirname ( plugin_basename ( __FILE__ ) ) . '/i18n/languages' );
2012-02-15 20:42:00 +00:00
}
2012-08-07 08:38:08 +00:00
2012-08-14 14:13:08 +00:00
2012-03-20 18:59:12 +00:00
/**
2012-08-14 14:13:08 +00:00
* Load a template .
2012-08-07 08:38:08 +00:00
*
2012-03-20 18:59:12 +00:00
* Handles template usage so that we can use our own templates instead of the themes .
*
2012-08-07 08:38:08 +00:00
* Templates are in the 'templates' folder . woocommerce looks for theme
2012-03-20 18:59:12 +00:00
* overides in / theme / woocommerce / by default
*
2012-08-07 08:38:08 +00:00
* For beginners , it also looks for a woocommerce . php template first . If the user adds
* this to the theme ( containing a woocommerce () inside ) this will be used for all
2012-03-20 18:59:12 +00:00
* woocommerce templates .
2012-08-14 14:13:08 +00:00
*
* @ access public
* @ param mixed $template
* @ return string
2012-03-20 18:59:12 +00:00
*/
2012-12-14 21:19:40 +00:00
public function template_loader ( $template ) {
2012-08-07 08:38:08 +00:00
2012-06-14 10:08:50 +00:00
$find = array ( 'woocommerce.php' );
$file = '' ;
2012-08-07 08:38:08 +00:00
2012-03-20 18:59:12 +00:00
if ( is_single () && get_post_type () == 'product' ) {
2012-08-07 08:38:08 +00:00
2012-03-20 18:59:12 +00:00
$file = 'single-product.php' ;
$find [] = $file ;
$find [] = $this -> template_url . $file ;
2012-06-14 10:08:50 +00:00
} elseif ( is_tax ( 'product_cat' ) || is_tax ( 'product_tag' ) ) {
2012-08-07 08:38:08 +00:00
2012-03-20 18:59:12 +00:00
$term = get_queried_object ();
2012-08-07 08:38:08 +00:00
2012-03-20 18:59:12 +00:00
$file = 'taxonomy-' . $term -> taxonomy . '.php' ;
$find [] = 'taxonomy-' . $term -> taxonomy . '-' . $term -> slug . '.php' ;
$find [] = $this -> template_url . 'taxonomy-' . $term -> taxonomy . '-' . $term -> slug . '.php' ;
$find [] = $file ;
$find [] = $this -> template_url . $file ;
2012-08-07 08:38:08 +00:00
2012-06-14 10:08:50 +00:00
} elseif ( is_post_type_archive ( 'product' ) || is_page ( woocommerce_get_page_id ( 'shop' ) ) ) {
2012-08-07 08:38:08 +00:00
2012-03-20 18:59:12 +00:00
$file = 'archive-product.php' ;
$find [] = $file ;
$find [] = $this -> template_url . $file ;
2012-08-07 08:38:08 +00:00
2012-03-20 18:59:12 +00:00
}
2012-08-07 08:38:08 +00:00
2012-03-20 18:59:12 +00:00
if ( $file ) {
$template = locate_template ( $find );
if ( ! $template ) $template = $this -> plugin_path () . '/templates/' . $file ;
}
2012-08-07 08:38:08 +00:00
2012-03-20 18:59:12 +00:00
return $template ;
}
2012-08-07 08:38:08 +00:00
2012-08-14 14:13:08 +00:00
/**
* comments_template_loader function .
*
* @ access public
* @ param mixed $template
* @ return string
*/
2012-12-14 21:19:40 +00:00
public function comments_template_loader ( $template ) {
2012-03-20 18:59:12 +00:00
if ( get_post_type () !== 'product' ) return $template ;
2012-08-07 08:38:08 +00:00
2012-03-20 18:59:12 +00:00
if ( file_exists ( STYLESHEETPATH . '/' . $this -> template_url . 'single-product-reviews.php' ))
2012-08-07 08:38:08 +00:00
return STYLESHEETPATH . '/' . $this -> template_url . 'single-product-reviews.php' ;
2012-03-20 18:59:12 +00:00
else
return $this -> plugin_path () . '/templates/single-product-reviews.php' ;
2012-08-07 08:38:08 +00:00
}
2012-08-14 14:13:08 +00:00
2012-01-24 16:56:10 +00:00
/**
2012-08-14 14:13:08 +00:00
* Output buffering on the checkout allows gateways to do header redirects .
*
* @ access public
* @ return void
*/
2012-12-14 21:19:40 +00:00
public function buffer_checkout () {
2012-03-20 13:22:35 +00:00
if ( is_checkout () ) ob_start ();
2012-01-24 16:56:10 +00:00
}
2011-12-11 14:40:25 +00:00
2012-08-14 14:13:08 +00:00
2011-12-11 14:40:25 +00:00
/**
2012-08-14 14:13:08 +00:00
* Register WC environment globals .
*
* @ access public
* @ return void
*/
2012-12-14 21:19:40 +00:00
public function register_globals () {
2011-12-11 14:40:25 +00:00
$GLOBALS [ 'product' ] = null ;
}
2012-08-07 08:38:08 +00:00
2012-08-14 14:13:08 +00:00
2011-12-11 14:40:25 +00:00
/**
2012-08-14 14:13:08 +00:00
* When the_post is called , get product data too .
*
* @ access public
* @ param mixed $post
* @ return WC_Product
*/
2012-12-14 21:19:40 +00:00
public function setup_product_data ( $post ) {
2012-03-27 12:20:47 +00:00
if ( is_int ( $post ) ) $post = get_post ( $post );
2012-03-20 13:22:35 +00:00
if ( $post -> post_type !== 'product' ) return ;
unset ( $GLOBALS [ 'product' ] );
2012-11-21 18:07:45 +00:00
$GLOBALS [ 'product' ] = get_product ( $post );
2012-01-03 17:23:42 +00:00
return $GLOBALS [ 'product' ];
2011-12-11 14:40:25 +00:00
}
2012-08-07 08:38:08 +00:00
2012-08-14 14:13:08 +00:00
2011-12-09 17:01:56 +00:00
/**
2012-08-14 14:13:08 +00:00
* Add Compatibility for various bits .
*
* @ access public
* @ return void
*/
2012-12-14 21:19:40 +00:00
public function compatibility () {
2011-12-09 17:01:56 +00:00
// Post thumbnail support
2012-12-13 12:40:24 +00:00
if ( ! current_theme_supports ( 'post-thumbnails' , 'product' ) ) {
2011-12-09 17:01:56 +00:00
add_theme_support ( 'post-thumbnails' );
remove_post_type_support ( 'post' , 'thumbnail' );
remove_post_type_support ( 'page' , 'thumbnail' );
2012-03-20 13:22:35 +00:00
} else {
2011-12-09 17:01:56 +00:00
add_post_type_support ( 'product' , 'thumbnail' );
2012-03-20 13:22:35 +00:00
}
2012-08-07 08:38:08 +00:00
2011-12-09 17:01:56 +00:00
// IIS
2012-03-20 13:22:35 +00:00
if ( ! isset ( $_SERVER [ 'REQUEST_URI' ] ) ) {
$_SERVER [ 'REQUEST_URI' ] = substr ( $_SERVER [ 'PHP_SELF' ], 1 );
2012-08-07 08:38:08 +00:00
if ( isset ( $_SERVER [ 'QUERY_STRING' ] ) )
2012-03-20 13:22:35 +00:00
$_SERVER [ 'REQUEST_URI' ] .= '?' . $_SERVER [ 'QUERY_STRING' ];
2011-12-09 17:01:56 +00:00
}
2012-08-07 08:38:08 +00:00
2012-04-23 12:41:11 +00:00
// NGINX Proxy
if ( ! isset ( $_SERVER [ 'REMOTE_ADDR' ] ) && isset ( $_SERVER [ 'HTTP_REMOTE_ADDR' ] ) )
$_SERVER [ 'REMOTE_ADDR' ] = $_SERVER [ 'HTTP_REMOTE_ADDR' ];
2012-08-07 08:38:08 +00:00
2012-04-23 12:41:11 +00:00
if ( ! isset ( $_SERVER [ 'HTTPS' ] ) && ! empty ( $_SERVER [ 'HTTP_HTTPS' ] ) )
$_SERVER [ 'HTTPS' ] = $_SERVER [ 'HTTP_HTTPS' ];
2012-08-07 08:38:08 +00:00
2012-07-18 17:07:36 +00:00
// Support for hosts which don't use HTTPS, and use HTTP_X_FORWARDED_PROTO
2012-08-07 08:38:08 +00:00
if ( ! isset ( $_SERVER [ 'HTTPS' ] ) && ! empty ( $_SERVER [ 'HTTP_X_FORWARDED_PROTO' ] ) && $_SERVER [ 'HTTP_X_FORWARDED_PROTO' ] == 'https' )
2012-07-18 17:07:36 +00:00
$_SERVER [ 'HTTPS' ] = '1' ;
2011-12-09 17:01:56 +00:00
}
2011-12-09 19:55:09 +00:00
2012-08-14 14:13:08 +00:00
2011-12-09 17:01:56 +00:00
/**
2012-08-14 14:13:08 +00:00
* Redirect to https if Force SSL is enabled .
*
* @ access public
* @ return void
*/
2012-12-14 21:19:40 +00:00
public function ssl_redirect () {
2012-03-20 13:22:35 +00:00
if ( get_option ( 'woocommerce_force_ssl_checkout' ) == 'no' ) return ;
2012-08-07 08:38:08 +00:00
2012-03-20 13:22:35 +00:00
if ( ! is_ssl () ) {
if ( is_checkout () ) {
2012-10-18 10:33:47 +00:00
wp_safe_redirect ( str_replace ( 'http:' , 'https:' , get_permalink ( woocommerce_get_page_id ( 'checkout' ))), 301 );
2012-03-12 08:34:49 +00:00
exit ;
2012-03-20 13:22:35 +00:00
} elseif ( is_account_page () ) {
2012-03-12 08:34:49 +00:00
if ( 0 === strpos ( $_SERVER [ 'REQUEST_URI' ], 'http' ) ) {
2012-10-18 10:33:47 +00:00
wp_safe_redirect ( preg_replace ( '|^http://|' , 'https://' , $_SERVER [ 'REQUEST_URI' ] ) );
2012-03-12 08:34:49 +00:00
exit ;
} else {
2012-10-18 10:33:47 +00:00
wp_safe_redirect ( 'https://' . $_SERVER [ 'HTTP_HOST' ] . $_SERVER [ 'REQUEST_URI' ] );
2012-03-12 08:34:49 +00:00
exit ;
}
exit ;
}
} else {
// Break out of SSL if we leave the checkout/my accounts (anywhere but thanks)
2012-03-20 13:22:35 +00:00
if ( get_option ( 'woocommerce_unforce_ssl_checkout' ) == 'yes' && $_SERVER [ 'REQUEST_URI' ] && ! is_checkout () && ! is_page ( woocommerce_get_page_id ( 'thanks' ) ) && ! is_ajax () && ! is_account_page () ) {
2012-03-12 08:34:49 +00:00
if ( 0 === strpos ( $_SERVER [ 'REQUEST_URI' ], 'http' ) ) {
2012-10-18 10:33:47 +00:00
wp_safe_redirect ( preg_replace ( '|^https://|' , 'http://' , $_SERVER [ 'REQUEST_URI' ] ) );
2012-03-12 08:34:49 +00:00
exit ;
} else {
2012-10-18 10:33:47 +00:00
wp_safe_redirect ( 'http://' . $_SERVER [ 'HTTP_HOST' ] . $_SERVER [ 'REQUEST_URI' ] );
2012-03-12 08:34:49 +00:00
exit ;
}
}
}
2011-12-09 17:01:56 +00:00
}
2012-08-07 08:38:08 +00:00
2012-08-14 14:13:08 +00:00
2011-12-09 17:01:56 +00:00
/**
2012-08-14 14:13:08 +00:00
* Output generator to aid debugging .
*
* @ access public
* @ return void
*/
2012-12-14 21:19:40 +00:00
public function generator () {
2012-10-16 13:35:17 +00:00
echo " \n \n " . '<!-- WooCommerce Version -->' . " \n " . '<meta name="generator" content="WooCommerce ' . esc_attr ( $this -> version ) . '" />' . " \n \n " ;
2012-02-27 13:14:33 +00:00
}
2012-08-07 08:38:08 +00:00
2012-08-14 14:13:08 +00:00
2012-02-27 13:14:33 +00:00
/**
2012-08-14 14:13:08 +00:00
* Add body classes .
*
* @ access public
* @ return void
*/
2012-12-14 21:19:40 +00:00
public function wp_head () {
2012-04-17 22:44:33 +00:00
$theme_name = ( function_exists ( 'wp_get_theme' ) ) ? wp_get_theme () : get_current_theme ();
2012-04-19 07:46:18 +00:00
$this -> add_body_class ( " theme- { $theme_name } " );
2012-04-17 22:44:33 +00:00
2012-03-20 13:22:35 +00:00
if ( is_woocommerce () ) $this -> add_body_class ( 'woocommerce' );
2012-08-07 08:38:08 +00:00
2012-03-20 13:22:35 +00:00
if ( is_checkout () ) $this -> add_body_class ( 'woocommerce-checkout' );
2012-08-07 08:38:08 +00:00
2012-03-20 13:22:35 +00:00
if ( is_cart () ) $this -> add_body_class ( 'woocommerce-cart' );
2012-08-07 08:38:08 +00:00
2012-03-20 13:22:35 +00:00
if ( is_account_page () ) $this -> add_body_class ( 'woocommerce-account' );
2012-08-07 08:38:08 +00:00
2012-11-13 23:22:53 +00:00
if ( is_woocommerce () || is_checkout () || is_cart () || is_account_page () || is_page ( woocommerce_get_page_id ( 'order_tracking' ) ) || is_page ( woocommerce_get_page_id ( 'thanks' ) ) ) $this -> add_body_class ( 'woocommerce-page' );
2011-08-10 17:11:11 +00:00
}
2012-08-07 08:38:08 +00:00
2012-08-14 14:13:08 +00:00
2011-12-09 17:01:56 +00:00
/**
2012-08-14 14:13:08 +00:00
* Init WooCommerce taxonomies .
*
* @ access public
* @ return void
*/
2012-12-14 21:19:40 +00:00
public function init_taxonomy () {
2012-08-07 08:38:08 +00:00
2012-11-13 23:22:53 +00:00
if ( post_type_exists ( 'product' ) )
2012-10-10 09:21:04 +00:00
return ;
2012-08-07 08:38:08 +00:00
2011-12-09 17:01:56 +00:00
/**
* Slugs
**/
2012-10-10 09:21:04 +00:00
$permalinks = get_option ( 'woocommerce_permalinks' );
$shop_page_id = woocommerce_get_page_id ( 'shop' );
2012-11-13 23:22:53 +00:00
2012-10-10 09:21:04 +00:00
// Base slug is also used for the product post type archive
$base_slug = $shop_page_id > 0 && get_page ( $shop_page_id ) ? get_page_uri ( $shop_page_id ) : 'shop' ;
2012-11-13 23:22:53 +00:00
2012-10-10 09:21:04 +00:00
// Get bases
$product_category_slug = empty ( $permalinks [ 'category_base' ] ) ? _x ( 'product-category' , 'slug' , 'woocommerce' ) : $permalinks [ 'category_base' ];
$product_tag_slug = empty ( $permalinks [ 'tag_base' ] ) ? _x ( 'product-tag' , 'slug' , 'woocommerce' ) : $permalinks [ 'tag_base' ];
$product_attribute_base = empty ( $permalinks [ 'attribute_base' ] ) ? '' : $permalinks [ 'attribute_base' ];
$product_permalink = empty ( $permalinks [ 'product_base' ] ) ? _x ( 'product' , 'slug' , 'woocommerce' ) : $permalinks [ 'product_base' ];
2012-11-13 23:22:53 +00:00
if ( $product_permalink )
2012-10-14 12:06:37 +00:00
$rewrite = array ( 'slug' => untrailingslashit ( $product_permalink ), 'with_front' => false , 'feeds' => true );
2012-10-10 09:21:04 +00:00
else
$rewrite = false ;
2012-11-13 23:22:53 +00:00
2012-10-10 09:21:04 +00:00
$show_in_menu = current_user_can ( 'manage_woocommerce' ) ? 'woocommerce' : true ;
2012-08-07 08:38:08 +00:00
2011-12-09 17:01:56 +00:00
/**
* Taxonomies
**/
2012-08-08 15:57:32 +00:00
do_action ( 'woocommerce_register_taxonomy' );
2012-03-20 13:22:35 +00:00
$admin_only_query_var = ( is_admin () ) ? true : false ;
2012-08-07 08:38:08 +00:00
2011-12-09 17:01:56 +00:00
register_taxonomy ( 'product_type' ,
array ( 'product' ),
array (
'hierarchical' => false ,
2012-05-08 23:53:23 +00:00
'update_count_callback' => '_update_post_term_count' ,
2011-12-09 17:01:56 +00:00
'show_ui' => false ,
'show_in_nav_menus' => false ,
'query_var' => $admin_only_query_var ,
'rewrite' => false
)
);
register_taxonomy ( 'product_cat' ,
array ( 'product' ),
array (
2012-01-31 16:21:29 +00:00
'hierarchical' => true ,
2012-11-28 15:03:22 +00:00
'update_count_callback' => '_woocommerce_term_recount' ,
2012-01-05 11:31:22 +00:00
'label' => __ ( 'Product Categories' , 'woocommerce' ),
2011-12-09 17:01:56 +00:00
'labels' => array (
2012-01-05 11:31:22 +00:00
'name' => __ ( 'Product Categories' , 'woocommerce' ),
'singular_name' => __ ( 'Product Category' , 'woocommerce' ),
2012-07-26 14:33:02 +00:00
'menu_name' => _x ( 'Categories' , 'Admin menu name' , 'woocommerce' ),
2012-01-05 11:31:22 +00:00
'search_items' => __ ( 'Search Product Categories' , 'woocommerce' ),
'all_items' => __ ( 'All Product Categories' , 'woocommerce' ),
'parent_item' => __ ( 'Parent Product Category' , 'woocommerce' ),
'parent_item_colon' => __ ( 'Parent Product Category:' , 'woocommerce' ),
'edit_item' => __ ( 'Edit Product Category' , 'woocommerce' ),
'update_item' => __ ( 'Update Product Category' , 'woocommerce' ),
'add_new_item' => __ ( 'Add New Product Category' , 'woocommerce' ),
'new_item_name' => __ ( 'New Product Category Name' , 'woocommerce' )
2011-12-09 17:01:56 +00:00
),
'show_ui' => true ,
'query_var' => true ,
2012-01-09 13:14:36 +00:00
'capabilities' => array (
2012-09-20 15:35:15 +00:00
'manage_terms' => 'manage_product_terms' ,
'edit_terms' => 'edit_product_terms' ,
'delete_terms' => 'delete_product_terms' ,
'assign_terms' => 'assign_product_terms' ,
2012-01-09 13:14:36 +00:00
),
2012-10-10 09:21:04 +00:00
'rewrite' => array ( 'slug' => $product_category_slug , 'with_front' => false , 'hierarchical' => true ),
2011-12-09 17:01:56 +00:00
)
);
2012-08-07 08:38:08 +00:00
2011-12-09 17:01:56 +00:00
register_taxonomy ( 'product_tag' ,
array ( 'product' ),
array (
'hierarchical' => false ,
2012-11-28 15:03:22 +00:00
'update_count_callback' => '_woocommerce_term_recount' ,
2012-01-05 11:31:22 +00:00
'label' => __ ( 'Product Tags' , 'woocommerce' ),
2011-12-09 17:01:56 +00:00
'labels' => array (
2012-07-26 14:33:02 +00:00
'name' => __ ( 'Product Tags' , 'woocommerce' ),
2012-01-05 11:31:22 +00:00
'singular_name' => __ ( 'Product Tag' , 'woocommerce' ),
2012-06-07 08:06:33 +00:00
'menu_name' => _x ( 'Tags' , 'Admin menu name' , 'woocommerce' ),
2012-01-05 11:31:22 +00:00
'search_items' => __ ( 'Search Product Tags' , 'woocommerce' ),
'all_items' => __ ( 'All Product Tags' , 'woocommerce' ),
'parent_item' => __ ( 'Parent Product Tag' , 'woocommerce' ),
'parent_item_colon' => __ ( 'Parent Product Tag:' , 'woocommerce' ),
'edit_item' => __ ( 'Edit Product Tag' , 'woocommerce' ),
'update_item' => __ ( 'Update Product Tag' , 'woocommerce' ),
'add_new_item' => __ ( 'Add New Product Tag' , 'woocommerce' ),
'new_item_name' => __ ( 'New Product Tag Name' , 'woocommerce' )
2011-12-09 17:01:56 +00:00
),
'show_ui' => true ,
'query_var' => true ,
2012-01-09 13:14:36 +00:00
'capabilities' => array (
2012-09-20 15:35:15 +00:00
'manage_terms' => 'manage_product_terms' ,
'edit_terms' => 'edit_product_terms' ,
'delete_terms' => 'delete_product_terms' ,
'assign_terms' => 'assign_product_terms' ,
2012-01-09 13:14:36 +00:00
),
2012-10-10 09:21:04 +00:00
'rewrite' => array ( 'slug' => $product_tag_slug , 'with_front' => false ),
2011-12-09 17:01:56 +00:00
)
);
2012-08-07 08:38:08 +00:00
2011-12-09 17:01:56 +00:00
register_taxonomy ( 'product_shipping_class' ,
2012-02-08 14:39:31 +00:00
array ( 'product' , 'product_variation' ),
2011-12-09 17:01:56 +00:00
array (
'hierarchical' => true ,
'update_count_callback' => '_update_post_term_count' ,
2012-01-05 11:31:22 +00:00
'label' => __ ( 'Shipping Classes' , 'woocommerce' ),
2011-12-09 17:01:56 +00:00
'labels' => array (
2012-01-05 11:31:22 +00:00
'name' => __ ( 'Shipping Classes' , 'woocommerce' ),
'singular_name' => __ ( 'Shipping Class' , 'woocommerce' ),
2012-06-07 08:06:33 +00:00
'menu_name' => _x ( 'Shipping Classes' , 'Admin menu name' , 'woocommerce' ),
2012-01-05 11:31:22 +00:00
'search_items' => __ ( 'Search Shipping Classes' , 'woocommerce' ),
'all_items' => __ ( 'All Shipping Classes' , 'woocommerce' ),
'parent_item' => __ ( 'Parent Shipping Class' , 'woocommerce' ),
'parent_item_colon' => __ ( 'Parent Shipping Class:' , 'woocommerce' ),
'edit_item' => __ ( 'Edit Shipping Class' , 'woocommerce' ),
'update_item' => __ ( 'Update Shipping Class' , 'woocommerce' ),
'add_new_item' => __ ( 'Add New Shipping Class' , 'woocommerce' ),
'new_item_name' => __ ( 'New Shipping Class Name' , 'woocommerce' )
2011-12-09 17:01:56 +00:00
),
'show_ui' => true ,
'show_in_nav_menus' => false ,
'query_var' => $admin_only_query_var ,
2012-01-09 13:14:36 +00:00
'capabilities' => array (
2012-09-20 15:35:15 +00:00
'manage_terms' => 'manage_product_terms' ,
'edit_terms' => 'edit_product_terms' ,
'delete_terms' => 'delete_product_terms' ,
'assign_terms' => 'assign_product_terms' ,
2012-01-09 13:14:36 +00:00
),
2011-12-09 17:01:56 +00:00
'rewrite' => false ,
)
);
2012-08-07 08:38:08 +00:00
2011-12-09 17:01:56 +00:00
register_taxonomy ( 'shop_order_status' ,
array ( 'shop_order' ),
array (
2012-02-27 15:02:44 +00:00
'hierarchical' => false ,
2011-12-09 17:01:56 +00:00
'update_count_callback' => '_update_post_term_count' ,
'labels' => array (
2012-01-05 11:31:22 +00:00
'name' => __ ( 'Order statuses' , 'woocommerce' ),
'singular_name' => __ ( 'Order status' , 'woocommerce' ),
'search_items' => __ ( 'Search Order statuses' , 'woocommerce' ),
2012-06-06 20:35:40 +00:00
'all_items' => __ ( 'All Order statuses' , 'woocommerce' ),
2012-01-05 11:31:22 +00:00
'parent_item' => __ ( 'Parent Order status' , 'woocommerce' ),
'parent_item_colon' => __ ( 'Parent Order status:' , 'woocommerce' ),
'edit_item' => __ ( 'Edit Order status' , 'woocommerce' ),
'update_item' => __ ( 'Update Order status' , 'woocommerce' ),
'add_new_item' => __ ( 'Add New Order status' , 'woocommerce' ),
'new_item_name' => __ ( 'New Order status Name' , 'woocommerce' )
2011-12-09 17:01:56 +00:00
),
'show_ui' => false ,
'show_in_nav_menus' => false ,
'query_var' => $admin_only_query_var ,
'rewrite' => false ,
)
);
2012-08-07 08:38:08 +00:00
$attribute_taxonomies = $this -> get_attribute_taxonomies ();
2012-03-20 13:22:35 +00:00
if ( $attribute_taxonomies ) {
foreach ( $attribute_taxonomies as $tax ) {
2012-08-07 08:38:08 +00:00
2012-12-05 15:01:29 +00:00
$name = $this -> attribute_taxonomy_name ( $tax -> attribute_name );
2011-12-09 17:01:56 +00:00
$hierarchical = true ;
2012-03-20 13:22:35 +00:00
if ( $name ) {
2012-08-07 08:38:08 +00:00
2011-12-09 17:01:56 +00:00
$label = ( isset ( $tax -> attribute_label ) && $tax -> attribute_label ) ? $tax -> attribute_label : $tax -> attribute_name ;
2012-08-07 08:38:08 +00:00
2012-10-09 14:57:02 +00:00
$show_in_nav_menus = apply_filters ( 'woocommerce_attribute_show_in_nav_menus' , false , $name );
2012-08-07 08:38:08 +00:00
2011-12-09 17:01:56 +00:00
register_taxonomy ( $name ,
array ( 'product' ),
array (
'hierarchical' => $hierarchical ,
2012-05-08 23:53:23 +00:00
'update_count_callback' => '_update_post_term_count' ,
2011-12-09 17:01:56 +00:00
'labels' => array (
'name' => $label ,
'singular_name' => $label ,
2012-01-05 11:31:22 +00:00
'search_items' => __ ( 'Search' , 'woocommerce' ) . ' ' . $label ,
'all_items' => __ ( 'All' , 'woocommerce' ) . ' ' . $label ,
'parent_item' => __ ( 'Parent' , 'woocommerce' ) . ' ' . $label ,
'parent_item_colon' => __ ( 'Parent' , 'woocommerce' ) . ' ' . $label . ':' ,
'edit_item' => __ ( 'Edit' , 'woocommerce' ) . ' ' . $label ,
'update_item' => __ ( 'Update' , 'woocommerce' ) . ' ' . $label ,
'add_new_item' => __ ( 'Add New' , 'woocommerce' ) . ' ' . $label ,
'new_item_name' => __ ( 'New' , 'woocommerce' ) . ' ' . $label
2011-12-09 17:01:56 +00:00
),
'show_ui' => false ,
'query_var' => true ,
2012-09-20 15:35:15 +00:00
'capabilities' => array (
'manage_terms' => 'manage_product_terms' ,
'edit_terms' => 'edit_product_terms' ,
'delete_terms' => 'delete_product_terms' ,
'assign_terms' => 'assign_product_terms' ,
),
2011-12-09 17:01:56 +00:00
'show_in_nav_menus' => $show_in_nav_menus ,
2012-12-05 15:01:29 +00:00
'rewrite' => array ( 'slug' => $product_attribute_base . sanitize_title ( $tax -> attribute_name ), 'with_front' => false , 'hierarchical' => $hierarchical ),
2011-12-09 17:01:56 +00:00
)
);
2012-08-07 08:38:08 +00:00
2012-03-20 13:22:35 +00:00
}
2012-08-07 08:38:08 +00:00
}
2012-03-20 13:22:35 +00:00
}
2012-08-07 08:38:08 +00:00
2011-12-09 17:01:56 +00:00
/**
* Post Types
**/
2012-08-08 15:57:32 +00:00
do_action ( 'woocommerce_register_post_type' );
2012-11-13 23:22:53 +00:00
2011-12-09 17:01:56 +00:00
register_post_type ( " product " ,
2012-11-13 23:22:53 +00:00
apply_filters ( 'woocommerce_register_post_type_product' ,
2012-09-21 16:01:22 +00:00
array (
'labels' => array (
'name' => __ ( 'Products' , 'woocommerce' ),
'singular_name' => __ ( 'Product' , 'woocommerce' ),
'menu_name' => _x ( 'Products' , 'Admin menu name' , 'woocommerce' ),
'add_new' => __ ( 'Add Product' , 'woocommerce' ),
'add_new_item' => __ ( 'Add New Product' , 'woocommerce' ),
'edit' => __ ( 'Edit' , 'woocommerce' ),
'edit_item' => __ ( 'Edit Product' , 'woocommerce' ),
'new_item' => __ ( 'New Product' , 'woocommerce' ),
'view' => __ ( 'View Product' , 'woocommerce' ),
'view_item' => __ ( 'View Product' , 'woocommerce' ),
'search_items' => __ ( 'Search Products' , 'woocommerce' ),
'not_found' => __ ( 'No Products found' , 'woocommerce' ),
'not_found_in_trash' => __ ( 'No Products found in trash' , 'woocommerce' ),
'parent' => __ ( 'Parent Product' , 'woocommerce' )
),
'description' => __ ( 'This is where you can add new products to your store.' , 'woocommerce' ),
'public' => true ,
'show_ui' => true ,
'capability_type' => 'product' ,
'map_meta_cap' => true ,
'publicly_queryable' => true ,
'exclude_from_search' => false ,
'hierarchical' => false , // Hierarcal causes memory issues - WP loads all records!
2012-10-10 09:21:04 +00:00
'rewrite' => $rewrite ,
2012-09-21 16:01:22 +00:00
'query_var' => true ,
'supports' => array ( 'title' , 'editor' , 'excerpt' , 'thumbnail' , 'comments' , 'custom-fields' , 'page-attributes' ),
'has_archive' => $base_slug ,
'show_in_nav_menus' => true
)
2011-12-09 17:01:56 +00:00
)
);
2012-08-07 08:38:08 +00:00
2012-08-09 10:50:15 +00:00
// Sort out attachment urls (removed, breaks pagination) no alternatives add_rewrite_rule( '^' . $attachment_base . '([^/]*)/([^/]*)/([^/]*)/?', 'index.php?attachment=$matches[3]', 'top' );
2012-08-07 08:38:08 +00:00
2011-12-09 17:01:56 +00:00
register_post_type ( " product_variation " ,
2012-11-13 23:22:53 +00:00
apply_filters ( 'woocommerce_register_post_type_product_variation' ,
2012-09-21 16:01:22 +00:00
array (
'labels' => array (
'name' => __ ( 'Variations' , 'woocommerce' ),
'singular_name' => __ ( 'Variation' , 'woocommerce' ),
'add_new' => __ ( 'Add Variation' , 'woocommerce' ),
'add_new_item' => __ ( 'Add New Variation' , 'woocommerce' ),
'edit' => __ ( 'Edit' , 'woocommerce' ),
'edit_item' => __ ( 'Edit Variation' , 'woocommerce' ),
'new_item' => __ ( 'New Variation' , 'woocommerce' ),
'view' => __ ( 'View Variation' , 'woocommerce' ),
'view_item' => __ ( 'View Variation' , 'woocommerce' ),
'search_items' => __ ( 'Search Variations' , 'woocommerce' ),
'not_found' => __ ( 'No Variations found' , 'woocommerce' ),
'not_found_in_trash' => __ ( 'No Variations found in trash' , 'woocommerce' ),
'parent' => __ ( 'Parent Variation' , 'woocommerce' )
),
'public' => true ,
'show_ui' => false ,
'capability_type' => 'product' ,
'map_meta_cap' => true ,
'publicly_queryable' => false ,
'exclude_from_search' => true ,
'hierarchical' => false ,
'rewrite' => false ,
'query_var' => true ,
'supports' => array ( 'title' , 'editor' , 'custom-fields' , 'page-attributes' , 'thumbnail' ),
'show_in_nav_menus' => false
)
2011-12-09 17:01:56 +00:00
)
);
2012-08-07 08:38:08 +00:00
2012-06-07 08:06:33 +00:00
$menu_name = _x ( 'Orders' , 'Admin menu name' , 'woocommerce' );
2012-07-23 12:56:05 +00:00
if ( $order_count = woocommerce_processing_order_count () ) {
$menu_name .= " <span class='awaiting-mod update-plugins count- $order_count '><span class='processing-count'> " . number_format_i18n ( $order_count ) . " </span></span> " ;
2012-06-07 08:06:33 +00:00
}
2011-12-09 17:01:56 +00:00
register_post_type ( " shop_order " ,
2012-11-13 23:22:53 +00:00
apply_filters ( 'woocommerce_register_post_type_shop_order' ,
2012-09-21 16:01:22 +00:00
array (
'labels' => array (
'name' => __ ( 'Orders' , 'woocommerce' ),
'singular_name' => __ ( 'Order' , 'woocommerce' ),
'add_new' => __ ( 'Add Order' , 'woocommerce' ),
'add_new_item' => __ ( 'Add New Order' , 'woocommerce' ),
'edit' => __ ( 'Edit' , 'woocommerce' ),
'edit_item' => __ ( 'Edit Order' , 'woocommerce' ),
'new_item' => __ ( 'New Order' , 'woocommerce' ),
'view' => __ ( 'View Order' , 'woocommerce' ),
'view_item' => __ ( 'View Order' , 'woocommerce' ),
'search_items' => __ ( 'Search Orders' , 'woocommerce' ),
'not_found' => __ ( 'No Orders found' , 'woocommerce' ),
'not_found_in_trash' => __ ( 'No Orders found in trash' , 'woocommerce' ),
'parent' => __ ( 'Parent Orders' , 'woocommerce' ),
'menu_name' => $menu_name
),
'description' => __ ( 'This is where store orders are stored.' , 'woocommerce' ),
'public' => true ,
'show_ui' => true ,
'capability_type' => 'shop_order' ,
'map_meta_cap' => true ,
'publicly_queryable' => false ,
'exclude_from_search' => true ,
'show_in_menu' => $show_in_menu ,
'hierarchical' => false ,
'show_in_nav_menus' => false ,
'rewrite' => false ,
'query_var' => true ,
'supports' => array ( 'title' , 'comments' , 'custom-fields' ),
'has_archive' => false ,
)
2011-12-09 17:01:56 +00:00
)
);
2012-08-07 08:38:08 +00:00
2011-12-09 17:01:56 +00:00
register_post_type ( " shop_coupon " ,
2012-09-21 16:01:22 +00:00
apply_filters ( 'woocommerce_register_post_type_shop_coupon' ,
array (
'labels' => array (
'name' => __ ( 'Coupons' , 'woocommerce' ),
'singular_name' => __ ( 'Coupon' , 'woocommerce' ),
'menu_name' => _x ( 'Coupons' , 'Admin menu name' , 'woocommerce' ),
'add_new' => __ ( 'Add Coupon' , 'woocommerce' ),
'add_new_item' => __ ( 'Add New Coupon' , 'woocommerce' ),
'edit' => __ ( 'Edit' , 'woocommerce' ),
'edit_item' => __ ( 'Edit Coupon' , 'woocommerce' ),
'new_item' => __ ( 'New Coupon' , 'woocommerce' ),
'view' => __ ( 'View Coupons' , 'woocommerce' ),
'view_item' => __ ( 'View Coupon' , 'woocommerce' ),
'search_items' => __ ( 'Search Coupons' , 'woocommerce' ),
'not_found' => __ ( 'No Coupons found' , 'woocommerce' ),
'not_found_in_trash' => __ ( 'No Coupons found in trash' , 'woocommerce' ),
'parent' => __ ( 'Parent Coupon' , 'woocommerce' )
),
'description' => __ ( 'This is where you can add new coupons that customers can use in your store.' , 'woocommerce' ),
'public' => true ,
'show_ui' => true ,
'capability_type' => 'shop_coupon' ,
'map_meta_cap' => true ,
'publicly_queryable' => false ,
'exclude_from_search' => true ,
'show_in_menu' => $show_in_menu ,
'hierarchical' => false ,
'rewrite' => false ,
'query_var' => false ,
'supports' => array ( 'title' ),
'show_in_nav_menus' => false
)
2011-12-09 17:01:56 +00:00
)
);
}
2012-08-07 08:38:08 +00:00
2012-08-14 14:13:08 +00:00
2011-12-09 17:01:56 +00:00
/**
2012-08-14 14:13:08 +00:00
* Init images .
*
* @ access public
* @ return void
2011-12-09 17:01:56 +00:00
*/
2012-12-14 21:19:40 +00:00
public function init_image_sizes () {
2012-11-27 15:37:01 +00:00
$shop_thumbnail = $this -> get_image_size ( 'shop_thumbnail' );
$shop_catalog = $this -> get_image_size ( 'shop_catalog' );
$shop_single = $this -> get_image_size ( 'shop_single' );
add_image_size ( 'shop_thumbnail' , $shop_thumbnail [ 'width' ], $shop_thumbnail [ 'height' ], $shop_thumbnail [ 'crop' ] );
add_image_size ( 'shop_catalog' , $shop_catalog [ 'width' ], $shop_catalog [ 'height' ], $shop_catalog [ 'crop' ] );
add_image_size ( 'shop_single' , $shop_single [ 'width' ], $shop_single [ 'height' ], $shop_single [ 'crop' ] );
2011-12-09 17:01:56 +00:00
}
2012-08-07 08:38:08 +00:00
2012-08-14 14:13:08 +00:00
2011-12-09 17:01:56 +00:00
/**
2012-08-14 14:13:08 +00:00
* Init frontend CSS .
*
* @ access public
* @ return void
2011-12-09 17:01:56 +00:00
*/
2012-12-14 21:19:40 +00:00
public function init_styles () {
2012-07-17 14:09:18 +00:00
2012-08-07 08:38:08 +00:00
// Optional front end css
2012-03-20 13:22:35 +00:00
if ( ( defined ( 'WOOCOMMERCE_USE_CSS' ) && WOOCOMMERCE_USE_CSS ) || ( ! defined ( 'WOOCOMMERCE_USE_CSS' ) && get_option ( 'woocommerce_frontend_css' ) == 'yes' ) ) {
$css = file_exists ( get_stylesheet_directory () . '/woocommerce/style.css' ) ? get_stylesheet_directory_uri () . '/woocommerce/style.css' : $this -> plugin_url () . '/assets/css/woocommerce.css' ;
2012-08-07 08:38:08 +00:00
2012-07-17 14:09:18 +00:00
wp_enqueue_style ( 'woocommerce_frontend_styles' , $css );
2012-03-20 13:22:35 +00:00
}
2011-12-09 17:01:56 +00:00
}
2012-08-07 08:38:08 +00:00
2012-08-14 14:13:08 +00:00
2011-12-09 17:01:56 +00:00
/**
2012-08-14 14:13:08 +00:00
* Register / queue frontend scripts .
*
* @ access public
* @ return void
2011-12-09 17:01:56 +00:00
*/
2012-12-14 21:19:40 +00:00
public function frontend_scripts () {
2012-08-12 12:15:27 +00:00
global $post ;
2012-07-17 14:09:18 +00:00
$suffix = defined ( 'SCRIPT_DEBUG' ) && SCRIPT_DEBUG ? '' : '.min' ;
$lightbox_en = get_option ( 'woocommerce_enable_lightbox' ) == 'yes' ? true : false ;
$chosen_en = get_option ( 'woocommerce_enable_chosen' ) == 'yes' ? true : false ;
$frontend_script_path = $this -> plugin_url () . '/assets/js/frontend/' ;
2012-08-07 08:38:08 +00:00
2012-07-17 14:09:18 +00:00
// Register any scipts for later use, or used as dependencies
2012-08-24 17:34:31 +00:00
wp_register_script ( 'chosen' , $this -> plugin_url () . '/assets/js/chosen/chosen.jquery' . $suffix . '.js' , array ( 'jquery' ), $this -> version , true );
2012-10-17 13:32:25 +00:00
wp_register_script ( 'jquery-blockui' , $this -> plugin_url () . '/assets/js/jquery-blockui/jquery.blockUI' . $suffix . '.js' , array ( 'jquery' ), $this -> version , true );
wp_register_script ( 'jquery-placeholder' , $this -> plugin_url () . '/assets/js/jquery-placeholder/jquery.placeholder' . $suffix . '.js' , array ( 'jquery' ), $this -> version , true );
2012-08-24 17:34:31 +00:00
wp_register_script ( 'wc-add-to-cart-variation' , $frontend_script_path . 'add-to-cart-variation' . $suffix . '.js' , array ( 'jquery' ), $this -> version , true );
wp_register_script ( 'wc-single-product' , $frontend_script_path . 'single-product' . $suffix . '.js' , array ( 'jquery' ), $this -> version , true );
2012-08-07 08:38:08 +00:00
2012-07-17 14:09:18 +00:00
// Queue frontend scripts conditionally
2012-08-07 08:38:08 +00:00
if ( get_option ( 'woocommerce_enable_ajax_add_to_cart' ) == 'yes' )
2012-08-24 17:34:31 +00:00
wp_enqueue_script ( 'wc-add-to-cart' , $frontend_script_path . 'add-to-cart' . $suffix . '.js' , array ( 'jquery' ), $this -> version , true );
2012-08-07 08:38:08 +00:00
2012-07-17 14:09:18 +00:00
if ( is_cart () )
2012-08-24 17:34:31 +00:00
wp_enqueue_script ( 'wc-cart' , $frontend_script_path . 'cart' . $suffix . '.js' , array ( 'jquery' ), $this -> version , true );
2012-08-07 08:38:08 +00:00
2012-07-17 14:09:18 +00:00
if ( is_checkout () )
2012-09-03 15:45:09 +00:00
wp_enqueue_script ( 'wc-checkout' , $frontend_script_path . 'checkout' . $suffix . '.js' , array ( 'jquery' , 'woocommerce' ), $this -> version , true );
2012-07-17 14:09:18 +00:00
if ( is_product () )
2012-08-12 12:15:27 +00:00
wp_enqueue_script ( 'wc-single-product' );
2012-08-07 08:38:08 +00:00
2012-08-12 12:15:27 +00:00
if ( $lightbox_en && ( is_product () || ( ! empty ( $post -> post_content ) && strstr ( $post -> post_content , '[product_page' ) ) ) ) {
2012-08-24 17:34:31 +00:00
wp_enqueue_script ( 'fancybox' , $this -> plugin_url () . '/assets/js/fancybox/fancybox' . $suffix . '.js' , array ( 'jquery' ), $this -> version , true );
2012-07-17 14:09:18 +00:00
wp_enqueue_style ( 'woocommerce_fancybox_styles' , $this -> plugin_url () . '/assets/css/fancybox.css' );
2012-03-18 13:35:02 +00:00
}
2012-08-07 08:38:08 +00:00
2012-07-17 14:09:18 +00:00
if ( $chosen_en && is_checkout () ) {
2012-08-24 17:34:31 +00:00
wp_enqueue_script ( 'wc-chosen' , $frontend_script_path . 'chosen-frontend' . $suffix . '.js' , array ( 'chosen' ), $this -> version , true );
2012-07-17 14:09:18 +00:00
wp_enqueue_style ( 'woocommerce_chosen_styles' , $this -> plugin_url () . '/assets/css/chosen.css' );
2012-03-20 13:22:35 +00:00
}
2012-08-07 08:38:08 +00:00
2012-07-17 14:09:18 +00:00
// Global frontend scripts
2012-12-12 10:33:16 +00:00
wp_enqueue_script ( 'woocommerce' , $frontend_script_path . 'woocommerce' . $suffix . '.js' , array ( 'jquery' , 'jquery-blockui' ), $this -> version , true );
wp_enqueue_script ( 'jquery-placeholder' );
2012-08-07 08:38:08 +00:00
2012-07-17 14:09:18 +00:00
// Variables for JS scripts
2011-12-09 17:01:56 +00:00
$woocommerce_params = array (
2012-12-10 13:11:05 +00:00
'countries' => json_encode ( $this -> countries -> get_allowed_country_states () ),
'plugin_url' => $this -> plugin_url (),
'ajax_url' => $this -> ajax_url (),
2012-12-13 15:53:36 +00:00
'ajax_loader_url' => apply_filters ( 'woocommerce_ajax_loader_url' , $this -> plugin_url () . '/assets/images/ajax-loader@2x.gif' ),
2012-12-10 13:11:05 +00:00
'i18n_select_state_text' => esc_attr__ ( 'Select an option…' , 'woocommerce' ),
'i18n_required_rating_text' => esc_attr__ ( 'Please select a rating' , 'woocommerce' ),
'i18n_no_matching_variations_text' => esc_attr__ ( 'Sorry, no products matched your selection. Please choose a different combination.' , 'woocommerce' ),
'i18n_required_text' => esc_attr__ ( 'required' , 'woocommerce' ),
'i18n_view_cart' => esc_attr__ ( 'View Cart →' , 'woocommerce' ),
'review_rating_required' => get_option ( 'woocommerce_review_rating_required' ),
'update_order_review_nonce' => wp_create_nonce ( " update-order-review " ),
'apply_coupon_nonce' => wp_create_nonce ( " apply-coupon " ),
'option_guest_checkout' => get_option ( 'woocommerce_enable_guest_checkout' ),
'checkout_url' => add_query_arg ( 'action' , 'woocommerce-checkout' , $this -> ajax_url () ),
'is_checkout' => is_page ( woocommerce_get_page_id ( 'checkout' ) ) ? 1 : 0 ,
'update_shipping_method_nonce' => wp_create_nonce ( " update-shipping-method " ),
'add_to_cart_nonce' => wp_create_nonce ( " add-to-cart " ),
'cart_url' => get_permalink ( woocommerce_get_page_id ( 'cart' ) ),
2011-12-09 17:01:56 +00:00
);
2012-08-07 08:38:08 +00:00
if ( is_checkout () || is_cart () )
2011-12-15 23:24:02 +00:00
$woocommerce_params [ 'locale' ] = json_encode ( $this -> countries -> get_country_locale () );
2012-08-07 08:38:08 +00:00
2012-07-17 14:09:18 +00:00
wp_localize_script ( 'woocommerce' , 'woocommerce_params' , apply_filters ( 'woocommerce_params' , $woocommerce_params ) );
2012-08-25 08:47:32 +00:00
}
2012-11-13 23:22:53 +00:00
2012-08-25 08:47:32 +00:00
/**
* WC requires jQuery 1.7 since it uses functions like . on () for events .
* If , by the time wp_print_scrips is called , jQuery is outdated ( i . e not
2012-11-13 23:22:53 +00:00
* using the version in core ) we need to deregister it and register the
2012-08-25 08:47:32 +00:00
* core version of the file .
2012-11-13 23:22:53 +00:00
*
2012-08-25 08:47:32 +00:00
* @ access public
* @ return void
*/
2012-12-14 21:19:40 +00:00
public function check_jquery () {
2012-08-25 08:47:32 +00:00
global $wp_scripts ;
2012-11-13 23:22:53 +00:00
2012-08-25 08:47:32 +00:00
// Enforce minimum version of jQuery
if ( isset ( $wp_scripts -> registered [ 'jquery' ] -> ver ) && $wp_scripts -> registered [ 'jquery' ] -> ver < '1.7' ) {
wp_deregister_script ( 'jquery' );
wp_register_script ( 'jquery' , '/wp-includes/js/jquery/jquery.js' , array (), '1.7' );
wp_enqueue_script ( 'jquery' );
}
2011-12-09 17:01:56 +00:00
}
2012-08-07 08:38:08 +00:00
/** Load Instances on demand **********************************************/
2011-12-09 21:55:49 +00:00
/**
2012-08-14 14:13:08 +00:00
* Get Checkout Class .
*
* @ access public
* @ return WC_Checkout
2011-12-09 21:55:49 +00:00
*/
2012-12-14 21:19:40 +00:00
public function checkout () {
2012-12-10 12:34:55 +00:00
if ( ! class_exists ( 'WC_Checkout' ) ) {
include_once ( 'classes/class-wc-checkout.php' );
2012-01-27 16:38:39 +00:00
$this -> checkout = new WC_Checkout ();
2012-03-20 13:22:35 +00:00
}
2012-01-12 00:54:45 +00:00
return $this -> checkout ;
2011-12-09 21:55:49 +00:00
}
2012-08-07 08:38:08 +00:00
2012-08-14 14:13:08 +00:00
2011-12-09 21:55:49 +00:00
/**
2012-08-14 14:13:08 +00:00
* Get Logging Class .
*
* @ access public
* @ return WC_Logger
2011-12-09 21:55:49 +00:00
*/
2012-12-14 21:19:40 +00:00
public function logger () {
2012-03-20 13:22:35 +00:00
if ( ! class_exists ( 'WC_Logger' ) ) include ( 'classes/class-wc-logger.php' );
2012-01-27 16:38:39 +00:00
return new WC_Logger ();
2011-12-09 21:55:49 +00:00
}
2012-08-07 08:38:08 +00:00
2012-08-14 14:13:08 +00:00
2012-01-13 00:46:56 +00:00
/**
2012-08-14 14:13:08 +00:00
* Get Validation Class .
*
* @ access public
* @ return WC_Validation
2012-01-13 00:46:56 +00:00
*/
2012-12-14 21:19:40 +00:00
public function validation () {
2012-03-20 13:22:35 +00:00
if ( ! class_exists ( 'WC_Validation' ) ) include ( 'classes/class-wc-validation.php' );
2012-01-27 16:38:39 +00:00
return new WC_Validation ();
2012-01-13 00:46:56 +00:00
}
2012-07-10 15:52:52 +00:00
2012-08-14 14:13:08 +00:00
2012-07-10 15:52:52 +00:00
/**
2012-08-14 14:13:08 +00:00
* Init a coupon .
*
* @ access public
* @ param mixed $code
* @ return WC_Coupon
2012-07-10 15:52:52 +00:00
*/
2012-12-14 21:19:40 +00:00
public function coupon ( $code ) {
2012-07-10 15:52:52 +00:00
if ( ! class_exists ( 'WC_Coupon' ) ) include ( 'classes/class-wc-coupon.php' );
return new WC_Coupon ( $code );
}
2012-08-07 08:38:08 +00:00
2012-08-14 14:13:08 +00:00
2011-12-10 17:28:32 +00:00
/**
2012-08-14 14:13:08 +00:00
* Init the mailer and call the notifications for the current filter .
*
* @ access public
* @ param array $args ( default : array ())
* @ return void
2011-12-10 17:28:32 +00:00
*/
2012-12-14 21:19:40 +00:00
public function send_transactional_email ( $args = array () ) {
2011-12-10 17:28:32 +00:00
$this -> mailer ();
2012-09-17 00:53:17 +00:00
do_action ( current_filter () . '_notification' , $args );
2011-12-10 17:28:32 +00:00
}
2012-08-07 08:38:08 +00:00
2012-08-14 14:13:08 +00:00
2012-07-10 15:52:52 +00:00
/**
2012-08-14 14:13:08 +00:00
* Email Class .
*
* @ access public
* @ return WC_Email
2012-07-10 15:52:52 +00:00
*/
2012-12-14 21:19:40 +00:00
public function mailer () {
2012-09-30 19:15:39 +00:00
if ( empty ( $this -> woocommerce_email ) ) {
// Init mail class
if ( ! class_exists ( 'WC_Emails' ) ) {
include_once ( 'classes/emails/class-wc-emails.php' );
}
2012-09-17 00:53:17 +00:00
$this -> woocommerce_email = new WC_Emails ();
2012-03-20 13:22:35 +00:00
}
2011-12-10 17:28:32 +00:00
return $this -> woocommerce_email ;
}
2011-12-09 17:01:56 +00:00
2011-12-09 21:55:49 +00:00
/** Helper functions ******************************************************/
2012-08-07 08:38:08 +00:00
2011-12-09 21:55:49 +00:00
/**
2012-08-14 14:13:08 +00:00
* Get the plugin url .
*
* @ access public
* @ return string
2011-12-09 21:55:49 +00:00
*/
2012-12-14 21:19:40 +00:00
public function plugin_url () {
2012-03-20 13:22:35 +00:00
if ( $this -> plugin_url ) return $this -> plugin_url ;
2012-03-03 15:35:14 +00:00
return $this -> plugin_url = plugins_url ( basename ( plugin_dir_path ( __FILE__ ) ), basename ( __FILE__ ) );
2011-12-09 21:55:49 +00:00
}
2012-08-07 08:38:08 +00:00
2012-08-14 14:13:08 +00:00
2011-12-09 21:55:49 +00:00
/**
2012-08-14 14:13:08 +00:00
* Get the plugin path .
*
* @ access public
* @ return string
2011-12-09 21:55:49 +00:00
*/
2012-12-14 21:19:40 +00:00
public function plugin_path () {
2012-03-20 13:22:35 +00:00
if ( $this -> plugin_path ) return $this -> plugin_path ;
2012-08-07 08:38:08 +00:00
2012-04-11 10:02:35 +00:00
return $this -> plugin_path = untrailingslashit ( plugin_dir_path ( __FILE__ ) );
2012-03-29 00:50:20 +00:00
}
2012-08-07 08:38:08 +00:00
2012-08-14 14:13:08 +00:00
2012-03-29 00:50:20 +00:00
/**
2012-08-14 14:13:08 +00:00
* Get Ajax URL .
*
* @ access public
* @ return string
2012-08-07 08:38:08 +00:00
*/
2012-12-14 21:19:40 +00:00
public function ajax_url () {
2012-10-12 11:53:37 +00:00
return admin_url ( 'admin-ajax.php' , 'relative' );
2012-08-07 08:38:08 +00:00
}
2012-08-14 14:13:08 +00:00
2011-12-09 21:55:49 +00:00
/**
2012-08-14 14:13:08 +00:00
* Return the URL with https if SSL is on .
*
* @ access public
* @ param string / array $content
* @ return string / array
2011-12-09 21:55:49 +00:00
*/
2012-12-14 21:19:40 +00:00
public function force_ssl ( $content ) {
2012-03-20 13:22:35 +00:00
if ( is_ssl () ) {
if ( is_array ( $content ) )
2012-12-15 11:53:32 +00:00
$content = array_map ( array ( $this , 'force_ssl' ) , $content );
2012-08-07 08:38:08 +00:00
else
2012-03-20 13:22:35 +00:00
$content = str_replace ( 'http:' , 'https:' , $content );
}
2011-12-09 21:55:49 +00:00
return $content ;
}
2012-08-07 08:38:08 +00:00
2012-08-14 14:13:08 +00:00
2011-12-09 21:55:49 +00:00
/**
2012-08-14 14:13:08 +00:00
* Get an image size .
2011-12-09 21:55:49 +00:00
*
* Variable is filtered by woocommerce_get_image_size_ { image_size }
2012-08-14 14:13:08 +00:00
*
* @ access public
* @ param mixed $image_size
* @ return string
2011-12-09 21:55:49 +00:00
*/
2012-12-14 21:19:40 +00:00
public function get_image_size ( $image_size ) {
2012-11-27 16:22:47 +00:00
2012-11-27 15:37:01 +00:00
// Only return sizes we define in settings
if ( ! in_array ( $image_size , array ( 'shop_thumbnail' , 'shop_catalog' , 'shop_single' ) ) )
return apply_filters ( 'woocommerce_get_image_size_' . $image_size , '' );
2012-12-10 11:33:26 +00:00
$size = get_option ( $image_size . '_image_size' , array () );
2012-11-27 16:22:47 +00:00
2012-11-27 15:37:01 +00:00
$size [ 'width' ] = isset ( $size [ 'width' ] ) ? $size [ 'width' ] : '300' ;
$size [ 'height' ] = isset ( $size [ 'height' ] ) ? $size [ 'height' ] : '300' ;
$size [ 'crop' ] = isset ( $size [ 'crop' ] ) ? $size [ 'crop' ] : 1 ;
return apply_filters ( 'woocommerce_get_image_size_' . $image_size , $size );
2011-12-09 21:55:49 +00:00
}
/** Messages ****************************************************************/
2012-08-07 08:38:08 +00:00
2012-08-14 14:13:08 +00:00
/**
* Load Messages .
*
* @ access public
* @ return void
2011-12-09 21:55:49 +00:00
*/
2012-12-14 21:19:40 +00:00
public function load_messages () {
2012-09-07 17:26:13 +00:00
$this -> errors = $this -> session -> errors ;
$this -> messages = $this -> session -> messages ;
unset ( $this -> session -> errors , $this -> session -> messages );
2012-08-07 08:38:08 +00:00
2012-02-22 16:36:23 +00:00
// Load errors from querystring
2012-09-07 17:26:13 +00:00
if ( isset ( $_GET [ 'wc_error' ] ) )
2012-02-22 16:36:23 +00:00
$this -> add_error ( esc_attr ( $_GET [ 'wc_error' ] ) );
2011-12-09 21:55:49 +00:00
}
2011-12-09 17:01:56 +00:00
2012-08-14 14:13:08 +00:00
2011-12-09 21:55:49 +00:00
/**
2012-08-14 14:13:08 +00:00
* Add an error .
*
* @ access public
* @ param string $error
* @ return void
2011-12-09 21:55:49 +00:00
*/
2012-12-14 21:19:40 +00:00
public function add_error ( $error ) {
2012-08-14 14:13:08 +00:00
$this -> errors [] = apply_filters ( 'woocommerce_add_error' , $error );
}
2012-08-07 08:38:08 +00:00
2011-12-09 21:55:49 +00:00
/**
2012-08-14 14:13:08 +00:00
* Add a message .
*
* @ access public
* @ param string $message
* @ return void
2011-12-09 21:55:49 +00:00
*/
2012-12-14 21:19:40 +00:00
public function add_message ( $message ) {
2012-08-14 14:13:08 +00:00
$this -> messages [] = apply_filters ( 'woocommerce_add_message' , $message );
}
2012-08-07 08:38:08 +00:00
2012-08-14 14:13:08 +00:00
/**
* Clear messages and errors from the session data .
*
* @ access public
* @ return void
*/
2012-12-14 21:19:40 +00:00
public function clear_messages () {
2011-12-09 21:55:49 +00:00
$this -> errors = $this -> messages = array ();
2012-09-07 17:26:13 +00:00
unset ( $this -> session -> errors , $this -> session -> messages );
2011-12-09 21:55:49 +00:00
}
2012-08-07 08:38:08 +00:00
2012-08-14 14:13:08 +00:00
2011-12-09 21:55:49 +00:00
/**
2012-08-14 14:13:08 +00:00
* error_count function .
*
* @ access public
* @ return int
2011-12-09 21:55:49 +00:00
*/
2012-12-14 21:19:40 +00:00
public function error_count () {
2012-08-14 14:13:08 +00:00
return sizeof ( $this -> errors );
}
2012-08-07 08:38:08 +00:00
2011-12-09 21:55:49 +00:00
/**
2012-08-14 14:13:08 +00:00
* Get message count .
*
* @ access public
* @ return int
2011-12-09 21:55:49 +00:00
*/
2012-12-14 21:19:40 +00:00
public function message_count () {
2012-08-14 14:13:08 +00:00
return sizeof ( $this -> messages );
}
2012-08-07 08:38:08 +00:00
2012-02-08 15:20:32 +00:00
/**
2012-08-14 14:13:08 +00:00
* Get errors .
*
* @ access public
* @ return array
2012-02-08 15:20:32 +00:00
*/
2012-12-14 21:19:40 +00:00
public function get_errors () {
2012-08-14 14:13:08 +00:00
return ( array ) $this -> errors ;
}
2012-08-07 08:38:08 +00:00
2012-02-08 15:20:32 +00:00
/**
2012-08-14 14:13:08 +00:00
* Get messages .
*
* @ access public
* @ return array
2012-02-08 15:20:32 +00:00
*/
2012-12-14 21:19:40 +00:00
public function get_messages () {
2012-08-14 14:13:08 +00:00
return ( array ) $this -> messages ;
}
2012-08-07 08:38:08 +00:00
2011-12-09 21:55:49 +00:00
/**
2012-08-14 14:13:08 +00:00
* Output the errors and messages .
*
* @ access public
* @ return void
2011-12-09 21:55:49 +00:00
*/
2012-12-14 21:19:40 +00:00
public function show_messages () {
2012-08-14 14:13:08 +00:00
woocommerce_show_messages ();
}
2012-08-07 08:38:08 +00:00
2012-01-27 18:31:30 +00:00
/**
2012-08-14 14:13:08 +00:00
* Set session data for messages .
*
* @ access public
* @ return void
2012-01-27 18:31:30 +00:00
*/
2012-12-14 21:19:40 +00:00
public function set_messages () {
2012-09-07 17:26:13 +00:00
$this -> session -> errors = $this -> errors ;
$this -> session -> messages = $this -> messages ;
2012-01-27 18:31:30 +00:00
}
2012-08-07 08:38:08 +00:00
2012-08-14 14:13:08 +00:00
2011-12-09 21:55:49 +00:00
/**
2012-08-14 14:13:08 +00:00
* Redirection hook which stores messages into session data .
*
* @ access public
* @ param mixed $location
* @ param mixed $status
* @ return string
2011-12-09 21:55:49 +00:00
*/
2012-12-14 21:19:40 +00:00
public function redirect ( $location , $status ) {
2012-01-27 18:31:30 +00:00
$this -> set_messages ();
2012-08-07 08:38:08 +00:00
2012-03-20 13:22:35 +00:00
return apply_filters ( 'woocommerce_redirect' , $location );
2011-12-09 21:55:49 +00:00
}
2012-08-07 08:38:08 +00:00
2011-12-09 21:55:49 +00:00
/** Attribute Helpers ****************************************************************/
2012-08-14 14:13:08 +00:00
/**
* Get attribute taxonomies .
*
* @ access public
* @ return object
2011-12-09 21:55:49 +00:00
*/
2012-12-14 21:19:40 +00:00
public function get_attribute_taxonomies () {
2012-12-19 20:42:25 +00:00
$transient_name = 'wc_attribute_taxonomies' ;
if ( false === ( $attribute_taxonomies = get_transient ( $transient_name ) ) ) {
global $wpdb ;
$attribute_taxonomies = $wpdb -> get_results ( " SELECT * FROM " . $wpdb -> prefix . " woocommerce_attribute_taxonomies " );
set_transient ( $transient_name , $attribute_taxonomies );
}
return apply_filters ( 'woocommerce_attribute_taxonomies' , $attribute_taxonomies );
2011-12-09 21:55:49 +00:00
}
2012-08-07 08:38:08 +00:00
2012-08-14 14:13:08 +00:00
/**
* Get a product attributes name .
*
* @ access public
* @ param mixed $name
* @ return string
2011-12-09 21:55:49 +00:00
*/
2012-12-14 21:19:40 +00:00
public function attribute_taxonomy_name ( $name ) {
2012-12-05 15:01:29 +00:00
return 'pa_' . woocommerce_sanitize_taxonomy_name ( $name );
2011-12-09 21:55:49 +00:00
}
2012-08-07 08:38:08 +00:00
2012-08-14 14:13:08 +00:00
2011-12-09 21:55:49 +00:00
/**
2012-08-14 14:13:08 +00:00
* Get a product attributes label .
*
* @ access public
* @ param mixed $name
* @ return string
2011-12-09 21:55:49 +00:00
*/
2012-12-14 21:19:40 +00:00
public function attribute_label ( $name ) {
2011-12-09 21:55:49 +00:00
global $wpdb ;
2012-08-07 08:38:08 +00:00
2012-03-20 13:22:35 +00:00
if ( strstr ( $name , 'pa_' ) ) {
2012-12-05 15:01:29 +00:00
$name = woocommerce_sanitize_taxonomy_name ( str_replace ( 'pa_' , '' , $name ) );
2011-12-09 21:55:49 +00:00
2012-03-23 21:06:49 +00:00
$label = $wpdb -> get_var ( $wpdb -> prepare ( " SELECT attribute_label FROM " . $wpdb -> prefix . " woocommerce_attribute_taxonomies WHERE attribute_name = %s; " , $name ) );
2012-08-07 08:38:08 +00:00
2012-12-05 15:01:29 +00:00
if ( ! $label )
$label = ucfirst ( $name );
2012-03-20 13:22:35 +00:00
} else {
2012-03-21 14:26:53 +00:00
$label = $name ;
2012-03-20 13:22:35 +00:00
}
2012-03-21 14:26:53 +00:00
2012-03-23 21:06:49 +00:00
return apply_filters ( 'woocommerce_attribute_label' , $label , $name );
2011-12-09 21:55:49 +00:00
}
2012-11-13 23:22:53 +00:00
2012-10-09 14:57:02 +00:00
/**
* Get a product attributes orderby setting .
*
* @ access public
* @ param mixed $name
* @ return string
*/
2012-12-14 21:19:40 +00:00
public function attribute_orderby ( $name ) {
2012-10-09 14:57:02 +00:00
global $wpdb ;
$name = str_replace ( 'pa_' , '' , sanitize_title ( $name ) );
$orderby = $wpdb -> get_var ( $wpdb -> prepare ( " SELECT attribute_orderby FROM " . $wpdb -> prefix . " woocommerce_attribute_taxonomies WHERE attribute_name = %s; " , $name ) );
return apply_filters ( 'woocommerce_attribute_orderby' , $orderby , $name );
}
2012-08-07 08:38:08 +00:00
2012-08-14 14:13:08 +00:00
2012-03-05 14:43:55 +00:00
/**
2012-08-14 14:13:08 +00:00
* Get an array of product attribute taxonomies .
*
* @ access public
* @ return array
2012-03-05 14:43:55 +00:00
*/
2012-12-14 21:19:40 +00:00
public function get_attribute_taxonomy_names () {
2012-03-05 14:43:55 +00:00
$taxonomy_names = array ();
2012-08-07 08:38:08 +00:00
$attribute_taxonomies = $this -> get_attribute_taxonomies ();
2012-03-05 14:43:55 +00:00
if ( $attribute_taxonomies ) {
2012-03-20 13:22:35 +00:00
foreach ( $attribute_taxonomies as $tax ) {
2012-12-05 15:01:29 +00:00
$taxonomy_names [] = $this -> attribute_taxonomy_name ( $tax -> attribute_name );
2012-03-05 14:43:55 +00:00
}
}
return $taxonomy_names ;
}
2012-08-07 08:38:08 +00:00
2011-12-09 21:55:49 +00:00
/** Coupon Helpers ********************************************************/
2012-08-07 08:38:08 +00:00
2011-12-09 21:55:49 +00:00
/**
2012-08-14 14:13:08 +00:00
* Get coupon types .
*
* @ access public
* @ return array
2011-12-09 21:55:49 +00:00
*/
2012-12-14 21:19:40 +00:00
public function get_coupon_discount_types () {
2012-03-20 13:22:35 +00:00
if ( ! isset ( $this -> coupon_discount_types ) ) {
$this -> coupon_discount_types = apply_filters ( 'woocommerce_coupon_discount_types' , array (
2012-10-16 09:45:33 +00:00
'fixed_cart' => __ ( 'Cart Discount' , 'woocommerce' ),
'percent' => __ ( 'Cart % Discount' , 'woocommerce' ),
'fixed_product' => __ ( 'Product Discount' , 'woocommerce' ),
'percent_product' => __ ( 'Product % Discount' , 'woocommerce' )
2012-03-20 13:22:35 +00:00
) );
}
2011-12-09 21:55:49 +00:00
return $this -> coupon_discount_types ;
}
2012-08-07 08:38:08 +00:00
2012-08-14 14:13:08 +00:00
2011-12-09 21:55:49 +00:00
/**
2012-08-14 14:13:08 +00:00
* Get a coupon type ' s name .
*
* @ access public
* @ param string $type ( default : '' )
* @ return string
2011-12-09 21:55:49 +00:00
*/
2012-12-14 21:19:40 +00:00
public function get_coupon_discount_type ( $type = '' ) {
2011-12-09 21:55:49 +00:00
$types = ( array ) $this -> get_coupon_discount_types ();
2012-03-20 13:22:35 +00:00
if ( isset ( $types [ $type ] ) ) return $types [ $type ];
2011-12-09 21:55:49 +00:00
}
2012-08-07 08:38:08 +00:00
2011-12-09 19:55:09 +00:00
/** Nonces ****************************************************************/
2012-08-07 08:38:08 +00:00
2011-12-09 19:55:09 +00:00
/**
2012-08-14 14:13:08 +00:00
* Return a nonce field .
*
* @ access public
* @ param mixed $action
* @ param bool $referer ( default : true )
* @ param bool $echo ( default : true )
* @ return void
2011-12-09 19:55:09 +00:00
*/
2012-12-14 21:19:40 +00:00
public function nonce_field ( $action , $referer = true , $echo = true ) {
2012-08-14 14:13:08 +00:00
return wp_nonce_field ( 'woocommerce-' . $action , '_n' , $referer , $echo );
}
2012-08-07 08:38:08 +00:00
2011-12-09 19:55:09 +00:00
/**
2012-08-14 14:13:08 +00:00
* Return a url with a nonce appended .
*
* @ access public
* @ param mixed $action
* @ param string $url ( default : '' )
* @ return string
2011-12-09 19:55:09 +00:00
*/
2012-12-14 21:19:40 +00:00
public function nonce_url ( $action , $url = '' ) {
2012-08-14 14:13:08 +00:00
return add_query_arg ( '_n' , wp_create_nonce ( 'woocommerce-' . $action ), $url );
}
2012-08-07 08:38:08 +00:00
2011-12-09 19:55:09 +00:00
/**
2012-08-14 14:13:08 +00:00
* Check a nonce and sets woocommerce error in case it is invalid .
2012-08-07 08:38:08 +00:00
*
2012-08-14 14:13:08 +00:00
* To fail silently , set the error_message to an empty string
2012-08-07 08:38:08 +00:00
*
2012-08-14 14:13:08 +00:00
* @ access public
* @ param string $name the nonce name
* @ param string $action then nonce action
* @ param string $method the http request method _POST , _GET or _REQUEST
* @ param string $error_message custom error message , or false for default message , or an empty string to fail silently
* @ return bool
2011-12-09 19:55:09 +00:00
*/
2012-12-14 21:19:40 +00:00
public function verify_nonce ( $action , $method = '_POST' , $error_message = false ) {
2012-08-07 08:38:08 +00:00
2011-12-09 19:55:09 +00:00
$name = '_n' ;
$action = 'woocommerce-' . $action ;
2012-08-07 08:38:08 +00:00
2012-10-16 09:45:33 +00:00
if ( $error_message === false ) $error_message = __ ( 'Action failed. Please refresh the page and retry.' , 'woocommerce' );
2012-08-07 08:38:08 +00:00
2012-03-20 13:22:35 +00:00
if ( ! in_array ( $method , array ( '_GET' , '_POST' , '_REQUEST' ) ) ) $method = '_POST' ;
2012-08-07 08:38:08 +00:00
2012-03-20 13:22:35 +00:00
if ( isset ( $_REQUEST [ $name ] ) && wp_verify_nonce ( $_REQUEST [ $name ], $action ) ) return true ;
2012-08-07 08:38:08 +00:00
2012-03-20 13:22:35 +00:00
if ( $error_message ) $this -> add_error ( $error_message );
2012-08-07 08:38:08 +00:00
2011-12-09 19:55:09 +00:00
return false ;
}
2012-08-07 08:38:08 +00:00
2012-04-11 20:07:46 +00:00
/** Shortcode Helpers *********************************************************/
2012-08-07 08:38:08 +00:00
2011-12-09 19:55:09 +00:00
/**
2012-04-11 20:07:46 +00:00
* Shortcode Wrapper
2012-08-14 14:13:08 +00:00
*
* @ access public
* @ param mixed $function
* @ param array $atts ( default : array ())
* @ return string
2011-12-09 19:55:09 +00:00
*/
2012-12-14 21:19:40 +00:00
public function shortcode_wrapper (
2012-11-13 23:22:53 +00:00
$function ,
2012-11-13 23:39:52 +00:00
$atts = array (),
2012-11-13 23:22:53 +00:00
$wrapper = array (
2012-11-15 17:46:24 +00:00
'class' => 'woocommerce' ,
2012-11-13 23:22:53 +00:00
'before' => null ,
'after' => null
)
){
2011-12-09 19:55:09 +00:00
ob_start ();
2012-11-13 23:22:53 +00:00
2012-11-15 17:46:24 +00:00
$before = empty ( $wrapper [ 'before' ] ) ? '<div class="' . $wrapper [ 'class' ] . '">' : $wrapper [ 'before' ];
$after = empty ( $wrapper [ 'after' ] ) ? '</div>' : $wrapper [ 'after' ];
2012-11-27 16:22:47 +00:00
2012-11-15 17:46:24 +00:00
echo $before ;
call_user_func ( $function , $atts );
echo $after ;
2012-11-13 23:22:53 +00:00
2012-11-15 17:46:24 +00:00
return ob_get_clean ();
2011-12-09 19:55:09 +00:00
}
2012-04-11 20:07:46 +00:00
/** Cache Helpers *********************************************************/
2012-02-24 21:05:15 +00:00
/**
* Sets a constant preventing some caching plugins from caching a page . Used on dynamic pages
2012-08-14 14:13:08 +00:00
*
* @ access public
* @ return void
2012-02-24 21:05:15 +00:00
*/
2012-12-14 21:19:40 +00:00
public function nocache () {
2012-03-20 13:22:35 +00:00
if ( ! defined ( 'DONOTCACHEPAGE' ) ) define ( " DONOTCACHEPAGE " , " true " ); // WP Super Cache constant
2012-02-24 21:05:15 +00:00
}
2012-08-07 08:38:08 +00:00
2012-08-14 14:13:08 +00:00
2012-02-24 21:05:15 +00:00
/**
* Sets a cookie when the cart has something in it . Can be used by hosts to prevent caching if set .
2012-08-14 14:13:08 +00:00
*
* @ access public
* @ param mixed $set
* @ return void
2012-02-24 21:05:15 +00:00
*/
2012-12-14 21:19:40 +00:00
public function cart_has_contents_cookie ( $set ) {
2012-03-20 13:22:35 +00:00
if ( ! headers_sent () ) {
2012-08-07 08:38:08 +00:00
if ( $set )
2012-03-20 13:22:35 +00:00
setcookie ( " woocommerce_items_in_cart " , " 1 " , 0 , COOKIEPATH , COOKIE_DOMAIN , false );
2012-08-07 08:38:08 +00:00
else
2012-03-20 13:22:35 +00:00
setcookie ( " woocommerce_items_in_cart " , " 0 " , time () - 3600 , COOKIEPATH , COOKIE_DOMAIN , false );
2012-02-24 21:05:15 +00:00
}
}
2012-07-25 17:59:12 +00:00
/**
* mfunc_wrapper function .
*
2012-08-07 08:38:08 +00:00
* Wraps a function in mfunc to keep it dynamic .
2012-08-14 14:13:08 +00:00
*
2012-07-25 17:59:12 +00:00
* If running WP Super Cache this checks for late_init ( because functions calling this require WP to be loaded )
2012-08-07 08:38:08 +00:00
*
2012-07-25 17:59:12 +00:00
* @ access public
* @ param mixed $function
* @ return void
*/
2012-12-14 21:19:40 +00:00
public function mfunc_wrapper ( $mfunction , $function , $args ) {
2012-07-25 17:59:12 +00:00
global $wp_super_cache_late_init ;
2012-08-07 08:38:08 +00:00
2012-07-25 17:59:12 +00:00
if ( is_null ( $wp_super_cache_late_init ) || $wp_super_cache_late_init == 1 ) {
echo '<!--mfunc ' . $mfunction . ' -->' ;
$function ( $args );
echo '<!--/mfunc-->' ;
} else {
$function ( $args );
}
}
2012-08-07 08:38:08 +00:00
2011-12-09 19:55:09 +00:00
/** Transients ************************************************************/
2012-08-07 08:38:08 +00:00
2011-12-09 19:55:09 +00:00
/**
2012-08-14 14:13:08 +00:00
* Clear all transients cache for product data .
*
* @ access public
* @ param int $post_id ( default : 0 )
* @ return void
2011-12-09 19:55:09 +00:00
*/
2012-12-14 21:19:40 +00:00
public function clear_product_transients ( $post_id = 0 ) {
2011-12-09 19:55:09 +00:00
global $wpdb ;
2012-11-13 23:22:53 +00:00
2012-10-11 09:22:03 +00:00
$post_id = absint ( $post_id );
2012-11-13 23:22:53 +00:00
2012-10-11 09:22:03 +00:00
$wpdb -> show_errors ();
2012-11-13 23:22:53 +00:00
2012-10-11 09:22:03 +00:00
// Clear core transients
2012-11-13 23:22:53 +00:00
$transients_to_clear = array (
'wc_products_onsale' ,
'wc_hidden_product_ids' ,
2012-12-19 20:42:25 +00:00
'wc_hidden_product_ids_search' ,
'wc_attribute_taxonomies'
2012-10-11 09:22:03 +00:00
);
2012-11-13 23:22:53 +00:00
2012-10-11 09:22:03 +00:00
foreach ( $transients_to_clear as $transient ) {
delete_transient ( 'wc_products_onsale' );
$wpdb -> query ( $wpdb -> prepare ( " DELETE FROM ` $wpdb->options ` WHERE `option_name` = %s " , '_transient_' . $transient ) );
}
2012-11-13 23:22:53 +00:00
2012-10-11 09:22:03 +00:00
// Clear transients for which we don't have the name
$wpdb -> query ( " DELETE FROM ` $wpdb->options ` WHERE `option_name` LIKE ('_transient_wc_uf_pid_%') " );
$wpdb -> query ( " DELETE FROM ` $wpdb->options ` WHERE `option_name` LIKE ('_transient_wc_ln_count_%') " );
$wpdb -> query ( " DELETE FROM ` $wpdb->options ` WHERE `option_name` LIKE ('_transient_wc_ship_%') " );
2012-11-13 23:22:53 +00:00
2012-10-11 09:22:03 +00:00
// Clear product specific transients
2012-11-13 23:22:53 +00:00
$post_transients_to_clear = array (
'wc_product_children_ids_' ,
'wc_product_total_stock_' ,
2012-12-21 08:44:10 +00:00
'wc_average_rating_'
2012-10-11 09:22:03 +00:00
);
2012-11-13 23:22:53 +00:00
2012-10-11 09:22:03 +00:00
if ( $post_id > 0 ) {
2012-11-13 23:22:53 +00:00
2012-10-11 09:22:03 +00:00
foreach ( $post_transients_to_clear as $transient ) {
delete_transient ( $transient . $post_id );
$wpdb -> query ( $wpdb -> prepare ( " DELETE FROM ` $wpdb->options ` WHERE `option_name` = %s " , '_transient_' . $transient . $post_id ) );
}
2012-11-13 23:22:53 +00:00
2012-10-11 09:22:03 +00:00
clean_post_cache ( $post_id );
2012-11-13 23:22:53 +00:00
2012-03-20 13:22:35 +00:00
} else {
2012-11-13 23:22:53 +00:00
2012-10-11 09:22:03 +00:00
foreach ( $post_transients_to_clear as $transient ) {
$wpdb -> query ( $wpdb -> prepare ( " DELETE FROM ` $wpdb->options ` WHERE `option_name` = %s " , '_transient_' . $transient . '%' ) );
}
2012-11-13 23:22:53 +00:00
2012-03-20 13:22:35 +00:00
}
2011-12-09 19:55:09 +00:00
}
2012-08-07 08:38:08 +00:00
2011-12-09 19:55:09 +00:00
/** Body Classes **********************************************************/
2012-08-07 08:38:08 +00:00
2012-08-14 14:13:08 +00:00
/**
* Add a class to the webpage body .
*
* @ access public
* @ param string $class
* @ return void
*/
2012-12-14 21:19:40 +00:00
public function add_body_class ( $class ) {
2012-04-19 07:14:48 +00:00
$this -> _body_classes [] = sanitize_html_class ( strtolower ( $class ) );
2011-12-09 19:55:09 +00:00
}
2012-08-07 08:38:08 +00:00
2012-08-14 14:13:08 +00:00
/**
* Output classes on the body tag .
*
* @ access public
* @ param mixed $classes
* @ return array
*/
2012-12-14 21:19:40 +00:00
public function output_body_class ( $classes ) {
2012-03-20 13:22:35 +00:00
if ( sizeof ( $this -> _body_classes ) > 0 ) $classes = array_merge ( $classes , $this -> _body_classes );
2012-08-07 08:38:08 +00:00
2012-03-20 13:22:35 +00:00
if ( is_singular ( 'product' ) ) {
$key = array_search ( 'singular' , $classes );
if ( $key !== false ) unset ( $classes [ $key ] );
}
2012-08-07 08:38:08 +00:00
2011-12-09 19:55:09 +00:00
return $classes ;
}
2012-08-07 08:38:08 +00:00
2011-12-09 19:55:09 +00:00
/** Inline JavaScript Helper **********************************************/
2012-08-07 08:38:08 +00:00
2012-08-14 14:13:08 +00:00
/**
* Add some JavaScript inline to be output in the footer .
*
* @ access public
* @ param string $code
* @ return void
*/
2012-12-14 21:19:40 +00:00
public function add_inline_js ( $code ) {
2012-10-17 15:42:57 +00:00
$this -> _inline_js .= " \n " . $code . " \n " ;
2011-12-09 19:55:09 +00:00
}
2012-08-07 08:38:08 +00:00
2012-08-14 14:13:08 +00:00
/**
* Output any queued inline JS .
*
* @ access public
* @ return void
*/
2012-12-14 21:19:40 +00:00
public function output_inline_js () {
2012-08-14 14:13:08 +00:00
if ( $this -> _inline_js ) {
2012-08-07 08:38:08 +00:00
2011-12-09 19:55:09 +00:00
echo " <!-- WooCommerce JavaScript--> \n <script type= \" text/javascript \" > \n jQuery(document).ready(function( $ ) { " ;
2012-11-13 23:22:53 +00:00
2012-10-17 15:42:57 +00:00
// Sanitize
$this -> _inline_js = wp_check_invalid_utf8 ( $this -> _inline_js );
2012-10-23 17:21:11 +00:00
$this -> _inline_js = preg_replace ( '/&#(x)?0*(?(1)27|39);?/i' , " ' " , $this -> _inline_js );
2012-10-17 15:42:57 +00:00
$this -> _inline_js = str_replace ( " \r " , '' , $this -> _inline_js );
2012-11-13 23:22:53 +00:00
2012-10-17 15:42:57 +00:00
// Output
2011-12-09 19:55:09 +00:00
echo $this -> _inline_js ;
2012-08-07 08:38:08 +00:00
2011-12-09 19:55:09 +00:00
echo " }); \n </script> \n " ;
2012-08-07 08:38:08 +00:00
2011-12-15 16:36:11 +00:00
$this -> _inline_js = '' ;
2012-03-20 13:22:35 +00:00
}
2011-12-09 19:55:09 +00:00
}
2011-12-09 17:01:56 +00:00
}
2011-11-06 15:45:22 +00:00
2011-12-09 17:01:56 +00:00
/**
* Init woocommerce class
*/
2012-01-21 09:01:41 +00:00
$GLOBALS [ 'woocommerce' ] = new Woocommerce ();
2011-11-06 15:45:22 +00:00
2012-11-13 23:22:53 +00:00
} // class_exists check