2011-08-10 17:11:11 +00:00
< ? php
/**
* WooCommerce Template Functions
2011-11-24 00:24:24 +00:00
*
2011-12-11 15:37:32 +00:00
* Functions used in the template files to output content - in most cases hooked in via the template actions . All functions are pluggable .
2011-08-10 17:11:11 +00:00
*
* @ package WooCommerce
* @ category Core
* @ author WooThemes
*/
2011-12-11 12:39:35 +00:00
/** Global ****************************************************************/
2011-08-10 17:11:11 +00:00
if ( ! function_exists ( 'woocommerce_output_content_wrapper' )) {
2011-11-24 00:24:24 +00:00
function woocommerce_output_content_wrapper () {
2011-12-12 11:35:54 +00:00
woocommerce_get_template ( 'shop/wrapper.php' , false );
2011-08-10 17:11:11 +00:00
}
}
if ( ! function_exists ( 'woocommerce_output_content_wrapper_end' )) {
2011-11-24 00:24:24 +00:00
function woocommerce_output_content_wrapper_end () {
2011-12-12 11:35:54 +00:00
woocommerce_get_template ( 'shop/wrapper-end.php' , false );
2011-08-10 17:11:11 +00:00
}
}
/**
* Sidebar
**/
if ( ! function_exists ( 'woocommerce_get_sidebar' )) {
2011-11-24 00:24:24 +00:00
function woocommerce_get_sidebar () {
2011-12-12 11:35:54 +00:00
woocommerce_get_template ( 'shop/sidebar.php' , false );
}
}
/**
* Prevent Cache
**/
if ( ! function_exists ( 'woocommerce_prevent_sidebar_cache' )) {
function woocommerce_prevent_sidebar_cache () {
echo '<!--mfunc get_sidebar() --><!--/mfunc-->' ;
2011-08-10 17:11:11 +00:00
}
}
2011-12-12 12:28:07 +00:00
/**
* Demo Banner
*
* Adds a demo store banner to the site if enabled
**/
if ( ! function_exists ( 'woocommerce_demo_store' )) {
function woocommerce_demo_store () {
if ( get_option ( 'woocommerce_demo_store' ) == 'no' ) return ;
echo apply_filters ( 'woocommerce_demo_store' , '<p class="demo_store">' . __ ( 'This is a demo store for testing purposes — no orders shall be fulfilled.' , 'woothemes' ) . '</p>' );
}
}
2011-12-11 01:10:24 +00:00
/** Loop ******************************************************************/
2011-08-10 17:11:11 +00:00
/**
* Products Loop
**/
if ( ! function_exists ( 'woocommerce_template_loop_add_to_cart' )) {
2011-12-11 14:40:25 +00:00
function woocommerce_template_loop_add_to_cart () {
2011-12-12 11:35:54 +00:00
woocommerce_get_template ( 'loop/add-to-cart.php' , false );
2011-08-10 17:11:11 +00:00
}
}
if ( ! function_exists ( 'woocommerce_template_loop_product_thumbnail' )) {
2011-12-11 14:40:25 +00:00
function woocommerce_template_loop_product_thumbnail () {
2011-08-10 17:11:11 +00:00
echo woocommerce_get_product_thumbnail ();
}
}
if ( ! function_exists ( 'woocommerce_template_loop_price' )) {
2011-12-11 14:40:25 +00:00
function woocommerce_template_loop_price () {
2011-12-11 23:16:34 +00:00
woocommerce_get_template ( 'loop/price.php' , false );
2011-08-10 17:11:11 +00:00
}
}
2011-12-11 14:40:25 +00:00
if ( ! function_exists ( 'woocommerce_show_product_loop_sale_flash' )) {
2011-12-11 15:20:34 +00:00
function woocommerce_show_product_loop_sale_flash () {
2011-12-11 14:40:25 +00:00
woocommerce_get_template ( 'loop/sale_flash.php' , false );
}
}
2011-08-10 17:11:11 +00:00
2011-12-12 11:35:54 +00:00
/**
* WooCommerce Product Thumbnail
**/
if ( ! function_exists ( 'woocommerce_get_product_thumbnail' )) {
function woocommerce_get_product_thumbnail ( $size = 'shop_catalog' , $placeholder_width = 0 , $placeholder_height = 0 ) {
global $post , $woocommerce ;
if ( ! $placeholder_width ) $placeholder_width = $woocommerce -> get_image_size ( 'shop_catalog_image_width' );
if ( ! $placeholder_height ) $placeholder_height = $woocommerce -> get_image_size ( 'shop_catalog_image_height' );
if ( has_post_thumbnail () ) return get_the_post_thumbnail ( $post -> ID , $size ); else return '<img src="' . $woocommerce -> plugin_url () . '/assets/images/placeholder.png" alt="Placeholder" width="' . $placeholder_width . '" height="' . $placeholder_height . '" />' ;
}
}
2011-08-10 17:11:11 +00:00
/**
* Check product visibility in loop
**/
if ( ! function_exists ( 'woocommerce_check_product_visibility' )) {
2011-12-11 14:40:25 +00:00
function woocommerce_check_product_visibility () {
2011-12-11 23:16:34 +00:00
global $post , $product ;
2011-12-11 15:20:34 +00:00
if ( ! $product -> is_visible ( true ) && $post -> post_parent > 0 ) : wp_safe_redirect ( get_permalink ( $post -> post_parent )); exit ; endif ;
if ( ! $product -> is_visible ( true )) : wp_safe_redirect ( home_url ()); exit ; endif ;
2011-08-10 17:11:11 +00:00
}
}
2011-12-11 01:10:24 +00:00
/**
* Pagination
**/
if ( ! function_exists ( 'woocommerce_pagination' )) {
function woocommerce_pagination () {
woocommerce_get_template ( 'loop/pagination.php' , false );
}
}
/**
* Sorting
**/
if ( ! function_exists ( 'woocommerce_catalog_ordering' )) {
function woocommerce_catalog_ordering () {
if ( ! isset ( $_SESSION [ 'orderby' ])) $_SESSION [ 'orderby' ] = apply_filters ( 'woocommerce_default_catalog_orderby' , 'title' );
woocommerce_get_template ( 'loop/sorting.php' , false );
}
}
2011-12-11 01:08:33 +00:00
/** Single Product ********************************************************/
2011-08-10 17:11:11 +00:00
/**
* Before Single Products Summary Div
**/
if ( ! function_exists ( 'woocommerce_show_product_images' )) {
function woocommerce_show_product_images () {
2011-12-11 01:08:33 +00:00
woocommerce_get_template ( 'single-product/product-image.php' , false );
2011-08-10 17:11:11 +00:00
}
}
if ( ! function_exists ( 'woocommerce_show_product_thumbnails' )) {
function woocommerce_show_product_thumbnails () {
2011-12-11 01:08:33 +00:00
woocommerce_get_template ( 'single-product/product-thumbnails.php' , false );
2011-08-10 17:11:11 +00:00
}
}
if ( ! function_exists ( 'woocommerce_output_product_data_tabs' )) {
function woocommerce_output_product_data_tabs () {
2011-12-09 20:16:34 +00:00
woocommerce_get_template ( 'single-product/tabs.php' , false );
2011-08-10 17:11:11 +00:00
}
}
if ( ! function_exists ( 'woocommerce_template_single_price' )) {
2011-12-11 14:40:25 +00:00
function woocommerce_template_single_price () {
2011-12-11 01:08:33 +00:00
woocommerce_get_template ( 'single-product/price.php' , false );
2011-08-10 17:11:11 +00:00
}
}
if ( ! function_exists ( 'woocommerce_template_single_excerpt' )) {
2011-12-11 14:40:25 +00:00
function woocommerce_template_single_excerpt () {
2011-12-11 01:08:33 +00:00
woocommerce_get_template ( 'single-product/short-description.php' , false );
2011-08-10 17:11:11 +00:00
}
}
if ( ! function_exists ( 'woocommerce_template_single_meta' )) {
2011-12-11 14:40:25 +00:00
function woocommerce_template_single_meta () {
2011-12-11 01:08:33 +00:00
woocommerce_get_template ( 'single-product/meta.php' , false );
2011-08-10 17:11:11 +00:00
}
}
if ( ! function_exists ( 'woocommerce_template_single_sharing' )) {
2011-12-11 14:40:25 +00:00
function woocommerce_template_single_sharing () {
2011-12-11 01:08:33 +00:00
woocommerce_get_template ( 'single-product/share.php' , false );
2011-09-04 00:02:44 +00:00
}
}
2011-12-11 14:40:25 +00:00
if ( ! function_exists ( 'woocommerce_show_product_sale_flash' )) {
function woocommerce_show_product_sale_flash () {
woocommerce_get_template ( 'single-product/sale_flash.php' , false );
}
}
2011-09-04 00:02:44 +00:00
2011-08-10 17:11:11 +00:00
/**
* Product Add to cart buttons
**/
if ( ! function_exists ( 'woocommerce_template_single_add_to_cart' )) {
2011-12-11 14:40:25 +00:00
function woocommerce_template_single_add_to_cart () {
2011-12-11 15:20:34 +00:00
global $product ;
do_action ( 'woocommerce_' . $product -> product_type . '_add_to_cart' );
2011-08-10 17:11:11 +00:00
}
}
if ( ! function_exists ( 'woocommerce_simple_add_to_cart' )) {
2011-12-11 14:40:25 +00:00
function woocommerce_simple_add_to_cart () {
2011-12-09 19:55:09 +00:00
woocommerce_get_template ( 'single-product/add-to-cart/simple.php' , false );
2011-08-10 17:11:11 +00:00
}
}
if ( ! function_exists ( 'woocommerce_grouped_add_to_cart' )) {
2011-12-11 14:40:25 +00:00
function woocommerce_grouped_add_to_cart () {
2011-12-09 20:16:34 +00:00
woocommerce_get_template ( 'single-product/add-to-cart/grouped.php' , false );
2011-08-10 17:11:11 +00:00
}
}
if ( ! function_exists ( 'woocommerce_variable_add_to_cart' )) {
2011-12-11 14:40:25 +00:00
function woocommerce_variable_add_to_cart () {
2011-12-11 15:20:34 +00:00
global $woocommerce , $available_variations , $attributes , $selected_attributes , $product , $post ;
2011-11-24 00:24:24 +00:00
2011-12-11 15:20:34 +00:00
$attributes = $product -> get_available_attribute_variations ();
2011-11-15 06:18:31 +00:00
$default_attributes = ( array ) maybe_unserialize ( get_post_meta ( $post -> ID , '_default_attributes' , true ));
$selected_attributes = apply_filters ( 'woocommerce_product_default_attributes' , $default_attributes );
2011-12-09 20:16:34 +00:00
2011-08-22 14:10:22 +00:00
// Put available variations into an array and put in a Javascript variable (JSON encoded)
2011-12-09 20:16:34 +00:00
$available_variations = array ();
2011-12-11 15:20:34 +00:00
foreach ( $product -> get_children () as $child_id ) {
2011-12-09 20:16:34 +00:00
2011-12-11 15:20:34 +00:00
$variation = $product -> get_child ( $child_id );
2011-12-09 20:16:34 +00:00
if ( $variation instanceof woocommerce_product_variation ) {
if ( get_post_status ( $variation -> get_variation_id () ) != 'publish' ) continue ; // Disabled
$variation_attributes = $variation -> get_variation_attributes ();
$availability = $variation -> get_availability ();
$availability_html = ( ! empty ( $availability [ 'availability' ])) ? apply_filters ( 'woocommerce_stock_html' , '<p class="stock ' . $availability [ 'class' ] . '">' . $availability [ 'availability' ] . '</p>' , $availability [ 'availability' ] ) : '' ;
if ( has_post_thumbnail ( $variation -> get_variation_id ())) {
$attachment_id = get_post_thumbnail_id ( $variation -> get_variation_id () );
$large_thumbnail_size = apply_filters ( 'single_product_large_thumbnail_size' , 'shop_single' );
$image = current ( wp_get_attachment_image_src ( $attachment_id , $large_thumbnail_size ));
$image_link = current ( wp_get_attachment_image_src ( $attachment_id , 'full' ));
} else {
$image = '' ;
$image_link = '' ;
}
$available_variations [] = array (
'variation_id' => $variation -> get_variation_id (),
'attributes' => $variation_attributes ,
'image_src' => $image ,
'image_link' => $image_link ,
'price_html' => '<span class="price">' . $variation -> get_price_html () . '</span>' ,
'availability_html' => $availability_html ,
);
}
}
woocommerce_get_template ( 'single-product/add-to-cart/variable.php' , false );
2011-08-10 17:11:11 +00:00
}
}
2011-11-08 16:15:36 +00:00
if ( ! function_exists ( 'woocommerce_external_add_to_cart' )) {
2011-12-11 14:40:25 +00:00
function woocommerce_external_add_to_cart () {
2011-12-09 22:44:03 +00:00
woocommerce_get_template ( 'single-product/add-to-cart/external.php' , false );
2011-11-08 16:15:36 +00:00
}
}
2011-08-10 17:11:11 +00:00
2011-12-05 19:16:55 +00:00
/**
* Quantity inputs
**/
if ( ! function_exists ( 'woocommerce_quantity_input' )) {
2011-12-11 14:40:25 +00:00
function woocommerce_quantity_input ( $args = array () ) {
global $input_name , $input_value ;
2011-12-11 01:08:33 +00:00
2011-12-11 14:40:25 +00:00
$defaults = array (
'input_name' => 'quantity' ,
'input_value' => '1'
);
$args = wp_parse_args ( $args , $defaults );
extract ( $args );
2011-12-11 01:08:33 +00:00
woocommerce_get_template ( 'single-product/add-to-cart/quantity.php' , false );
2011-12-05 19:16:55 +00:00
}
}
2011-08-10 17:11:11 +00:00
/**
* Product page tabs
**/
if ( ! function_exists ( 'woocommerce_product_description_tab' )) {
2011-09-21 16:17:28 +00:00
function woocommerce_product_description_tab () {
2011-12-12 11:35:54 +00:00
woocommerce_get_template ( 'single-product/tabs/description-tab.php' , false );
2011-08-10 17:11:11 +00:00
}
}
if ( ! function_exists ( 'woocommerce_product_attributes_tab' )) {
2011-09-21 16:17:28 +00:00
function woocommerce_product_attributes_tab () {
2011-12-12 11:35:54 +00:00
woocommerce_get_template ( 'single-product/tabs/attributes-tab.php' , false );
2011-08-10 17:11:11 +00:00
}
}
if ( ! function_exists ( 'woocommerce_product_reviews_tab' )) {
2011-09-21 16:17:28 +00:00
function woocommerce_product_reviews_tab () {
2011-12-12 11:35:54 +00:00
woocommerce_get_template ( 'single-product/tabs/reviews-tab.php' , false );
2011-08-10 17:11:11 +00:00
}
}
/**
* Product page tab panels
**/
if ( ! function_exists ( 'woocommerce_product_description_panel' )) {
function woocommerce_product_description_panel () {
2011-12-09 22:44:03 +00:00
woocommerce_get_template ( 'single-product/tabs/description.php' , false );
2011-08-10 17:11:11 +00:00
}
}
if ( ! function_exists ( 'woocommerce_product_attributes_panel' )) {
function woocommerce_product_attributes_panel () {
2011-12-09 22:44:03 +00:00
woocommerce_get_template ( 'single-product/tabs/attributes.php' , false );
2011-08-10 17:11:11 +00:00
}
}
if ( ! function_exists ( 'woocommerce_product_reviews_panel' )) {
function woocommerce_product_reviews_panel () {
2011-12-09 22:44:03 +00:00
woocommerce_get_template ( 'single-product/tabs/reviews.php' , false );
2011-08-10 17:11:11 +00:00
}
}
2011-12-12 12:28:07 +00:00
/**
* Review comments template
**/
if ( ! function_exists ( 'woocommerce_comments' )) {
function woocommerce_comments ( $comment , $args , $depth ) {
$GLOBALS [ 'comment' ] = $comment ;
woocommerce_get_template ( 'single-product/review.php' , false );
}
}
2011-08-10 17:11:11 +00:00
/**
* WooCommerce Related Products
**/
if ( ! function_exists ( 'woocommerce_output_related_products' )) {
function woocommerce_output_related_products () {
woocommerce_related_products ( 2 , 2 );
}
}
2011-11-24 00:24:24 +00:00
2011-08-10 17:11:11 +00:00
if ( ! function_exists ( 'woocommerce_related_products' )) {
2011-12-11 23:16:34 +00:00
function woocommerce_related_products ( $pp = 4 , $pc = 4 , $ob = 'rand' ) {
global $product , $woocommerce_loop , $posts_per_page , $orderby ;
$woocommerce_loop [ 'columns' ] = $pc ;
$posts_per_page = $pp ;
$orderby = $ob ;
2011-11-24 00:24:24 +00:00
2011-12-11 23:16:34 +00:00
woocommerce_get_template ( 'single-product/related.php' , false );
2011-08-10 17:11:11 +00:00
}
}
2011-12-12 12:28:07 +00:00
/**
* Display Up Sells
**/
if ( ! function_exists ( 'woocommerce_upsell_display' )) {
function woocommerce_upsell_display () {
woocommerce_get_template ( 'single-product/up-sells.php' , false );
}
}
2011-12-11 14:40:25 +00:00
/** Cart ******************************************************************/
2011-08-10 17:11:11 +00:00
/**
* WooCommerce Shipping Calculator
**/
if ( ! function_exists ( 'woocommerce_shipping_calculator' )) {
function woocommerce_shipping_calculator () {
2011-12-12 11:35:54 +00:00
woocommerce_get_template ( 'cart/shipping_calculator.php' , false );
2011-08-10 17:11:11 +00:00
}
}
2011-09-11 16:42:50 +00:00
/**
* WooCommerce Cart totals
**/
if ( ! function_exists ( 'woocommerce_cart_totals' )) {
function woocommerce_cart_totals () {
2011-12-09 20:29:43 +00:00
woocommerce_get_template ( 'cart/totals.php' , false );
2011-09-11 16:42:50 +00:00
}
}
2011-12-12 12:28:07 +00:00
/**
* Display Cross Sells
**/
if ( ! function_exists ( 'woocommerce_cross_sell_display' )) {
function woocommerce_cross_sell_display () {
woocommerce_get_template ( 'cart/cross-sells.php' , false );
}
}
2011-12-11 14:40:25 +00:00
/** Login *****************************************************************/
2011-08-10 17:11:11 +00:00
/**
* WooCommerce Login Form
**/
if ( ! function_exists ( 'woocommerce_login_form' )) {
2011-12-12 12:28:07 +00:00
function woocommerce_login_form ( $args = array () ) {
global $message ;
$defaults = array (
'message' => ''
);
2011-11-24 00:24:24 +00:00
2011-12-12 12:28:07 +00:00
$args = wp_parse_args ( $args , $defaults );
extract ( $args );
woocommerce_get_template ( 'shop/login-form.php' , false );
2011-08-10 17:11:11 +00:00
}
}
/**
2011-11-14 16:46:11 +00:00
* WooCommerce Checkout Login Form
2011-08-10 17:11:11 +00:00
**/
if ( ! function_exists ( 'woocommerce_checkout_login_form' )) {
function woocommerce_checkout_login_form () {
2011-12-12 12:28:07 +00:00
woocommerce_get_template ( 'checkout/login-form.php' , false );
2011-08-10 17:11:11 +00:00
}
}
/**
* WooCommerce Breadcrumb
**/
if ( ! function_exists ( 'woocommerce_breadcrumb' )) {
2011-12-12 11:35:54 +00:00
function woocommerce_breadcrumb ( $args = array () ) {
global $delimiter , $wrap_before , $wrap_after , $before , $after , $home ;
$defaults = array (
'delimiter' => ' › ' ,
'wrap_before' => '<div id="breadcrumb">' ,
'wrap_after' => '</div>' ,
'before' => '' ,
'after' => '' ,
'home' => null
);
2011-11-24 00:24:24 +00:00
2011-12-12 11:35:54 +00:00
$args = wp_parse_args ( $args , $defaults );
extract ( $args );
2011-11-24 00:24:24 +00:00
2011-12-12 11:35:54 +00:00
woocommerce_get_template ( 'shop/breadcrumb.php' , false );
2011-08-10 17:11:11 +00:00
}
}
2011-08-16 14:06:08 +00:00
/**
* Order review table for checkout
**/
2011-12-11 15:40:17 +00:00
if ( ! function_exists ( 'woocommerce_order_review' )) {
function woocommerce_order_review () {
woocommerce_get_template ( 'checkout/review_order.php' , false );
}
2011-09-04 00:02:44 +00:00
}
2011-10-07 19:27:10 +00:00
/**
* display product sub categories as thumbnails
**/
2011-12-11 15:40:17 +00:00
if ( ! function_exists ( 'woocommerce_product_subcategories' )) {
function woocommerce_product_subcategories () {
global $woocommerce , $woocommerce_loop , $wp_query , $wp_the_query , $_chosen_attributes , $product_categories , $product_category_found , $product_category_parent ;
if ( $wp_query !== $wp_the_query ) return ; // Detect main query
if ( sizeof ( $_chosen_attributes ) > 0 || ( isset ( $_GET [ 'max_price' ]) && isset ( $_GET [ 'min_price' ]))) return ; // Don't show when filtering
if ( is_search ()) return ;
if ( ! is_product_category () && ! is_shop ()) return ;
if ( is_product_category () && get_option ( 'woocommerce_show_subcategories' ) == 'no' ) return ;
if ( is_shop () && get_option ( 'woocommerce_shop_show_subcategories' ) == 'no' ) return ;
if ( is_paged ()) return ;
2011-12-12 12:28:07 +00:00
if ( $product_cat_slug = get_query_var ( 'product_cat' )) :
$product_cat = get_term_by ( 'slug' , $product_cat_slug , 'product_cat' );
$product_category_parent = $product_cat -> term_id ;
2011-12-11 15:40:17 +00:00
else :
2011-12-12 12:28:07 +00:00
$product_category_parent = 0 ;
2011-10-22 19:38:39 +00:00
endif ;
2011-12-11 15:40:17 +00:00
// NOTE: using child_of instead of parent - this is not ideal but due to a WP bug (http://core.trac.wordpress.org/ticket/15626) pad_counts won't work
$args = array (
'child_of' => $product_category_parent ,
'menu_order' => 'ASC' ,
'hide_empty' => 1 ,
'hierarchical' => 1 ,
'taxonomy' => 'product_cat' ,
'pad_counts' => 1
);
$product_categories = get_categories ( $args );
if ( $product_categories ) :
woocommerce_get_template ( 'loop-product-cats.php' , false );
// If we are hiding products disable the loop and pagination
if ( $product_category_found == true && get_option ( 'woocommerce_hide_products_when_showing_subcategories' ) == 'yes' ) :
$woocommerce_loop [ 'show_products' ] = false ;
$wp_query -> max_num_pages = 0 ;
endif ;
endif ;
}
2011-10-07 19:27:10 +00:00
}
2011-10-31 00:47:41 +00:00
/**
* Show subcategory thumbnail
**/
2011-12-11 15:40:17 +00:00
if ( ! function_exists ( 'woocommerce_subcategory_thumbnail' )) {
function woocommerce_subcategory_thumbnail ( $category ) {
global $woocommerce ;
$small_thumbnail_size = apply_filters ( 'single_product_small_thumbnail_size' , 'shop_catalog' );
$image_width = $woocommerce -> get_image_size ( 'shop_catalog_image_width' );
$image_height = $woocommerce -> get_image_size ( 'shop_catalog_image_height' );
$thumbnail_id = get_woocommerce_term_meta ( $category -> term_id , 'thumbnail_id' , true );
if ( $thumbnail_id ) :
$image = wp_get_attachment_image_src ( $thumbnail_id , $small_thumbnail_size );
$image = $image [ 0 ];
else :
$image = $woocommerce -> plugin_url () . '/assets/images/placeholder.png' ;
endif ;
echo '<img src="' . $image . '" alt="' . $category -> slug . '" width="' . $image_width . '" height="' . $image_height . '" />' ;
}
2011-10-07 19:27:10 +00:00
}
2011-10-31 00:47:41 +00:00
/**
2011-12-09 21:47:12 +00:00
* Displays order details in a table
2011-10-31 00:47:41 +00:00
**/
2011-12-11 15:37:32 +00:00
if ( ! function_exists ( 'woocommerce_order_details_table' )) {
function woocommerce_order_details_table ( $id ) {
2011-12-12 11:35:54 +00:00
global $order_id ;
2011-12-11 15:37:32 +00:00
if ( ! $id ) return ;
2011-12-09 21:47:12 +00:00
2011-12-11 15:37:32 +00:00
$order_id = $id ;
woocommerce_get_template ( 'order/order-details-table.php' , false );
}
2011-12-09 19:55:09 +00:00
}