get_woocommerce_currency_symbol(), 'countries' => json_encode(woocommerce_countries::$states), 'select_state_text' => __('Select a state…', 'woothemes'), 'state_text' => __('state', '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-">
    comment_ID, 'rating', true ); ?>
    comment_approved == '0') : ?>

    :

    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');