get_image_size('shop_thumbnail_image_width'), $woocommerce->get_image_size('shop_thumbnail_image_height'), $shop_thumbnail_crop ); add_image_size( 'shop_catalog', $woocommerce->get_image_size('shop_catalog_image_width'), $woocommerce->get_image_size('shop_catalog_image_height'), $shop_catalog_crop ); add_image_size( 'shop_single', $woocommerce->get_image_size('shop_single_image_width'), $woocommerce->get_image_size('shop_single_image_height'), $shop_single_crop ); $suffix = defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ? '' : '.min'; if (!is_admin()) : // Optional front end css 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' : $woocommerce->plugin_url() . '/assets/css/woocommerce.css'; wp_register_style('woocommerce_frontend_styles', $css ); wp_enqueue_style( 'woocommerce_frontend_styles' ); endif; if (get_option('woocommerce_enable_lightbox')=='yes') wp_enqueue_style( 'woocommerce_fancybox_styles', $woocommerce->plugin_url() . '/assets/css/fancybox'.$suffix.'.css' ); endif; } /** * Init WooCommerce Tempalte Functions * * This makes them pluggable by plugins and themes **/ add_action('init', 'include_template_functions', 99); function include_template_functions() { include_once( 'woocommerce_template_functions.php' ); } /** * Init WooCommerce Thumbnails after theme setup **/ add_action('after_setup_theme', 'woocommerce_init_post_thumbnails'); function woocommerce_init_post_thumbnails() { // Post thumbnail support if ( !current_theme_supports( 'post-thumbnails' ) ) : add_theme_support( 'post-thumbnails' ); remove_post_type_support( 'post', 'thumbnail' ); remove_post_type_support( 'page', 'thumbnail' ); else : add_post_type_support( 'product', 'thumbnail' ); endif; } /** * Output generator to aid debugging **/ add_action('wp_head', 'woocommerce_generator'); function woocommerce_generator() { echo "\n\n" . '' . "\n" . '' . "\n\n"; } /** * Set up Roles & Capabilities **/ add_action('init', 'woocommerce_init_roles'); 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, 'read_private_pages' => true, 'read_private_posts' => true, 'edit_posts' => true, 'edit_pages' => true, 'edit_published_posts' => true, 'edit_published_pages' => true, 'edit_private_pages' => true, 'edit_private_posts' => true, 'edit_others_posts' => true, 'edit_others_pages' => true, 'publish_posts' => true, 'publish_pages' => true, 'delete_posts' => true, 'delete_pages' => true, 'delete_private_pages' => true, 'delete_private_posts' => true, 'delete_published_pages' => true, 'delete_published_posts' => true, 'delete_others_posts' => true, 'delete_others_pages' => true, 'manage_categories' => true, 'manage_links' => true, 'moderate_comments' => true, 'unfiltered_html' => true, 'upload_files' => true, 'export' => true, 'import' => true, 'manage_woocommerce' => true )); // Main Shop capabilities for admin $wp_roles->add_cap( 'administrator', 'manage_woocommerce' ); endif; } /** * Enqueue frontend scripts **/ function woocommerce_frontend_scripts() { global $woocommerce; $suffix = defined('SCRIPT_DEBUG') && SCRIPT_DEBUG ? '' : '.min'; wp_register_script( 'woocommerce', $woocommerce->plugin_url() . '/assets/js/woocommerce'.$suffix.'.js', 'jquery', '1.0' ); wp_register_script( 'woocommerce_plugins', $woocommerce->plugin_url() . '/assets/js/woocommerce_plugins'.$suffix.'.js', 'jquery', '1.0' ); wp_register_script( 'fancybox', $woocommerce->plugin_url() . '/assets/js/fancybox'.$suffix.'.js', 'jquery', '1.0' ); wp_enqueue_script('jquery'); wp_enqueue_script('woocommerce_plugins'); wp_enqueue_script('woocommerce'); if (get_option('woocommerce_enable_lightbox')=='yes') wp_enqueue_script('fancybox'); /* Script variables */ $states = json_encode( $woocommerce->countries->states ); $states = (mb_detect_encoding($states, "UTF-8") == "UTF-8") ? $states : utf8_encode($states); $woocommerce_params = array( 'currency_symbol' => get_woocommerce_currency_symbol(), 'currency_pos' => get_option('woocommerce_currency_pos'), 'countries' => $states, 'select_state_text' => __('Select a state…', 'woothemes'), 'state_text' => __('state', 'woothemes'), 'plugin_url' => $woocommerce->plugin_url(), 'ajax_url' => (!is_ssl()) ? str_replace('https', 'http', admin_url('admin-ajax.php')) : 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"), 'update_shipping_method_nonce' => wp_create_nonce("update-shipping-method"), 'option_guest_checkout' => get_option('woocommerce_enable_guest_checkout'), 'checkout_url' => admin_url('admin-ajax.php?action=woocommerce-checkout'), 'option_ajax_add_to_cart' => get_option('woocommerce_enable_ajax_add_to_cart') ); if (isset($_SESSION['min_price'])) $woocommerce_params['min_price'] = $_SESSION['min_price']; if (isset($_SESSION['max_price'])) $woocommerce_params['max_price'] = $_SESSION['max_price']; if ( is_page(get_option('woocommerce_checkout_page_id')) ) : $woocommerce_params['is_checkout'] = 1; else : $woocommerce_params['is_checkout'] = 0; endif; if (is_page(get_option('woocommerce_pay_page_id'))) : $woocommerce_params['is_pay_page'] = 1; else : $woocommerce_params['is_pay_page'] = 0; endif; if ( is_cart() ) : $woocommerce_params['is_cart'] = 1; else : $woocommerce_params['is_cart'] = 0; endif; wp_localize_script( 'woocommerce', 'woocommerce_params', $woocommerce_params ); } add_action('template_redirect', 'woocommerce_frontend_scripts'); /** * WooCommerce conditionals **/ function is_woocommerce() { // Returns true if on a page which uses WooCommerce templates (cart and checkout are standard pages with shortcodes and thus are not included) if (is_shop() || is_product_category() || is_product_tag() || is_product()) return true; else return false; } if (!function_exists('is_shop')) { function is_shop() { if (is_post_type_archive( 'product' ) || is_page(get_option('woocommerce_shop_page_id'))) return true; else return false; } } if (!function_exists('is_product_category')) { function is_product_category() { return is_tax( 'product_cat' ); } } if (!function_exists('is_product_tag')) { function is_product_tag() { return is_tax( 'product_tag' ); } } if (!function_exists('is_product')) { function is_product() { return is_singular( array('product') ); } } if (!function_exists('is_cart')) { function is_cart() { return is_page(get_option('woocommerce_cart_page_id')); } } if (!function_exists('is_checkout')) { function is_checkout() { if (is_page(get_option('woocommerce_checkout_page_id')) || is_page(get_option('woocommerce_pay_page_id'))) return true; else return false; } } if (!function_exists('is_account_page')) { function is_account_page() { if ( is_page(get_option('woocommerce_myaccount_page_id')) || is_page(get_option('woocommerce_edit_address_page_id')) || is_page(get_option('woocommerce_view_order_page_id')) || is_page(get_option('woocommerce_change_password_page_id')) ) return true; else return false; return is_page(get_option('woocommerce_myaccount_page_id')); } } if (!function_exists('is_ajax')) { function is_ajax() { if ( isset($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest' ) return true; else return false; } } /** * Force SSL (if enabled) **/ if (!is_admin() && get_option('woocommerce_force_ssl_checkout')=='yes') add_action( 'wp', 'woocommerce_force_ssl'); function woocommerce_force_ssl() { if (is_checkout() && !is_ssl()) : wp_safe_redirect( str_replace('http:', 'https:', get_permalink(get_option('woocommerce_checkout_page_id'))), 301 ); exit; // Break out of SSL if we leave the checkout (anywhere but thanks page) elseif (get_option('woocommerce_unforce_ssl_checkout')=='yes' && is_ssl() && $_SERVER['REQUEST_URI'] && !is_checkout() && !is_page(get_option('woocommerce_thanks_page_id')) && !is_ajax()) : wp_safe_redirect( str_replace('https:', 'http:', home_url($_SERVER['REQUEST_URI']) ) ); exit; endif; } /** * Force SSL for images **/ 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'); 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; } /** * Force SSL for stylsheet/script urls etc. Modified code by Chris Black (http://cjbonline.org) **/ add_filter('option_siteurl', 'woocommerce_force_ssl_urls'); add_filter('option_home', 'woocommerce_force_ssl_urls'); add_filter('option_url', 'woocommerce_force_ssl_urls'); add_filter('option_wpurl', 'woocommerce_force_ssl_urls'); add_filter('option_stylesheet_url', 'woocommerce_force_ssl_urls'); add_filter('option_template_url', 'woocommerce_force_ssl_urls'); add_filter('script_loader_src', 'woocommerce_force_ssl_urls'); add_filter('style_loader_src', 'woocommerce_force_ssl_urls'); function woocommerce_force_ssl_urls( $url ) { if (is_ssl()) : $url = str_replace('http:', 'https:', $url); endif; return $url; } /** * IIS compatability fix/fallback **/ if (!isset($_SERVER['REQUEST_URI'])) { $_SERVER['REQUEST_URI'] = substr($_SERVER['PHP_SELF'],1 ); if (isset($_SERVER['QUERY_STRING'])) { $_SERVER['REQUEST_URI'].='?'.$_SERVER['QUERY_STRING']; } } /** * Fix 'insert into post' buttons for images **/ add_filter('get_media_item_args', 'woocommerce_allow_img_insertion'); function woocommerce_allow_img_insertion($vars) { $vars['send'] = true; // 'send' as in "Send to Editor" return($vars); } /** * 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 'TRY' : $currency_symbol = 'TL'; break; case 'NOK' : $currency_symbol = 'kr'; break; case 'ZAR' : $currency_symbol = 'R'; break; case 'CZK' : case 'DKK' : case 'HUF' : case 'ILS' : case 'MYR' : 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() ) { global $woocommerce; 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 .= ' '.$woocommerce->countries->ex_tax_or_vat().''; return $return; } /** * Clean variables **/ function woocommerce_clean( $var ) { return trim(strip_tags(stripslashes($var))); } /** * Rating field for comments **/ function woocommerce_add_comment_rating($comment_id) { if ( isset($_POST['rating']) ) : global $post; if (!$_POST['rating'] || $_POST['rating'] > 5 || $_POST['rating'] < 0) $_POST['rating'] = 5; add_comment_meta( $comment_id, 'rating', esc_attr($_POST['rating']), true ); delete_transient( esc_attr($post->ID) . '_woocommerce_average_rating' ); endif; } add_action( 'comment_post', 'woocommerce_add_comment_rating', 1 ); function woocommerce_check_comment_rating($comment_data) { global $woocommerce; // 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.',"woothemes") ); 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') : ?>

    :

    comment_post_ID ) should keep them safe since only admin and * shop managers can view orders anyway. * * The frontend view order pages get around this filter by using remove_filter('comments_clauses', 'woocommerce_exclude_order_comments'); **/ function woocommerce_exclude_order_comments( $clauses ) { global $wpdb, $typenow; if (is_admin() && $typenow=='shop_order') return $clauses; // Don't hide when viewing orders in admin $clauses['join'] = "LEFT JOIN $wpdb->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; } add_filter( 'comments_clauses', 'woocommerce_exclude_order_comments', 10, 1); /** * Exclude order comments from comments RSS **/ function woocommerce_exclude_order_comments_from_feed( $where ) { global $wpdb; if ($where) $where .= ' AND '; $where .= "$wpdb->posts.post_type NOT IN ('shop_order')"; return $where; } add_action( 'comment_feed_where', 'woocommerce_exclude_order_comments_from_feed' ); /** * readfile_chunked * * Reads file in chunks so big downloads are possible without changing PHP.INI - http://codeigniter.com/wiki/Download_helper_for_large_files/ * * @access public * @param string file * @param boolean return bytes of file * @return void */ if ( ! function_exists('readfile_chunked')) { function readfile_chunked($file, $retbytes=TRUE) { $chunksize = 1 * (1024 * 1024); $buffer = ''; $cnt = 0; $handle = fopen($file, 'r'); if ($handle === FALSE) return FALSE; while (!feof($handle)) : $buffer = fread($handle, $chunksize); echo $buffer; ob_flush(); flush(); if ($retbytes) $cnt += strlen($buffer); endwhile; $status = fclose($handle); if ($retbytes AND $status) return $cnt; return $status; } } /** * Cache **/ function woocommerce_prevent_sidebar_cache() { echo ''; } add_action('get_sidebar', 'woocommerce_prevent_sidebar_cache'); /** * Hex darker/lighter/contrast functions for colours **/ if (!function_exists('woocommerce_hex_darker')) { function woocommerce_hex_darker( $color, $factor = 30 ) { $color = str_replace('#', '', $color); $base['R'] = hexdec($color{0}.$color{1}); $base['G'] = hexdec($color{2}.$color{3}); $base['B'] = hexdec($color{4}.$color{5}); $color = '#'; foreach ($base as $k => $v) : $amount = $v / 100; $amount = round($amount * $factor); $new_decimal = $v - $amount; $new_hex_component = dechex($new_decimal); if(strlen($new_hex_component) < 2) : $new_hex_component = "0".$new_hex_component; endif; $color .= $new_hex_component; endforeach; return $color; } } if (!function_exists('woocommerce_hex_lighter')) { function woocommerce_hex_lighter( $color, $factor = 30 ) { $color = str_replace('#', '', $color); $base['R'] = hexdec($color{0}.$color{1}); $base['G'] = hexdec($color{2}.$color{3}); $base['B'] = hexdec($color{4}.$color{5}); $color = '#'; foreach ($base as $k => $v) : $amount = 255 - $v; $amount = $amount / 100; $amount = round($amount * $factor); $new_decimal = $v + $amount; $new_hex_component = dechex($new_decimal); if(strlen($new_hex_component) < 2) : $new_hex_component = "0".$new_hex_component; endif; $color .= $new_hex_component; endforeach; return $color; } } if (!function_exists('woocommerce_light_or_dark')) { function woocommerce_light_or_dark( $color, $dark = '#000000', $light = '#FFFFFF' ) { return (hexdec($color) > 0xffffff/2) ? $dark : $light; } } /** * Variation Formatting * * Gets a formatted version of variation data or item meta **/ function woocommerce_get_formatted_variation( $variation = '', $flat = false ) { global $woocommerce; if (is_array($variation)) : if (!$flat) $return = '
    '; else $return = ''; $variation_list = array(); foreach ($variation as $name => $value) : if (!$value) continue; // If this is a term slug, get the term's nice name if (taxonomy_exists(esc_attr(str_replace('attribute_', '', $name)))) : $term = get_term_by('slug', $value, esc_attr(str_replace('attribute_', '', $name))); if (!is_wp_error($term) && $term->name) : $value = $term->name; endif; else : $value = ucfirst($value); endif; if ($flat) : $variation_list[] = $woocommerce->attribute_label(str_replace('attribute_', '', $name)).': '.$value; else : $variation_list[] = '
    '.$woocommerce->attribute_label(str_replace('attribute_', '', $name)).':
    '.$value.'
    '; endif; endforeach; if ($flat) : $return .= implode(', ', $variation_list); else : $return .= implode('', $variation_list); endif; if (!$flat) $return .= '
    '; return $return; endif; }