get_woocommerce_currency_symbol(),
'countries' => json_encode(woocommerce_countries::$states),
'select_state_text' => __('Select a state…', 'woothemes'),
'state_text' => __('state', 'woothemes'),
'variation_not_available_text' => __('This variation is not available.', 'woothemes'),
'plugin_url' => woocommerce::plugin_url(),
'ajax_url' => admin_url('admin-ajax.php'),
'get_variation_nonce' => wp_create_nonce("get-variation"),
'add_to_cart_nonce' => wp_create_nonce("add-to-cart"),
'update_order_review_nonce' => wp_create_nonce("update-order-review"),
'option_guest_checkout' => get_option('woocommerce_enable_guest_checkout'),
'checkout_url' => admin_url('admin-ajax.php?action=woocommerce-checkout')
);
if (isset($_SESSION['min_price'])) :
$params['min_price'] = $_SESSION['min_price'];
endif;
if (isset($_SESSION['max_price'])) :
$params['max_price'] = $_SESSION['max_price'];
endif;
if ( is_page(get_option('woocommerce_checkout_page_id')) || is_page(get_option('woocommerce_pay_page_id')) ) :
$params['is_checkout'] = 1;
else :
$params['is_checkout'] = 0;
endif;
wp_localize_script( 'woocommerce', 'params', $params );
}
add_action('template_redirect', 'woocommerce_frontend_scripts');
/**
* Demo Banner
*
* Adds a demo store banner to the site if enabled
**/
function woocommerce_demo_store() {
if (get_option('woocommerce_demo_store')=='yes') :
echo '
'.__('This is a demo store for testing purposes — no orders shall be fulfilled.', 'woothemes').'
';
endif;
}
/**
* Sharethis
*
* Adds social sharing code
**/
function woocommerce_sharethis() {
if (is_single() && get_option('woocommerce_sharethis')) :
if (is_ssl()) :
$sharethis = 'https://ws.sharethis.com/button/buttons.js';
else :
$sharethis = 'http://w.sharethis.com/button/buttons.js';
endif;
echo '';
endif;
}
/**
* WooCommerce conditionals
**/
function is_cart() {
if (is_page(get_option('woocommerce_cart_page_id'))) return true;
return false;
}
function is_checkout() {
if (
is_page(get_option('woocommerce_checkout_page_id'))
) return true;
return false;
}
if (!function_exists('is_ajax')) {
function is_ajax() {
if ( isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest' ) return true;
return false;
}
}
/**
* Force SSL (if enabled)
**/
function woocommerce_force_ssl() {
if (is_checkout() && !is_ssl()) :
wp_redirect( str_replace('http:', 'https:', get_permalink(get_option('woocommerce_checkout_page_id'))), 301 );
exit;
endif;
}
function woocommerce_force_ssl_images( $content ) {
if (is_ssl()) :
if (is_array($content)) :
$content = array_map('woocommerce_force_ssl_images', $content);
else :
$content = str_replace('http:', 'https:', $content);
endif;
endif;
return $content;
}
add_filter('post_thumbnail_html', 'woocommerce_force_ssl_images');
add_filter('widget_text', 'woocommerce_force_ssl_images');
add_filter('wp_get_attachment_url', 'woocommerce_force_ssl_images');
add_filter('wp_get_attachment_image_attributes', 'woocommerce_force_ssl_images');
add_filter('wp_get_attachment_url', 'woocommerce_force_ssl_images');
/**
* Currency
**/
function get_woocommerce_currency_symbol() {
$currency = get_option('woocommerce_currency');
$currency_symbol = '';
switch ($currency) :
case 'AUD' :
case 'BRL' :
case 'CAD' :
case 'MXN' :
case 'NZD' :
case 'HKD' :
case 'SGD' :
case 'USD' : $currency_symbol = '$'; break;
case 'EUR' : $currency_symbol = '€'; break;
case 'JPY' : $currency_symbol = '¥'; break;
case 'CZK' :
case 'DKK' :
case 'HUF' :
case 'ILS' :
case 'MYR' :
case 'NOK' :
case 'PHP' :
case 'PLN' :
case 'SEK' :
case 'CHF' :
case 'TWD' :
case 'THB' : $currency_symbol = $currency; break;
case 'GBP' :
default : $currency_symbol = '£'; break;
endswitch;
return apply_filters('woocommerce_currency_symbol', $currency_symbol, $currency);
}
/**
* Price Formatting
**/
function woocommerce_price( $price, $args = array() ) {
extract(shortcode_atts(array(
'ex_tax_label' => '0'
), $args));
$return = '';
$num_decimals = (int) get_option('woocommerce_price_num_decimals');
$currency_pos = get_option('woocommerce_currency_pos');
$currency_symbol = get_woocommerce_currency_symbol();
$price = number_format( (double) $price, $num_decimals, get_option('woocommerce_price_decimal_sep'), get_option('woocommerce_price_thousand_sep') );
switch ($currency_pos) :
case 'left' :
$return = $currency_symbol . $price;
break;
case 'right' :
$return = $price . $currency_symbol;
break;
case 'left_space' :
$return = $currency_symbol . ' ' . $price;
break;
case 'right_space' :
$return = $price . ' ' . $currency_symbol;
break;
endswitch;
if ($ex_tax_label && get_option('woocommerce_calc_taxes')=='yes') $return .= __(' (ex. tax)', 'woothemes');
return $return;
}
/**
* Variation Formatting
**/
function woocommerce_get_formatted_variation( $variation = '', $flat = false ) {
if ($variation && is_array($variation)) :
$return = '';
if (!$flat) :
$return = '';
endif;
$varation_list = array();
foreach ($variation as $name => $value) :
if ($flat) :
$varation_list[] = ucfirst(str_replace('tax_', '', $name)).': '.ucfirst($value);
else :
$varation_list[] = '- '.ucfirst(str_replace('tax_', '', $name)).':
- '.ucfirst($value).'
';
endif;
endforeach;
if ($flat) :
$return .= implode(', ', $varation_list);
else :
$return .= implode('', $varation_list);
endif;
if (!$flat) :
$return .= '
';
endif;
return $return;
endif;
}
/**
* Letter to number
**/
function woocommerce_let_to_num($v) {
$l = substr($v, -1);
$ret = substr($v, 0, -1);
switch(strtoupper($l)){
case 'P':
$ret *= 1024;
case 'T':
$ret *= 1024;
case 'G':
$ret *= 1024;
case 'M':
$ret *= 1024;
case 'K':
$ret *= 1024;
break;
}
return $ret;
}
/**
* Clean variables
**/
function woocommerce_clean( $var ) {
return strip_tags(stripslashes(trim($var)));
}
/**
* Rating field for comments
**/
function woocommerce_add_comment_rating($comment_id) {
if ( isset($_POST['rating']) ) :
if (!$_POST['rating'] || $_POST['rating'] > 5 || $_POST['rating'] < 0) $_POST['rating'] = 5;
add_comment_meta( $comment_id, 'rating', $_POST['rating'], true );
endif;
}
add_action( 'comment_post', 'woocommerce_add_comment_rating', 1 );
function woocommerce_check_comment_rating($comment_data) {
// If posting a comment (not trackback etc) and not logged in
if ( isset($_POST['rating']) && !woocommerce::verify_nonce('comment_rating') )
wp_die( __('You have taken too long. Please go back and refresh the page.', 'woothemes') );
elseif ( isset($_POST['rating']) && empty($_POST['rating']) && $comment_data['comment_type']== '' ) {
wp_die( __('Please rate the product.',"woocommerce") );
exit;
}
return $comment_data;
}
add_filter('preprocess_comment', 'woocommerce_check_comment_rating', 0);
/**
* Review comments template
**/
function woocommerce_comments($comment, $args, $depth) {
$GLOBALS['comment'] = $comment; global $post; ?>
id="li-comment-">
posts ON $wpdb->comments.comment_post_ID = $wpdb->posts.ID
";
if ($clauses['where']) $clauses['where'] .= ' AND ';
$clauses['where'] .= "
$wpdb->posts.post_type NOT IN ('shop_order')
";
return $clauses;
}
if (!is_admin()) add_filter('comments_clauses', 'woocommerce_exclude_order_comments');
/**
* Sync lowest price so grouped products can be sorted by price
**/
function woocommerce_grouped_price_sync( $parent_id ) {
$children_by_price = get_posts( array(
'post_parent' => $parent_id,
'orderby' => 'meta_value_num',
'order' => 'asc',
'meta_key' => 'price',
'posts_per_page' => 1,
'post_type' => 'product'
));
if ($children_by_price) :
$children_by_price = $children_by_price[0];
$child = $children_by_price->ID;
$low_price = get_post_meta($child, 'price', true);
update_post_meta( $parent_id, 'price', $low_price );
endif;
}
/**
* Cron Job - Update price if on sale
**/
function woocommerce_update_sale_prices() {
global $wpdb;
// On Sale Products
$on_sale = $wpdb->get_col("
SELECT post_id FROM $wpdb->postmeta
WHERE meta_key = 'sale_price_dates_from'
AND meta_value < ".strtotime('NOW')."
");
if ($on_sale) foreach ($on_sale as $product) :
$thispost = get_post($product);
$sale_price = get_post_meta($product, 'sale_price', true);
$price = get_post_meta($product, 'price', true);
if ($sale_price && $price!==$sale_price) update_post_meta($product, 'price', $sale_price);
if ($thispost->post_parent>0) woocommerce_grouped_price_sync( $thispost->post_parent );
endforeach;
// Expired Sales
$sale_expired = $wpdb->get_col("
SELECT post_id FROM $wpdb->postmeta
WHERE meta_key = 'sale_price_dates_to'
AND meta_value < ".strtotime('NOW')."
");
if ($sale_expired) foreach ($sale_expired as $product) :
$thispost = get_post($product);
$regular_price = get_post_meta($product, 'regular_price', true);
$price = get_post_meta($product, 'price', true);
if ($regular_price && $price!==$regular_price) update_post_meta($product, 'price', $regular_price);
// Sale has expired - clear the schedule boxes
update_post_meta($product, 'sale_price_dates_from', '');
update_post_meta($product, 'sale_price_dates_to', '');
if ($thispost->post_parent>0) woocommerce_grouped_price_sync( $thispost->post_parent );
endforeach;
}
function woocommerce_update_sale_prices_schedule_check(){
wp_schedule_event(time(), 'daily', 'woocommerce_update_sale_prices_schedule_check');
update_option('woocommerce_update_sale_prices', 'yes');
}
if (get_option('woocommerce_update_sale_prices')!='yes') woocommerce_update_sale_prices_schedule_check();
add_action('woocommerce_update_sale_prices_schedule_check', 'woocommerce_update_sale_prices');
/**
* Set up Roles & Capabilities
**/
function woocommerce_init_roles() {
global $wp_roles;
if (class_exists('WP_Roles')) if ( ! isset( $wp_roles ) ) $wp_roles = new WP_Roles();
if (is_object($wp_roles)) :
// Customer role
add_role('customer', __('Customer', 'woothemes'), array(
'read' => true,
'edit_posts' => false,
'delete_posts' => false
));
// Shop manager role
add_role('shop_manager', __('Shop Manager', 'woothemes'), array(
'read' => true,
'edit_posts' => true,
'delete_posts' => true,
));
// Main Shop capabilities
$wp_roles->add_cap( 'administrator', 'manage_woocommerce' );
$wp_roles->add_cap( 'shop_manager', 'manage_woocommerce' );
endif;
}
add_action('init', 'woocommerce_init_roles');
: