2011-08-10 17:11:11 +00:00
< ? php
/**
2013-08-09 16:11:15 +00:00
* WooCommerce Template
2011-11-24 00:24:24 +00:00
*
2013-08-09 16:11:15 +00:00
* Functions for the templating system .
2011-08-10 17:11:11 +00:00
*
2012-08-14 15:30:23 +00:00
* @ author WooThemes
* @ category Core
2013-08-09 16:11:15 +00:00
* @ package WooCommerce / Functions
* @ version 2.1 . 0
2011-08-10 17:11:11 +00:00
*/
2012-10-15 10:57:58 +00:00
if ( ! defined ( 'ABSPATH' ) ) exit ; // Exit if accessed directly
2013-08-09 16:11:15 +00:00
/**
* Handle redirects before content is output - hooked into template_redirect so is_page works .
*
* @ return void
*/
2013-11-25 13:30:20 +00:00
function wc_template_redirect () {
2013-09-12 13:41:02 +00:00
global $wp_query , $wp ;
2013-08-09 16:11:15 +00:00
// When default permalinks are enabled, redirect shop page to post type archive url
2013-11-25 14:07:22 +00:00
if ( ! empty ( $_GET [ 'page_id' ] ) && get_option ( 'permalink_structure' ) == " " && $_GET [ 'page_id' ] == wc_get_page_id ( 'shop' ) ) {
2013-08-09 16:11:15 +00:00
wp_safe_redirect ( get_post_type_archive_link ( 'product' ) );
exit ;
}
// When on the checkout with an empty cart, redirect to cart page
2013-11-25 14:07:22 +00:00
elseif ( is_page ( wc_get_page_id ( 'checkout' ) ) && sizeof ( WC () -> cart -> get_cart () ) == 0 && empty ( $wp -> query_vars [ 'order-pay' ] ) && ! isset ( $wp -> query_vars [ 'order-received' ] ) ) {
wp_redirect ( get_permalink ( wc_get_page_id ( 'cart' ) ) );
2013-08-09 16:11:15 +00:00
exit ;
}
// Logout
2013-08-23 15:41:02 +00:00
elseif ( isset ( $wp -> query_vars [ 'customer-logout' ] ) ) {
2013-11-25 14:07:22 +00:00
wp_redirect ( str_replace ( '&' , '&' , wp_logout_url ( get_permalink ( wc_get_page_id ( 'myaccount' ) ) ) ) );
2013-08-09 16:11:15 +00:00
exit ;
}
// Redirect to the product page if we have a single product
elseif ( is_search () && is_post_type_archive ( 'product' ) && apply_filters ( 'woocommerce_redirect_single_search_result' , true ) && $wp_query -> post_count == 1 ) {
$product = get_product ( $wp_query -> post );
if ( $product -> is_visible () ) {
wp_safe_redirect ( get_permalink ( $product -> id ), 302 );
exit ;
}
}
2013-11-05 21:02:13 +00:00
// Ensure payment gateways are loaded early
elseif ( is_add_payment_method_page () ) {
WC () -> payment_gateways ();
}
2013-09-12 13:41:02 +00:00
// Checkout pages handling
2013-08-09 16:11:15 +00:00
elseif ( is_checkout () ) {
2013-09-12 13:41:02 +00:00
// Buffer the checkout page
2013-08-09 16:11:15 +00:00
ob_start ();
2013-09-12 13:41:02 +00:00
// Ensure gateways and shipping methods are loaded early
WC () -> payment_gateways ();
WC () -> shipping ();
2013-08-09 16:11:15 +00:00
}
}
2013-09-12 13:41:02 +00:00
/**
* When the_post is called , put product data into a global .
*
* @ param mixed $post
* @ return WC_Product
*/
function wc_setup_product_data ( $post ) {
unset ( $GLOBALS [ 'product' ] );
if ( is_int ( $post ) )
$post = get_post ( $post );
2013-11-27 16:03:54 +00:00
if ( empty ( $post -> post_type ) || ! in_array ( $post -> post_type , array ( 'product' , 'product_variation' ) ) )
2013-09-12 13:41:02 +00:00
return ;
$GLOBALS [ 'product' ] = get_product ( $post );
return $GLOBALS [ 'product' ];
}
2013-11-25 14:35:10 +00:00
/**
* Products RSS Feed .
*
* @ access public
* @ return void
*/
function wc_products_rss_feed () {
// Product RSS
if ( is_post_type_archive ( 'product' ) || is_singular ( 'product' ) ) {
$feed = get_post_type_archive_feed_link ( 'product' );
echo '<link rel="alternate" type="application/rss+xml" title="' . __ ( 'New products' , 'woocommerce' ) . '" href="' . esc_attr ( $feed ) . '" />' ;
} elseif ( is_tax ( 'product_cat' ) ) {
$term = get_term_by ( 'slug' , esc_attr ( get_query_var ( 'product_cat' ) ), 'product_cat' );
$feed = add_query_arg ( 'product_cat' , $term -> slug , get_post_type_archive_feed_link ( 'product' ));
echo '<link rel="alternate" type="application/rss+xml" title="' . sprintf ( __ ( 'New products added to %s' , 'woocommerce' ), urlencode ( $term -> name )) . '" href="' . esc_attr ( $feed ) . '" />' ;
} elseif ( is_tax ( 'product_tag' ) ) {
$term = get_term_by ( 'slug' , esc_attr ( get_query_var ( 'product_tag' ) ), 'product_tag' );
$feed = add_query_arg ( 'product_tag' , $term -> slug , get_post_type_archive_feed_link ( 'product' ));
echo '<link rel="alternate" type="application/rss+xml" title="' . sprintf ( __ ( 'New products tagged %s' , 'woocommerce' ), urlencode ( $term -> name )) . '" href="' . esc_attr ( $feed ) . '" />' ;
}
}
2013-09-12 13:41:02 +00:00
/**
* Output generator tag to aid debugging .
*
* @ access public
* @ return void
*/
function wc_generator_tag () {
2013-10-24 18:36:22 +00:00
echo " \n \n " . '<!-- WooCommerce Version -->' . " \n " . '<meta name="generator" content="WooCommerce ' . esc_attr ( WC_VERSION ) . '" />' . " \n \n " ;
2013-09-12 13:41:02 +00:00
}
2013-08-09 16:11:15 +00:00
/**
* Add body classes for WC pages
*
* @ param array $classes
* @ return array
*/
function wc_body_class ( $classes ) {
$classes = ( array ) $classes ;
if ( is_woocommerce () ) {
$classes [] = 'woocommerce' ;
$classes [] = 'woocommerce-page' ;
}
elseif ( is_checkout () ) {
$classes [] = 'woocommerce-checkout' ;
$classes [] = 'woocommerce-page' ;
}
elseif ( is_cart () ) {
$classes [] = 'woocommerce-cart' ;
$classes [] = 'woocommerce-page' ;
}
elseif ( is_account_page () ) {
$classes [] = 'woocommerce-account' ;
$classes [] = 'woocommerce-page' ;
}
2014-01-10 17:17:01 +00:00
if ( is_store_notice_showing () ) {
2013-09-05 16:13:57 +00:00
$classes [] = 'woocommerce-demo-store' ;
}
2013-08-09 16:11:15 +00:00
return array_unique ( $classes );
}
2013-11-25 14:35:10 +00:00
/**
* Adds extra post classes for products
*
* @ since 2.1 . 0
* @ param array $classes
* @ param string | array $class
* @ param int $post_id
* @ return array
*/
function wc_product_post_class ( $classes , $class = '' , $post_id = '' ) {
if ( ! $post_id || get_post_type ( $post_id ) !== 'product' )
return $classes ;
$product = get_product ( $post_id );
if ( $product ) {
if ( $product -> is_on_sale () ) {
$classes [] = 'sale' ;
}
if ( $product -> is_featured () ) {
$classes [] = 'featured' ;
}
if ( $product -> is_downloadable () ) {
$classes [] = 'downloadable' ;
}
if ( $product -> is_virtual () ) {
$classes [] = 'virtual' ;
}
if ( $product -> is_sold_individually () ) {
$classes [] = 'sold-individually' ;
}
if ( $product -> is_taxable () ) {
$classes [] = 'taxable' ;
}
if ( $product -> is_shipping_taxable () ) {
$classes [] = 'shipping-taxable' ;
}
if ( $product -> is_purchasable () ) {
$classes [] = 'purchasable' ;
}
if ( isset ( $product -> product_type ) ) {
$classes [] = " product-type- " . $product -> product_type ;
}
// add category slugs
$categories = wp_get_post_terms ( $product -> id , " product_cat " );
if ( ! empty ( $categories ) ) {
foreach ( $categories as $key => $value ) {
$classes [] = " product-cat- " . $value -> slug ;
}
}
// add tag slugs
$tags = wp_get_post_terms ( $product -> id , " product_tag " );
if ( ! empty ( $tags ) ) {
foreach ( $tags as $key => $value ) {
$classes [] = " product-tag- " . $value -> slug ;
}
}
$classes [] = $product -> stock_status ;
}
return $classes ;
}
2012-01-06 14:02:34 +00:00
/** Template pages ********************************************************/
2012-04-25 09:51:20 +00:00
if ( ! function_exists ( 'woocommerce_content' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output WooCommerce content .
*
* This function is only used in the optional 'woocommerce.php' template
* which people can add to their themes to add basic woocommerce support
2013-02-10 16:06:15 +00:00
* without hooks or modifying core templates .
2012-08-14 15:30:23 +00:00
*
* @ access public
* @ return void
*/
2012-01-06 14:02:34 +00:00
function woocommerce_content () {
2012-08-08 08:58:36 +00:00
2012-07-11 10:23:31 +00:00
if ( is_singular ( 'product' ) ) {
2012-08-08 08:58:36 +00:00
2012-07-11 10:23:31 +00:00
while ( have_posts () ) : the_post ();
2012-08-08 08:58:36 +00:00
2013-11-25 12:45:04 +00:00
wc_get_template_part ( 'content' , 'single-product' );
2012-04-25 09:51:20 +00:00
2012-07-11 10:23:31 +00:00
endwhile ;
2012-04-25 09:51:20 +00:00
2013-04-05 12:01:41 +00:00
} else { ?>
2012-08-08 08:58:36 +00:00
2013-04-05 12:01:41 +00:00
< ? php if ( apply_filters ( 'woocommerce_show_page_title' , true ) ) : ?>
2013-11-25 14:16:26 +00:00
< h1 class = " page-title " >< ? php woocommerce_page_title (); ?> </h1>
2013-04-05 12:01:41 +00:00
< ? php endif ; ?>
2012-08-08 08:58:36 +00:00
2012-08-09 10:30:37 +00:00
< ? php do_action ( 'woocommerce_archive_description' ); ?>
2012-07-19 17:58:41 +00:00
< ? php if ( have_posts () ) : ?>
2012-08-08 08:58:36 +00:00
2012-07-19 17:58:41 +00:00
< ? php do_action ( 'woocommerce_before_shop_loop' ); ?>
2012-08-08 08:58:36 +00:00
2013-11-25 14:16:26 +00:00
< ? php woocommerce_product_loop_start (); ?>
2012-08-08 08:58:36 +00:00
2013-11-25 14:16:26 +00:00
< ? php woocommerce_product_subcategories (); ?>
2012-08-08 08:58:36 +00:00
2012-07-19 17:58:41 +00:00
< ? php while ( have_posts () ) : the_post (); ?>
2012-08-08 08:58:36 +00:00
2013-11-25 12:45:04 +00:00
< ? php wc_get_template_part ( 'content' , 'product' ); ?>
2012-08-08 08:58:36 +00:00
2012-07-19 17:58:41 +00:00
< ? php endwhile ; // end of the loop. ?>
2012-08-08 08:58:36 +00:00
2013-11-25 14:16:26 +00:00
< ? php woocommerce_product_loop_end (); ?>
2012-08-08 08:58:36 +00:00
2012-07-19 17:58:41 +00:00
< ? php do_action ( 'woocommerce_after_shop_loop' ); ?>
2012-08-08 08:58:36 +00:00
2013-11-25 14:16:26 +00:00
< ? php elseif ( ! woocommerce_product_subcategories ( array ( 'before' => woocommerce_product_loop_start ( false ), 'after' => woocommerce_product_loop_end ( false ) ) ) ) : ?>
2012-08-08 08:58:36 +00:00
2013-11-25 12:45:04 +00:00
< ? php wc_get_template ( 'loop/no-products-found.php' ); ?>
2012-08-08 08:58:36 +00:00
2013-02-10 16:06:15 +00:00
< ? php endif ;
2012-08-08 08:58:36 +00:00
2012-07-11 10:23:31 +00:00
}
2012-01-13 14:17:43 +00:00
}
2012-01-06 14:02:34 +00:00
}
2011-12-11 12:39:35 +00:00
/** Global ****************************************************************/
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_output_content_wrapper' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the start of the page wrapper .
*
* @ access public
* @ return void
*/
2013-11-25 14:35:10 +00:00
function woocommerce_output_content_wrapper () {
2013-11-28 17:23:41 +00:00
wc_get_template ( 'global/wrapper-start.php' );
2011-08-10 17:11:11 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_output_content_wrapper_end' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the end of the page wrapper .
*
* @ access public
* @ return void
*/
2013-11-25 14:35:10 +00:00
function woocommerce_output_content_wrapper_end () {
2013-11-28 17:23:41 +00:00
wc_get_template ( 'global/wrapper-end.php' );
2011-08-10 17:11:11 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_get_sidebar' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Get the shop sidebar template .
*
* @ access public
* @ return void
*/
2013-11-25 14:35:10 +00:00
function woocommerce_get_sidebar () {
2013-11-28 17:23:41 +00:00
wc_get_template ( 'global/sidebar.php' );
2011-12-12 11:35:54 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_demo_store' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Adds a demo store banner to the site if enabled
*
* @ access public
* @ return void
*/
2013-11-25 14:35:10 +00:00
function woocommerce_demo_store () {
2014-01-10 17:17:01 +00:00
if ( ! is_store_notice_showing () )
2012-08-10 09:35:25 +00:00
return ;
2012-04-25 09:51:20 +00:00
2012-08-10 09:35:25 +00:00
$notice = get_option ( 'woocommerce_demo_store_notice' );
if ( empty ( $notice ) )
$notice = __ ( 'This is a demo store for testing purposes — no orders shall be fulfilled.' , 'woocommerce' );
echo apply_filters ( 'woocommerce_demo_store' , '<p class="demo_store">' . $notice . '</p>' );
2011-12-12 12:28:07 +00:00
}
}
2011-12-11 01:10:24 +00:00
/** Loop ******************************************************************/
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_page_title' ) ) {
2012-11-04 16:01:40 +00:00
/**
2013-11-25 14:16:26 +00:00
* woocommerce_page_title function .
2012-11-27 16:22:47 +00:00
*
2013-08-23 13:54:38 +00:00
* @ param boolean $echo
* @ return string
2012-11-04 16:01:40 +00:00
*/
2013-11-25 14:35:10 +00:00
function woocommerce_page_title ( $echo = true ) {
2012-11-27 16:22:47 +00:00
2012-11-04 16:01:40 +00:00
if ( is_search () ) {
$page_title = sprintf ( __ ( 'Search Results: “%s”' , 'woocommerce' ), get_search_query () );
2012-11-27 16:22:47 +00:00
2012-11-04 16:01:40 +00:00
if ( get_query_var ( 'paged' ) )
$page_title .= sprintf ( __ ( ' – Page %s' , 'woocommerce' ), get_query_var ( 'paged' ) );
2012-11-27 16:22:47 +00:00
2012-11-04 16:01:40 +00:00
} elseif ( is_tax () ) {
2012-11-27 16:22:47 +00:00
2012-11-04 16:01:40 +00:00
$page_title = single_term_title ( " " , false );
2012-11-27 16:22:47 +00:00
2012-11-04 16:01:40 +00:00
} else {
2012-11-27 16:22:47 +00:00
2013-11-25 14:07:22 +00:00
$shop_page_id = wc_get_page_id ( 'shop' );
2013-03-18 12:43:38 +00:00
$page_title = get_the_title ( $shop_page_id );
2012-11-27 16:22:47 +00:00
2012-11-04 16:01:40 +00:00
}
2012-11-27 16:22:47 +00:00
2013-08-23 13:54:38 +00:00
$page_title = apply_filters ( 'woocommerce_page_title' , $page_title );
if ( $echo )
echo $page_title ;
else
return $page_title ;
2012-11-04 16:01:40 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_product_loop_start' ) ) {
2012-09-30 13:41:07 +00:00
/**
* Output the start of a product loop . By default this is a UL
*
* @ access public
2013-11-27 18:23:46 +00:00
* @ param bool $echo
2013-11-27 18:20:31 +00:00
* @ return string
2012-09-30 13:41:07 +00:00
*/
2013-11-25 14:35:10 +00:00
function woocommerce_product_loop_start ( $echo = true ) {
2012-09-30 13:41:07 +00:00
ob_start ();
2013-11-25 12:45:04 +00:00
wc_get_template ( 'loop/loop-start.php' );
2012-09-30 13:41:07 +00:00
if ( $echo )
echo ob_get_clean ();
2012-11-27 16:22:47 +00:00
else
2012-09-30 13:41:07 +00:00
return ob_get_clean ();
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_product_loop_end' ) ) {
2012-09-30 13:41:07 +00:00
/**
* Output the end of a product loop . By default this is a UL
*
* @ access public
2013-11-27 18:20:31 +00:00
* @ param bool $echo
* @ return string
2012-09-30 13:41:07 +00:00
*/
2013-11-25 14:35:10 +00:00
function woocommerce_product_loop_end ( $echo = true ) {
2012-09-30 13:41:07 +00:00
ob_start ();
2013-02-10 16:06:15 +00:00
2013-11-25 12:45:04 +00:00
wc_get_template ( 'loop/loop-end.php' );
2013-02-10 16:06:15 +00:00
2012-09-30 13:41:07 +00:00
if ( $echo )
echo ob_get_clean ();
2012-11-27 16:22:47 +00:00
else
2012-09-30 13:41:07 +00:00
return ob_get_clean ();
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_taxonomy_archive_description' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Show an archive description on taxonomy archives
*
* @ access public
2012-08-15 18:15:06 +00:00
* @ subpackage Archives
2012-08-14 15:30:23 +00:00
* @ return void
*/
2013-11-25 14:35:10 +00:00
function woocommerce_taxonomy_archive_description () {
2013-01-03 11:24:23 +00:00
if ( is_tax ( array ( 'product_cat' , 'product_tag' ) ) && get_query_var ( 'paged' ) == 0 ) {
2013-04-19 06:26:18 +00:00
$description = apply_filters ( 'the_content' , term_description () );
2013-01-03 11:24:23 +00:00
if ( $description ) {
2013-04-19 06:26:18 +00:00
echo '<div class="term-description">' . $description . '</div>' ;
2013-01-03 11:24:23 +00:00
}
2013-01-03 10:19:52 +00:00
}
2012-08-09 10:25:34 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_product_archive_description' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Show a shop page description on product archives
*
* @ access public
2012-08-15 18:15:06 +00:00
* @ subpackage Archives
2012-08-14 15:30:23 +00:00
* @ return void
*/
2013-11-25 14:35:10 +00:00
function woocommerce_product_archive_description () {
2013-01-03 10:19:52 +00:00
if ( is_post_type_archive ( 'product' ) && get_query_var ( 'paged' ) == 0 ) {
2013-11-25 14:07:22 +00:00
$shop_page = get_post ( wc_get_page_id ( 'shop' ) );
2013-11-18 14:11:40 +00:00
if ( $shop_page ) {
$description = apply_filters ( 'the_content' , $shop_page -> post_content );
if ( $description ) {
echo '<div class="page-description">' . $description . '</div>' ;
}
2013-01-03 11:24:23 +00:00
}
2013-01-03 10:19:52 +00:00
}
2012-08-09 10:25:34 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_template_loop_add_to_cart' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Get the add to cart template for the loop .
*
* @ access public
2012-08-15 18:15:06 +00:00
* @ subpackage Loop
2012-08-14 15:30:23 +00:00
* @ return void
*/
2013-11-25 14:35:10 +00:00
function woocommerce_template_loop_add_to_cart () {
2013-11-25 12:45:04 +00:00
wc_get_template ( 'loop/add-to-cart.php' );
2011-08-10 17:11:11 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_template_loop_product_thumbnail' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Get the product thumbnail for the loop .
*
* @ access public
2012-08-15 18:15:06 +00:00
* @ subpackage Loop
2012-08-14 15:30:23 +00:00
* @ return void
*/
2013-11-25 14:35:10 +00:00
function woocommerce_template_loop_product_thumbnail () {
2013-11-25 14:16:26 +00:00
echo woocommerce_get_product_thumbnail ();
2011-08-10 17:11:11 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_template_loop_price' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Get the product price for the loop .
*
* @ access public
2012-08-15 18:15:06 +00:00
* @ subpackage Loop
2012-08-14 15:30:23 +00:00
* @ return void
*/
2013-11-25 14:35:10 +00:00
function woocommerce_template_loop_price () {
2013-11-25 12:45:04 +00:00
wc_get_template ( 'loop/price.php' );
2011-08-10 17:11:11 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_template_loop_rating' ) ) {
2013-01-12 10:53:24 +00:00
/**
* Display the average rating in the loop
*
* @ access public
* @ subpackage Loop
* @ return void
*/
2013-11-25 14:35:10 +00:00
function woocommerce_template_loop_rating () {
2013-11-25 12:45:04 +00:00
wc_get_template ( 'loop/rating.php' );
2013-01-12 10:53:24 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_show_product_loop_sale_flash' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Get the sale flash for the loop .
*
* @ access public
2012-08-15 18:15:06 +00:00
* @ subpackage Loop
2012-08-14 15:30:23 +00:00
* @ return void
*/
2013-11-25 14:35:10 +00:00
function woocommerce_show_product_loop_sale_flash () {
2013-11-25 12:45:04 +00:00
wc_get_template ( 'loop/sale-flash.php' );
2011-12-11 14:40:25 +00:00
}
}
2013-08-09 16:11:15 +00:00
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_reset_loop' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Reset the loop 's index and columns when we' re done outputting a product loop .
*
* @ access public
2012-08-15 18:15:06 +00:00
* @ subpackage Loop
2012-08-14 15:30:23 +00:00
* @ return void
*/
2013-11-25 14:35:10 +00:00
function woocommerce_reset_loop () {
2012-07-19 21:52:28 +00:00
global $woocommerce_loop ;
// Reset loop/columns globals when starting a new loop
2014-01-08 13:23:40 +00:00
$woocommerce_loop [ 'loop' ] = $woocommerce_loop [ 'columns' ] = '' ;
2012-07-19 21:52:28 +00:00
}
}
2011-08-10 17:11:11 +00:00
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_get_product_schema' ) ) {
2013-08-20 12:52:06 +00:00
/**
* Get a products Schema
* @ return string
*/
2013-11-25 14:35:10 +00:00
function woocommerce_get_product_schema () {
2013-08-20 12:52:06 +00:00
global $post , $product ;
$schema = " Product " ;
// Downloadable product schema handling
if ( $product -> is_downloadable () ) {
switch ( $product -> download_type ) {
case 'application' :
$schema = " SoftwareApplication " ;
break ;
case 'music' :
$schema = " MusicAlbum " ;
break ;
default :
$schema = " Product " ;
break ;
}
}
return 'http://schema.org/' . $schema ;
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_get_product_thumbnail' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Get the product thumbnail , or the placeholder if not set .
*
* @ access public
2012-08-15 18:15:06 +00:00
* @ subpackage Loop
2012-08-14 15:30:23 +00:00
* @ param string $size ( default : 'shop_catalog' )
* @ param int $placeholder_width ( default : 0 )
* @ param int $placeholder_height ( default : 0 )
* @ return string
*/
2013-11-25 14:35:10 +00:00
function woocommerce_get_product_thumbnail ( $size = 'shop_catalog' , $placeholder_width = 0 , $placeholder_height = 0 ) {
2012-11-27 15:37:01 +00:00
global $post ;
2011-12-12 11:35:54 +00:00
2012-04-25 09:51:20 +00:00
if ( has_post_thumbnail () )
2012-08-08 08:58:36 +00:00
return get_the_post_thumbnail ( $post -> ID , $size );
2013-11-25 13:56:59 +00:00
elseif ( wc_placeholder_img_src () )
return wc_placeholder_img ( $size );
2011-12-12 11:35:54 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_result_count' ) ) {
2012-08-14 15:30:23 +00:00
/**
2012-10-14 12:06:37 +00:00
* Output the result count text ( Showing x - x of x results ) .
2012-08-14 15:30:23 +00:00
*
* @ access public
2012-08-15 18:15:06 +00:00
* @ subpackage Loop
2012-08-14 15:30:23 +00:00
* @ return void
*/
2013-11-25 14:35:10 +00:00
function woocommerce_result_count () {
2013-11-25 12:45:04 +00:00
wc_get_template ( 'loop/result-count.php' );
2011-12-11 01:10:24 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_catalog_ordering' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the product sorting options .
*
* @ access public
2012-08-15 18:15:06 +00:00
* @ subpackage Loop
2012-08-14 15:30:23 +00:00
* @ return void
*/
2013-11-25 14:35:10 +00:00
function woocommerce_catalog_ordering () {
2013-11-25 13:34:21 +00:00
$orderby = isset ( $_GET [ 'orderby' ] ) ? wc_clean ( $_GET [ 'orderby' ] ) : apply_filters ( 'woocommerce_default_catalog_orderby' , get_option ( 'woocommerce_default_catalog_orderby' ) );
2012-11-27 16:22:47 +00:00
2013-11-25 12:45:04 +00:00
wc_get_template ( 'loop/orderby.php' , array ( 'orderby' => $orderby ) );
2011-12-11 01:10:24 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_pagination' ) ) {
2012-10-14 12:06:37 +00:00
/**
* Output the pagination .
*
* @ access public
* @ subpackage Loop
* @ return void
*/
2013-11-25 14:35:10 +00:00
function woocommerce_pagination () {
2013-11-25 12:45:04 +00:00
wc_get_template ( 'loop/pagination.php' );
2012-10-14 12:06:37 +00:00
}
}
2011-12-11 01:08:33 +00:00
/** Single Product ********************************************************/
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_show_product_images' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the product image before the single product summary .
*
* @ access public
2012-08-15 18:15:06 +00:00
* @ subpackage Product
2012-08-14 15:30:23 +00:00
* @ return void
*/
2013-11-25 14:35:10 +00:00
function woocommerce_show_product_images () {
2013-11-25 12:45:04 +00:00
wc_get_template ( 'single-product/product-image.php' );
2011-08-10 17:11:11 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_show_product_thumbnails' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the product thumbnails .
*
* @ access public
2012-08-15 18:15:06 +00:00
* @ subpackage Product
2012-08-14 15:30:23 +00:00
* @ return void
*/
2013-11-25 14:35:10 +00:00
function woocommerce_show_product_thumbnails () {
2013-11-25 12:45:04 +00:00
wc_get_template ( 'single-product/product-thumbnails.php' );
2011-08-10 17:11:11 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_output_product_data_tabs' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the product tabs .
*
* @ access public
2012-08-15 18:15:06 +00:00
* @ subpackage Product / Tabs
2012-08-14 15:30:23 +00:00
* @ return void
*/
2013-11-25 14:35:10 +00:00
function woocommerce_output_product_data_tabs () {
2013-11-25 12:45:04 +00:00
wc_get_template ( 'single-product/tabs/tabs.php' );
2012-03-13 12:52:53 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_template_single_title' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the product title .
*
* @ access public
2012-08-15 18:15:06 +00:00
* @ subpackage Product
2012-08-14 15:30:23 +00:00
* @ return void
*/
2013-11-25 14:35:10 +00:00
function woocommerce_template_single_title () {
2013-11-25 12:45:04 +00:00
wc_get_template ( 'single-product/title.php' );
2011-08-10 17:11:11 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_template_single_rating' ) ) {
2013-10-31 16:26:20 +00:00
/**
* Output the product rating .
*
* @ access public
* @ subpackage Product
* @ return void
*/
2013-11-25 14:35:10 +00:00
function woocommerce_template_single_rating () {
2013-11-25 12:45:04 +00:00
wc_get_template ( 'single-product/rating.php' );
2013-10-31 16:26:20 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_template_single_price' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the product price .
*
* @ access public
2012-08-15 18:15:06 +00:00
* @ subpackage Product
2012-08-14 15:30:23 +00:00
* @ return void
*/
2013-11-25 14:35:10 +00:00
function woocommerce_template_single_price () {
2013-11-25 12:45:04 +00:00
wc_get_template ( 'single-product/price.php' );
2011-08-10 17:11:11 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_template_single_excerpt' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the product short description ( excerpt ) .
*
* @ access public
2012-08-15 18:15:06 +00:00
* @ subpackage Product
2012-08-14 15:30:23 +00:00
* @ return void
*/
2013-11-25 14:35:10 +00:00
function woocommerce_template_single_excerpt () {
2013-11-25 12:45:04 +00:00
wc_get_template ( 'single-product/short-description.php' );
2011-08-10 17:11:11 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_template_single_meta' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the product meta .
*
* @ access public
2012-08-15 18:15:06 +00:00
* @ subpackage Product
2012-08-14 15:30:23 +00:00
* @ return void
*/
2013-11-25 14:35:10 +00:00
function woocommerce_template_single_meta () {
2013-11-25 12:45:04 +00:00
wc_get_template ( 'single-product/meta.php' );
2011-08-10 17:11:11 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_template_single_sharing' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the product sharing .
*
* @ access public
2012-08-15 18:15:06 +00:00
* @ subpackage Product
2012-08-14 15:30:23 +00:00
* @ return void
*/
2013-11-25 14:35:10 +00:00
function woocommerce_template_single_sharing () {
2013-11-25 12:45:04 +00:00
wc_get_template ( 'single-product/share.php' );
2011-09-04 00:02:44 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_show_product_sale_flash' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the product sale flash .
*
* @ access public
2012-08-15 18:15:06 +00:00
* @ subpackage Product
2012-08-14 15:30:23 +00:00
* @ return void
*/
2013-11-25 14:35:10 +00:00
function woocommerce_show_product_sale_flash () {
2013-11-25 12:45:04 +00:00
wc_get_template ( 'single-product/sale-flash.php' );
2011-12-11 14:40:25 +00:00
}
}
2011-09-04 00:02:44 +00:00
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_template_single_add_to_cart' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Trigger the single product add to cart action .
*
* @ access public
2012-08-15 18:15:06 +00:00
* @ subpackage Product
2012-08-14 15:30:23 +00:00
* @ return void
*/
2013-11-25 14:35:10 +00:00
function woocommerce_template_single_add_to_cart () {
2011-12-11 15:20:34 +00:00
global $product ;
2012-04-25 09:51:20 +00:00
do_action ( 'woocommerce_' . $product -> product_type . '_add_to_cart' );
2011-08-10 17:11:11 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_simple_add_to_cart' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the simple product add to cart area .
*
* @ access public
2012-08-15 18:15:06 +00:00
* @ subpackage Product
2012-08-14 15:30:23 +00:00
* @ return void
*/
2013-11-25 14:35:10 +00:00
function woocommerce_simple_add_to_cart () {
2013-11-25 12:45:04 +00:00
wc_get_template ( 'single-product/add-to-cart/simple.php' );
2011-08-10 17:11:11 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_grouped_add_to_cart' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the grouped product add to cart area .
*
* @ access public
2012-08-15 18:15:06 +00:00
* @ subpackage Product
2012-08-14 15:30:23 +00:00
* @ return void
*/
2013-11-25 14:35:10 +00:00
function woocommerce_grouped_add_to_cart () {
2013-09-25 11:35:06 +00:00
global $product ;
2013-11-25 12:45:04 +00:00
wc_get_template ( 'single-product/add-to-cart/grouped.php' , array (
2013-09-25 11:35:06 +00:00
'grouped_product' => $product ,
'grouped_products' => $product -> get_children (),
'quantites_required' => false
) );
2011-08-10 17:11:11 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_variable_add_to_cart' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the variable product add to cart area .
*
* @ access public
2012-08-15 18:15:06 +00:00
* @ subpackage Product
2012-08-14 15:30:23 +00:00
* @ return void
*/
2013-11-25 14:35:10 +00:00
function woocommerce_variable_add_to_cart () {
2012-06-10 09:15:23 +00:00
global $product ;
2012-08-08 08:58:36 +00:00
2012-07-17 14:09:18 +00:00
// Enqueue variation scripts
wp_enqueue_script ( 'wc-add-to-cart-variation' );
2012-08-08 08:58:36 +00:00
2012-07-17 14:09:18 +00:00
// Load the template
2013-11-25 12:45:04 +00:00
wc_get_template ( 'single-product/add-to-cart/variable.php' , array (
2012-06-10 09:15:23 +00:00
'available_variations' => $product -> get_available_variations (),
'attributes' => $product -> get_variation_attributes (),
'selected_attributes' => $product -> get_variation_default_attributes ()
2012-08-08 08:58:36 +00:00
) );
2011-08-10 17:11:11 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_external_add_to_cart' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the external product add to cart area .
*
* @ access public
2012-08-15 18:15:06 +00:00
* @ subpackage Product
2012-08-14 15:30:23 +00:00
* @ return void
*/
2013-11-25 14:35:10 +00:00
function woocommerce_external_add_to_cart () {
2012-02-26 11:47:49 +00:00
global $product ;
2013-02-13 09:29:00 +00:00
if ( ! $product -> get_product_url () )
return ;
2012-04-25 09:51:20 +00:00
2013-11-25 12:45:04 +00:00
wc_get_template ( 'single-product/add-to-cart/external.php' , array (
2012-11-29 16:48:40 +00:00
'product_url' => $product -> get_product_url (),
2013-09-25 11:35:06 +00:00
'button_text' => $product -> single_add_to_cart_text ()
2012-04-25 09:51:20 +00:00
) );
2011-11-08 16:15:36 +00:00
}
}
2011-08-10 17:11:11 +00:00
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_quantity_input' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the quantity input for add to cart forms .
2013-11-28 17:23:41 +00:00
*
* @ param array $args Args for the input
* @ param WC_Product | null $product
* @ param boolean $echo Whether to return or echo
* @ return void | string
2012-08-14 15:30:23 +00:00
*/
2013-11-28 17:23:41 +00:00
function woocommerce_quantity_input ( $args = array (), $product = null , $echo = true ) {
if ( is_null ( $product ) )
$product = $GLOBALS [ 'product' ];
2012-11-27 16:22:47 +00:00
2011-12-11 14:40:25 +00:00
$defaults = array (
2012-11-19 14:05:03 +00:00
'input_name' => 'quantity' ,
'input_value' => '1' ,
'max_value' => apply_filters ( 'woocommerce_quantity_input_max' , '' , $product ),
'min_value' => apply_filters ( 'woocommerce_quantity_input_min' , '' , $product ),
'step' => apply_filters ( 'woocommerce_quantity_input_step' , '1' , $product )
2011-12-11 14:40:25 +00:00
);
2012-11-19 14:05:03 +00:00
$args = apply_filters ( 'woocommerce_quantity_input_args' , wp_parse_args ( $args , $defaults ), $product );
2012-04-25 09:51:20 +00:00
2013-11-28 17:23:41 +00:00
ob_start ();
wc_get_template ( 'global/quantity-input.php' , $args );
if ( $echo ) {
echo ob_get_clean ();
} else {
return ob_get_clean ();
}
2011-12-05 19:16:55 +00:00
}
}
2011-08-10 17:11:11 +00:00
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_product_description_tab' ) ) {
2012-08-14 15:30:23 +00:00
/**
2013-02-10 17:33:13 +00:00
* Output the description tab content .
2012-08-14 15:30:23 +00:00
*
* @ access public
2012-08-15 18:15:06 +00:00
* @ subpackage Product / Tabs
2012-08-14 15:30:23 +00:00
* @ return void
*/
2013-11-25 14:35:10 +00:00
function woocommerce_product_description_tab () {
2013-11-25 12:45:04 +00:00
wc_get_template ( 'single-product/tabs/description.php' );
2011-08-10 17:11:11 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_product_additional_information_tab' ) ) {
2012-08-14 15:30:23 +00:00
/**
2013-02-10 17:33:13 +00:00
* Output the attributes tab content .
2012-08-14 15:30:23 +00:00
*
* @ access public
2012-08-15 18:15:06 +00:00
* @ subpackage Product / Tabs
2012-08-14 15:30:23 +00:00
* @ return void
*/
2013-11-25 14:35:10 +00:00
function woocommerce_product_additional_information_tab () {
2013-11-25 12:45:04 +00:00
wc_get_template ( 'single-product/tabs/additional-information.php' );
2011-08-10 17:11:11 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_product_reviews_tab' ) ) {
2012-08-14 15:30:23 +00:00
/**
2013-02-10 17:33:13 +00:00
* Output the reviews tab content .
2012-08-14 15:30:23 +00:00
*
* @ access public
2012-08-15 18:15:06 +00:00
* @ subpackage Product / Tabs
2012-08-14 15:30:23 +00:00
* @ return void
*/
2013-11-25 14:35:10 +00:00
function woocommerce_product_reviews_tab () {
2013-11-25 12:45:04 +00:00
wc_get_template ( 'single-product/tabs/reviews.php' );
2011-08-10 17:11:11 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_default_product_tabs' ) ) {
2012-08-14 15:30:23 +00:00
/**
2013-02-10 17:33:13 +00:00
* Add default product tabs to product pages .
2012-08-14 15:30:23 +00:00
*
* @ access public
2013-11-29 18:50:31 +00:00
* @ param array $tabs
* @ return array
2012-08-14 15:30:23 +00:00
*/
2013-11-25 14:35:10 +00:00
function woocommerce_default_product_tabs ( $tabs = array () ) {
2013-02-10 17:33:13 +00:00
global $product , $post ;
2012-08-14 15:30:23 +00:00
2013-02-10 17:33:13 +00:00
// Description tab - shows product content
2014-01-13 11:39:54 +00:00
if ( $post -> post_content ) {
2013-02-10 17:33:13 +00:00
$tabs [ 'description' ] = array (
'title' => __ ( 'Description' , 'woocommerce' ),
'priority' => 10 ,
2013-11-25 14:16:26 +00:00
'callback' => 'woocommerce_product_description_tab'
2013-02-10 17:33:13 +00:00
);
2014-01-13 11:39:54 +00:00
}
2013-02-10 17:33:13 +00:00
2013-03-03 17:07:31 +00:00
// Additional information tab - shows attributes
2014-01-13 11:39:54 +00:00
if ( $product && ( $product -> has_attributes () || ( $product -> enable_dimensions_display () && ( $product -> has_dimensions () || $product -> has_weight () ) ) ) ) {
2013-02-10 17:33:13 +00:00
$tabs [ 'additional_information' ] = array (
'title' => __ ( 'Additional Information' , 'woocommerce' ),
'priority' => 20 ,
2013-11-25 14:16:26 +00:00
'callback' => 'woocommerce_product_additional_information_tab'
2013-02-10 17:33:13 +00:00
);
2014-01-13 11:39:54 +00:00
}
2013-02-10 17:33:13 +00:00
// Reviews tab - shows comments
2014-01-13 11:39:54 +00:00
if ( comments_open () ) {
2013-02-10 17:33:13 +00:00
$tabs [ 'reviews' ] = array (
'title' => sprintf ( __ ( 'Reviews (%d)' , 'woocommerce' ), get_comments_number ( $post -> ID ) ),
'priority' => 30 ,
'callback' => 'comments_template'
);
2014-01-13 11:39:54 +00:00
}
2013-02-10 17:33:13 +00:00
return $tabs ;
2011-08-10 17:11:11 +00:00
}
}
2013-02-10 17:33:13 +00:00
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_sort_product_tabs' ) ) {
2012-08-14 15:30:23 +00:00
/**
2013-02-10 17:33:13 +00:00
* Sort tabs by priority
2012-08-14 15:30:23 +00:00
*
* @ access public
2013-11-28 17:59:09 +00:00
* @ param array $tabs
* @ return array
2012-08-14 15:30:23 +00:00
*/
2013-11-25 14:35:10 +00:00
function woocommerce_sort_product_tabs ( $tabs = array () ) {
2013-11-25 13:30:20 +00:00
2013-08-27 15:40:21 +00:00
// Make sure the $tabs parameter is an array
if ( ! is_array ( $tabs ) ) {
2013-11-25 14:35:10 +00:00
trigger_error ( " Function woocommerce_sort_product_tabs() expects an array as the first parameter. Defaulting to empty array. " );
2013-08-27 15:40:21 +00:00
$tabs = array ( );
}
2013-02-10 17:33:13 +00:00
// Re-order tabs by priority
if ( ! function_exists ( '_sort_priority_callback' ) ) {
function _sort_priority_callback ( $a , $b ) {
if ( $a [ 'priority' ] == $b [ 'priority' ] )
return 0 ;
return ( $a [ 'priority' ] < $b [ 'priority' ] ) ? - 1 : 1 ;
}
}
uasort ( $tabs , '_sort_priority_callback' );
return $tabs ;
2011-08-10 17:11:11 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_comments' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the Review comments template .
*
* @ access public
2012-08-15 18:15:06 +00:00
* @ subpackage Product
2012-08-14 15:30:23 +00:00
* @ return void
*/
2013-11-25 14:35:10 +00:00
function woocommerce_comments ( $comment , $args , $depth ) {
2011-12-12 12:28:07 +00:00
$GLOBALS [ 'comment' ] = $comment ;
2013-11-25 12:45:04 +00:00
wc_get_template ( 'single-product/review.php' , array ( 'comment' => $comment , 'args' => $args , 'depth' => $depth ) );
2011-12-12 12:28:07 +00:00
}
}
2011-08-10 17:11:11 +00:00
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_output_related_products' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the related products .
*
* @ access public
2012-08-15 18:15:06 +00:00
* @ subpackage Product
2012-08-14 15:30:23 +00:00
* @ return void
*/
2013-11-25 14:35:10 +00:00
function woocommerce_output_related_products () {
2013-05-16 12:39:53 +00:00
$args = array (
'posts_per_page' => 2 ,
'columns' => 2 ,
'orderby' => 'rand'
);
2013-11-25 14:16:26 +00:00
woocommerce_related_products ( apply_filters ( 'woocommerce_output_related_products_args' , $args ) );
2011-08-10 17:11:11 +00:00
}
}
2011-11-24 00:24:24 +00:00
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_related_products' ) ) {
2012-11-27 16:22:47 +00:00
2012-08-14 15:30:23 +00:00
/**
* Output the related products .
2012-11-27 16:22:47 +00:00
*
2012-08-14 15:30:23 +00:00
* @ access public
2013-05-17 06:55:55 +00:00
* @ param array Provided arguments
* @ param bool Columns argument for backwards compat
* @ param bool Order by argument for backwards compat
2012-08-14 15:30:23 +00:00
* @ return void
*/
2013-11-25 14:35:10 +00:00
function woocommerce_related_products ( $args = array (), $columns = false , $orderby = false ) {
2013-05-17 06:55:55 +00:00
if ( ! is_array ( $args ) ) {
2013-11-01 22:00:09 +00:00
_deprecated_argument ( __FUNCTION__ , '2.1' , __ ( 'Use $args argument as an array instead. Deprecated argument will be removed in WC 2.2.' , 'woocommerce' ) );
2013-05-17 06:55:55 +00:00
$argsvalue = $args ;
$args = array (
'posts_per_page' => $argsvalue ,
'columns' => $columns ,
'orderby' => $orderby ,
);
}
2013-05-16 12:39:53 +00:00
$defaults = array (
'posts_per_page' => 2 ,
2013-05-17 06:55:55 +00:00
'columns' => 2 ,
'orderby' => 'rand'
2013-05-16 12:39:53 +00:00
);
$args = wp_parse_args ( $args , $defaults );
2013-11-25 12:45:04 +00:00
wc_get_template ( 'single-product/related.php' , $args );
2011-08-10 17:11:11 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_upsell_display' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output product up sells .
2012-11-27 16:22:47 +00:00
*
2012-08-14 15:30:23 +00:00
* @ access public
2012-09-21 15:47:57 +00:00
* @ param int $posts_per_page ( default : - 1 )
* @ param int $columns ( default : 2 )
* @ param string $orderby ( default : 'rand' )
2012-08-14 15:30:23 +00:00
* @ return void
*/
2013-11-25 14:35:10 +00:00
function woocommerce_upsell_display ( $posts_per_page = '-1' , $columns = 2 , $orderby = 'rand' ) {
2013-11-25 12:45:04 +00:00
wc_get_template ( 'single-product/up-sells.php' , array (
2013-07-23 09:52:15 +00:00
'posts_per_page' => $posts_per_page ,
'orderby' => apply_filters ( 'woocommerce_upsells_orderby' , $orderby ),
'columns' => $columns
2012-09-21 15:47:57 +00:00
) );
2011-12-12 12:28:07 +00:00
}
}
2011-12-11 14:40:25 +00:00
/** Cart ******************************************************************/
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_shipping_calculator' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the cart shipping calculator .
*
* @ access public
2012-08-15 18:15:06 +00:00
* @ subpackage Cart
2012-08-14 15:30:23 +00:00
* @ return void
*/
2013-11-25 14:35:10 +00:00
function woocommerce_shipping_calculator () {
2013-11-25 12:45:04 +00:00
wc_get_template ( 'cart/shipping-calculator.php' );
2011-08-10 17:11:11 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_cart_totals' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the cart totals .
*
* @ access public
2012-08-15 18:15:06 +00:00
* @ subpackage Cart
2012-08-14 15:30:23 +00:00
* @ return void
*/
2013-11-25 14:35:10 +00:00
function woocommerce_cart_totals () {
2013-11-25 12:45:04 +00:00
wc_get_template ( 'cart/cart-totals.php' );
2011-09-11 16:42:50 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_cross_sell_display' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the cart cross - sells .
*
2013-06-05 16:29:06 +00:00
* @ param integer $posts_per_page
* @ param integer $columns
* @ param string $orderby
2012-08-14 15:30:23 +00:00
*/
2013-11-25 14:35:10 +00:00
function woocommerce_cross_sell_display ( $posts_per_page = 2 , $columns = 2 , $orderby = 'rand' ) {
2013-11-25 12:45:04 +00:00
wc_get_template ( 'cart/cross-sells.php' , array (
2013-06-05 16:29:06 +00:00
'posts_per_page' => $posts_per_page ,
'orderby' => $orderby ,
'columns' => $columns
) );
2011-12-12 12:28:07 +00:00
}
}
2012-07-25 17:59:12 +00:00
/** Mini-Cart *************************************************************/
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_mini_cart' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the Mini - cart - used by cart widget
*
* @ access public
* @ return void
*/
2013-11-25 14:35:10 +00:00
function woocommerce_mini_cart ( $args = array () ) {
2012-08-08 08:58:36 +00:00
2012-07-25 17:59:12 +00:00
$defaults = array (
'list_class' => ''
);
$args = wp_parse_args ( $args , $defaults );
2012-08-08 08:58:36 +00:00
2013-11-25 12:45:04 +00:00
wc_get_template ( 'cart/mini-cart.php' , $args );
2012-07-25 17:59:12 +00:00
}
}
2011-12-11 14:40:25 +00:00
/** Login *****************************************************************/
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_login_form' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the WooCommerce Login Form
*
* @ access public
2012-08-15 18:15:06 +00:00
* @ subpackage Forms
2012-08-14 15:30:23 +00:00
* @ return void
*/
2013-11-25 14:35:10 +00:00
function woocommerce_login_form ( $args = array () ) {
2012-02-03 16:17:35 +00:00
2011-12-12 12:28:07 +00:00
$defaults = array (
2013-02-25 10:17:16 +00:00
'message' => '' ,
'redirect' => '' ,
'hidden' => false
2011-12-12 12:28:07 +00:00
);
2011-11-24 00:24:24 +00:00
2012-04-25 09:51:20 +00:00
$args = wp_parse_args ( $args , $defaults );
2013-11-28 17:23:41 +00:00
wc_get_template ( 'global/form-login.php' , $args );
2011-08-10 17:11:11 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_checkout_login_form' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the WooCommerce Checkout Login Form
*
* @ access public
2012-08-15 18:15:06 +00:00
* @ subpackage Checkout
2012-08-14 15:30:23 +00:00
* @ return void
*/
2013-11-25 14:35:10 +00:00
function woocommerce_checkout_login_form () {
2013-11-25 12:45:04 +00:00
wc_get_template ( 'checkout/form-login.php' , array ( 'checkout' => WC () -> checkout () ) );
2011-08-10 17:11:11 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_breadcrumb' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the WooCommerce Breadcrumb
*
* @ access public
* @ return void
*/
2013-11-25 14:35:10 +00:00
function woocommerce_breadcrumb ( $args = array () ) {
2012-04-25 09:51:20 +00:00
2012-12-28 16:06:56 +00:00
$defaults = apply_filters ( 'woocommerce_breadcrumb_defaults' , array (
2013-01-03 11:57:33 +00:00
'delimiter' => ' / ' ,
2013-11-18 12:53:45 +00:00
'wrap_before' => '<nav class="woocommerce-breadcrumb" ' . ( is_single () ? 'itemprop="breadcrumb"' : '' ) . '>' ,
2013-01-03 11:54:07 +00:00
'wrap_after' => '</nav>' ,
2012-12-28 16:06:56 +00:00
'before' => '' ,
'after' => '' ,
2012-12-28 16:11:04 +00:00
'home' => _x ( 'Home' , 'breadcrumb' , 'woocommerce' ),
2012-12-28 16:06:56 +00:00
) );
2011-11-24 00:24:24 +00:00
2012-12-28 16:06:56 +00:00
$args = wp_parse_args ( $args , $defaults );
2011-11-24 00:24:24 +00:00
2013-11-28 17:23:41 +00:00
wc_get_template ( 'global/breadcrumb.php' , $args );
2011-08-10 17:11:11 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_order_review' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the Order review table for the checkout .
*
* @ access public
2012-08-15 18:15:06 +00:00
* @ subpackage Checkout
2012-08-14 15:30:23 +00:00
* @ return void
*/
2013-11-25 14:35:10 +00:00
function woocommerce_order_review () {
2013-11-25 12:45:04 +00:00
wc_get_template ( 'checkout/review-order.php' , array ( 'checkout' => WC () -> checkout () ) );
2011-12-11 15:40:17 +00:00
}
2011-09-04 00:02:44 +00:00
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_checkout_coupon_form' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Output the Coupon form for the checkout .
*
* @ access public
2012-08-15 18:15:06 +00:00
* @ subpackage Checkout
2012-08-14 15:30:23 +00:00
* @ return void
*/
2013-11-25 14:35:10 +00:00
function woocommerce_checkout_coupon_form () {
2013-11-25 12:45:04 +00:00
wc_get_template ( 'checkout/form-coupon.php' , array ( 'checkout' => WC () -> checkout () ) );
2011-12-19 17:10:53 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_products_will_display' ) ) {
2012-10-14 12:06:37 +00:00
/**
* Check if we will be showing products or not ( and not subcats only )
*
* @ access public
* @ subpackage Loop
2013-11-27 18:20:31 +00:00
* @ return bool
2012-10-14 12:06:37 +00:00
*/
2013-11-25 14:35:10 +00:00
function woocommerce_products_will_display () {
2014-02-06 09:21:47 +00:00
if ( is_shop () )
return get_option ( 'woocommerce_shop_page_display' ) != 'subcategories' ;
2012-11-27 16:22:47 +00:00
2014-02-06 09:21:47 +00:00
if ( ! is_product_taxonomy () )
2012-10-14 12:06:37 +00:00
return false ;
2012-11-27 16:22:47 +00:00
2012-10-14 12:06:37 +00:00
if ( is_search () || is_filtered () || is_paged () )
return true ;
2012-11-27 16:22:47 +00:00
2012-11-08 18:05:18 +00:00
$term = get_queried_object ();
2012-11-27 16:22:47 +00:00
if ( is_product_category () ) {
2012-11-08 18:05:18 +00:00
switch ( get_woocommerce_term_meta ( $term -> term_id , 'display_type' , true ) ) {
case 'products' :
case 'both' :
return true ;
break ;
case '' :
if ( get_option ( 'woocommerce_category_archive_display' ) != 'subcategories' )
return true ;
break ;
}
}
2012-11-27 16:22:47 +00:00
2014-02-06 09:21:47 +00:00
global $wpdb ;
2012-11-27 16:22:47 +00:00
2014-02-06 09:21:47 +00:00
$parent_id = empty ( $term -> term_id ) ? 0 : $term -> term_id ;
$taxonomy = empty ( $term -> taxonomy ) ? '' : $term -> taxonomy ;
$products_will_display = false ;
2012-11-27 16:22:47 +00:00
2014-02-06 09:21:47 +00:00
if ( ! $parent_id && ! $taxonomy ) {
return true ;
}
if ( false === ( $products_will_display = get_transient ( 'wc_products_will_display_' . $parent_id ) ) ) {
$has_children = $wpdb -> get_col ( $wpdb -> prepare ( " SELECT term_id FROM { $wpdb -> term_taxonomy } WHERE parent = %d AND taxonomy = %s " , $parent_id , $taxonomy ) );
if ( $has_children ) {
// Check terms have products inside - parents first
if ( sizeof ( get_objects_in_term ( $has_children , $taxonomy ) ) > 0 ) {
$products_will_display = true ;
} else {
// If we get here, the parents were empty so we're forced to check children
foreach ( $has_children as $term ) {
$children = get_term_children ( $term , $taxonomy );
if ( sizeof ( get_objects_in_term ( $children , $taxonomy ) ) > 0 ) {
$products_will_display = true ;
break ;
}
}
}
2012-10-14 12:06:37 +00:00
} else {
2014-02-06 09:21:47 +00:00
$products_will_display = true ;
2012-10-14 12:06:37 +00:00
}
}
2014-02-06 09:21:47 +00:00
set_transient ( 'wc_products_will_display_' . $parent_id , $products_will_display );
return $products_will_display ;
2012-10-14 12:06:37 +00:00
}
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_product_subcategories' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Display product sub categories as thumbnails .
*
* @ access public
2012-08-15 18:15:06 +00:00
* @ subpackage Loop
2013-11-27 18:20:31 +00:00
* @ param array $args
* @ return bool
2012-08-14 15:30:23 +00:00
*/
2013-11-25 14:35:10 +00:00
function woocommerce_product_subcategories ( $args = array () ) {
2013-09-12 13:41:02 +00:00
global $wp_query ;
2012-08-08 08:58:36 +00:00
2012-07-11 12:50:24 +00:00
$defaults = array (
'before' => '' ,
2012-07-19 18:34:49 +00:00
'after' => '' ,
'force_display' => false
2012-07-11 12:50:24 +00:00
);
2012-04-25 09:51:20 +00:00
2012-07-11 12:50:24 +00:00
$args = wp_parse_args ( $args , $defaults );
2012-08-08 08:58:36 +00:00
2012-07-11 14:13:06 +00:00
extract ( $args );
2012-08-08 08:58:36 +00:00
2012-07-19 18:34:49 +00:00
// Main query only
if ( ! is_main_query () && ! $force_display ) return ;
2012-08-08 08:58:36 +00:00
2012-10-14 12:06:37 +00:00
// Don't show when filtering, searching or when on page > 1 and ensure we're on a product archive
if ( is_search () || is_filtered () || is_paged () || ( ! is_product_category () && ! is_shop () ) ) return ;
2012-11-27 16:22:47 +00:00
2012-10-14 12:06:37 +00:00
// Check categories are enabled
2012-11-08 18:05:18 +00:00
if ( is_shop () && get_option ( 'woocommerce_shop_page_display' ) == '' ) return ;
2012-11-27 16:22:47 +00:00
2012-07-11 12:50:24 +00:00
// Find the category + category parent, if applicable
2012-10-14 12:06:37 +00:00
$term = get_queried_object ();
$parent_id = empty ( $term -> term_id ) ? 0 : $term -> term_id ;
2012-11-27 16:22:47 +00:00
2012-11-08 18:05:18 +00:00
if ( is_product_category () ) {
$display_type = get_woocommerce_term_meta ( $term -> term_id , 'display_type' , true );
2012-11-27 16:22:47 +00:00
2012-11-08 18:05:18 +00:00
switch ( $display_type ) {
case 'products' :
return ;
break ;
case '' :
if ( get_option ( 'woocommerce_category_archive_display' ) == '' )
return ;
break ;
}
}
2012-04-25 09:51:20 +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
2011-12-11 15:40:17 +00:00
$args = array (
2012-10-14 12:06:37 +00:00
'child_of' => $parent_id ,
2012-07-11 12:50:24 +00:00
'menu_order' => 'ASC' ,
'hide_empty' => 1 ,
'hierarchical' => 1 ,
'taxonomy' => 'product_cat' ,
'pad_counts' => 1
2012-04-25 09:51:20 +00:00
);
2013-01-10 12:56:04 +00:00
$product_categories = get_categories ( apply_filters ( 'woocommerce_product_subcategories_args' , $args ) );
2012-08-08 08:58:36 +00:00
2012-07-11 12:50:24 +00:00
$product_category_found = false ;
2012-04-25 09:51:20 +00:00
if ( $product_categories ) {
2012-08-08 08:58:36 +00:00
2012-07-11 12:50:24 +00:00
foreach ( $product_categories as $category ) {
2012-08-08 08:58:36 +00:00
2013-07-25 06:40:37 +00:00
if ( $category -> parent != $parent_id || $category -> count == 0 )
2012-07-11 12:50:24 +00:00
continue ;
2012-08-08 08:58:36 +00:00
2012-07-11 12:50:24 +00:00
if ( ! $product_category_found ) {
// We found a category
$product_category_found = true ;
2013-01-31 15:23:37 +00:00
echo $before ;
2012-07-11 12:50:24 +00:00
}
2012-08-08 08:58:36 +00:00
2013-11-25 12:45:04 +00:00
wc_get_template ( 'content-product_cat.php' , array (
2012-07-11 12:50:24 +00:00
'category' => $category
2012-04-25 09:51:20 +00:00
) );
2012-08-08 08:58:36 +00:00
2012-04-25 09:51:20 +00:00
}
}
2012-08-08 08:58:36 +00:00
2012-07-11 12:50:24 +00:00
// If we are hiding products disable the loop and pagination
if ( $product_category_found ) {
2012-11-08 18:05:18 +00:00
if ( is_product_category () ) {
$display_type = get_woocommerce_term_meta ( $term -> term_id , 'display_type' , true );
2012-11-27 16:22:47 +00:00
2012-11-08 18:05:18 +00:00
switch ( $display_type ) {
case 'subcategories' :
$wp_query -> post_count = 0 ;
$wp_query -> max_num_pages = 0 ;
break ;
case '' :
if ( get_option ( 'woocommerce_category_archive_display' ) == 'subcategories' ) {
$wp_query -> post_count = 0 ;
$wp_query -> max_num_pages = 0 ;
}
break ;
}
}
if ( is_shop () && get_option ( 'woocommerce_shop_page_display' ) == 'subcategories' ) {
$wp_query -> post_count = 0 ;
$wp_query -> max_num_pages = 0 ;
}
2012-11-27 16:22:47 +00:00
2013-01-31 15:23:37 +00:00
echo $after ;
2012-07-11 12:50:24 +00:00
return true ;
}
2012-08-08 08:58:36 +00:00
2011-12-11 15:40:17 +00:00
}
2011-10-07 19:27:10 +00:00
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_subcategory_thumbnail' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Show subcategory thumbnails .
*
* @ access public
* @ param mixed $category
2012-08-15 18:15:06 +00:00
* @ subpackage Loop
2012-08-14 15:30:23 +00:00
* @ return void
*/
2013-11-25 14:35:10 +00:00
function woocommerce_subcategory_thumbnail ( $category ) {
2012-11-27 15:37:01 +00:00
$small_thumbnail_size = apply_filters ( 'single_product_small_thumbnail_size' , 'shop_catalog' );
2013-09-12 13:41:02 +00:00
$dimensions = wc_get_image_size ( $small_thumbnail_size );
2012-11-27 15:37:01 +00:00
$thumbnail_id = get_woocommerce_term_meta ( $category -> term_id , 'thumbnail_id' , true );
2012-04-25 09:51:20 +00:00
if ( $thumbnail_id ) {
$image = wp_get_attachment_image_src ( $thumbnail_id , $small_thumbnail_size );
2011-12-11 15:40:17 +00:00
$image = $image [ 0 ];
2012-04-25 09:51:20 +00:00
} else {
2013-11-25 13:56:59 +00:00
$image = wc_placeholder_img_src ();
2012-04-25 09:51:20 +00:00
}
2014-02-17 10:48:43 +00:00
if ( $image ) {
// Prevent esc_url from breaking spaces in urls for image embeds
// Ref: http://core.trac.wordpress.org/ticket/23605
$image = str_replace ( ' ' , '%20' , $image );
echo '<img src="' . esc_url ( $image ) . '" alt="' . esc_attr ( $category -> name ) . '" width="' . esc_attr ( $dimensions [ 'width' ] ) . '" height="' . esc_attr ( $dimensions [ 'height' ] ) . '" />' ;
}
2011-12-11 15:40:17 +00:00
}
2011-10-07 19:27:10 +00:00
}
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_order_details_table' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Displays order details in a table .
*
* @ access public
* @ param mixed $order_id
2012-08-15 18:15:06 +00:00
* @ subpackage Orders
2012-08-14 15:30:23 +00:00
* @ return void
*/
2013-11-25 14:35:10 +00:00
function woocommerce_order_details_table ( $order_id ) {
2012-04-25 09:51:20 +00:00
if ( ! $order_id ) return ;
2012-02-03 16:17:35 +00:00
2013-11-25 12:45:04 +00:00
wc_get_template ( 'order/order-details.php' , array (
2012-02-03 16:17:35 +00:00
'order_id' => $order_id
2012-04-25 09:51:20 +00:00
) );
}
2011-12-21 16:03:45 +00:00
}
2013-06-05 10:13:36 +00:00
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_order_again_button' ) ) {
2013-06-05 10:13:36 +00:00
/**
* Display an 'order again' button on the view order page .
*
* @ access public
* @ param object $order
* @ subpackage Orders
* @ return void
*/
2013-11-25 14:35:10 +00:00
function woocommerce_order_again_button ( $order ) {
2013-06-05 10:13:36 +00:00
if ( ! $order || $order -> status != 'completed' )
return ;
?>
< p class = " order-again " >
2013-11-26 16:48:39 +00:00
< a href = " <?php echo wp_nonce_url( add_query_arg( 'order_again', $order->id ) , 'woocommerce-order_again' ); ?> " class = " button " >< ? php _e ( 'Order Again' , 'woocommerce' ); ?> </a>
2013-06-05 10:13:36 +00:00
</ p >
< ? php
}
}
2011-12-21 16:03:45 +00:00
/** Forms ****************************************************************/
2013-11-25 14:35:10 +00:00
if ( ! function_exists ( 'woocommerce_form_field' ) ) {
2012-08-14 15:30:23 +00:00
/**
* Outputs a checkout / address form field .
*
* @ access public
2012-08-15 18:15:06 +00:00
* @ subpackage Forms
2012-08-14 15:30:23 +00:00
* @ param mixed $key
* @ param mixed $args
2013-03-10 13:17:15 +00:00
* @ param string $value ( default : null )
2012-08-14 15:30:23 +00:00
* @ return void
2013-12-02 11:34:27 +00:00
* @ todo This function needs to be broken up in smaller pieces
2012-08-14 15:30:23 +00:00
*/
2013-11-25 14:35:10 +00:00
function woocommerce_form_field ( $key , $args , $value = null ) {
2011-12-21 16:03:45 +00:00
$defaults = array (
2012-12-10 14:50:49 +00:00
'type' => 'text' ,
'label' => '' ,
'placeholder' => '' ,
'maxlength' => false ,
'required' => false ,
'class' => array (),
'label_class' => array (),
2013-11-12 21:14:14 +00:00
'input_class' => array (),
2012-12-10 14:50:49 +00:00
'return' => false ,
'options' => array (),
'custom_attributes' => array (),
2013-03-03 14:51:25 +00:00
'validate' => array (),
2013-03-10 13:17:15 +00:00
'default' => '' ,
2011-12-21 16:03:45 +00:00
);
2012-04-25 09:51:20 +00:00
$args = wp_parse_args ( $args , $defaults );
2012-11-19 15:05:23 +00:00
if ( ( ! empty ( $args [ 'clear' ] ) ) ) $after = '<div class="clear"></div>' ; else $after = '' ;
2012-04-25 09:51:20 +00:00
2012-12-10 14:50:49 +00:00
if ( $args [ 'required' ] ) {
$args [ 'class' ][] = 'validate-required' ;
$required = ' <abbr class="required" title="' . esc_attr__ ( 'required' , 'woocommerce' ) . '">*</abbr>' ;
} else {
$required = '' ;
}
2012-09-10 22:06:44 +00:00
$args [ 'maxlength' ] = ( $args [ 'maxlength' ] ) ? 'maxlength="' . absint ( $args [ 'maxlength' ] ) . '"' : '' ;
2012-11-27 16:22:47 +00:00
2013-08-13 16:26:21 +00:00
if ( is_string ( $args [ 'label_class' ] ) )
$args [ 'label_class' ] = array ( $args [ 'label_class' ] );
2013-03-10 13:17:15 +00:00
if ( is_null ( $value ) )
$value = $args [ 'default' ];
2013-03-03 14:51:25 +00:00
2012-11-19 15:05:23 +00:00
// Custom attribute handling
$custom_attributes = array ();
2012-11-27 16:22:47 +00:00
2012-11-19 15:05:23 +00:00
if ( ! empty ( $args [ 'custom_attributes' ] ) && is_array ( $args [ 'custom_attributes' ] ) )
2013-02-26 11:51:12 +00:00
foreach ( $args [ 'custom_attributes' ] as $attribute => $attribute_value )
$custom_attributes [] = esc_attr ( $attribute ) . '="' . esc_attr ( $attribute_value ) . '"' ;
2012-11-27 16:22:47 +00:00
2012-12-10 14:50:49 +00:00
if ( ! empty ( $args [ 'validate' ] ) )
foreach ( $args [ 'validate' ] as $validate )
$args [ 'class' ][] = 'validate-' . $validate ;
2012-04-25 09:51:20 +00:00
switch ( $args [ 'type' ] ) {
case " country " :
2012-11-27 16:22:47 +00:00
2013-09-12 13:41:02 +00:00
$countries = $key == 'shipping_country' ? WC () -> countries -> get_shipping_countries () : WC () -> countries -> get_allowed_countries ();
2013-08-02 15:54:28 +00:00
if ( sizeof ( $countries ) == 1 ) {
2012-11-27 16:22:47 +00:00
2013-01-03 12:34:31 +00:00
$field = '<p class="form-row ' . esc_attr ( implode ( ' ' , $args [ 'class' ] ) ) . '" id="' . esc_attr ( $key ) . '_field">' ;
if ( $args [ 'label' ] )
$field .= '<label class="' . implode ( ' ' , $args [ 'label_class' ] ) . '">' . $args [ 'label' ] . '</label>' ;
2012-11-27 16:22:47 +00:00
2013-08-02 15:54:28 +00:00
$field .= '<strong>' . current ( array_values ( $countries ) ) . '</strong>' ;
2012-11-27 16:22:47 +00:00
2013-08-02 15:54:28 +00:00
$field .= '<input type="hidden" name="' . esc_attr ( $key ) . '" id="' . esc_attr ( $key ) . '" value="' . current ( array_keys ( $countries ) ) . '" ' . implode ( ' ' , $custom_attributes ) . ' class="country_to_state" />' ;
2012-11-27 16:22:47 +00:00
2012-11-06 12:43:17 +00:00
$field .= '</p>' . $after ;
2012-11-27 16:22:47 +00:00
2012-11-06 12:43:17 +00:00
} else {
2012-04-25 09:51:20 +00:00
2013-08-13 12:17:32 +00:00
$field = '<p class="form-row ' . esc_attr ( implode ( ' ' , $args [ 'class' ] ) ) . '" id="' . esc_attr ( $key ) . '_field">'
. '<label for="' . esc_attr ( $key ) . '" class="' . implode ( ' ' , $args [ 'label_class' ] ) . '">' . $args [ 'label' ] . $required . '</label>'
. '<select name="' . esc_attr ( $key ) . '" id="' . esc_attr ( $key ) . '" class="country_to_state country_select" ' . implode ( ' ' , $custom_attributes ) . '>'
. '<option value="">' . __ ( 'Select a country…' , 'woocommerce' ) . '</option>' ;
2012-11-27 16:22:47 +00:00
2013-08-02 15:54:28 +00:00
foreach ( $countries as $ckey => $cvalue )
2013-11-20 19:11:59 +00:00
$field .= '<option value="' . esc_attr ( $ckey ) . '" ' . selected ( $value , $ckey , false ) . '>' . __ ( $cvalue , 'woocommerce' ) . '</option>' ;
2012-11-27 16:22:47 +00:00
2012-11-06 12:43:17 +00:00
$field .= '</select>' ;
2012-11-27 16:22:47 +00:00
2012-11-06 12:43:17 +00:00
$field .= '<noscript><input type="submit" name="woocommerce_checkout_update_totals" value="' . __ ( 'Update country' , 'woocommerce' ) . '" /></noscript>' ;
2012-11-27 16:22:47 +00:00
2012-11-06 12:43:17 +00:00
$field .= '</p>' . $after ;
2012-11-27 16:22:47 +00:00
2012-04-25 09:51:20 +00:00
}
2011-12-21 16:03:45 +00:00
break ;
2012-04-25 09:51:20 +00:00
case " state " :
/* Get Country */
2012-07-16 19:21:44 +00:00
$country_key = $key == 'billing_state' ? 'billing_country' : 'shipping_country' ;
2012-04-25 09:51:20 +00:00
2012-07-16 19:21:44 +00:00
if ( isset ( $_POST [ $country_key ] ) ) {
2013-11-25 13:34:21 +00:00
$current_cc = wc_clean ( $_POST [ $country_key ] );
2012-04-25 09:51:20 +00:00
} elseif ( is_user_logged_in () ) {
2012-07-16 19:21:44 +00:00
$current_cc = get_user_meta ( get_current_user_id () , $country_key , true );
2013-02-06 23:57:57 +00:00
if ( ! $current_cc ) {
2013-09-12 13:41:02 +00:00
$current_cc = apply_filters ( 'default_checkout_country' , ( WC () -> customer -> get_country ()) ? WC () -> customer -> get_country () : WC () -> countries -> get_base_country ());
2013-02-06 23:57:57 +00:00
}
2012-07-16 19:21:44 +00:00
} elseif ( $country_key == 'billing_country' ) {
2013-09-12 13:41:02 +00:00
$current_cc = apply_filters ( 'default_checkout_country' , ( WC () -> customer -> get_country ()) ? WC () -> customer -> get_country () : WC () -> countries -> get_base_country ());
2012-04-25 09:51:20 +00:00
} else {
2013-09-12 13:41:02 +00:00
$current_cc = apply_filters ( 'default_checkout_country' , ( WC () -> customer -> get_shipping_country ()) ? WC () -> customer -> get_shipping_country () : WC () -> countries -> get_base_country ());
2012-04-25 09:51:20 +00:00
}
2012-08-08 08:58:36 +00:00
2013-09-12 13:41:02 +00:00
$states = WC () -> countries -> get_states ( $current_cc );
2012-04-25 09:51:20 +00:00
2012-07-18 19:07:32 +00:00
if ( is_array ( $states ) && empty ( $states ) ) {
2012-08-08 08:58:36 +00:00
2012-10-16 13:46:23 +00:00
$field = '<p class="form-row ' . esc_attr ( implode ( ' ' , $args [ 'class' ] ) ) . '" id="' . esc_attr ( $key ) . '_field" style="display: none">' ;
2013-01-03 12:34:31 +00:00
if ( $args [ 'label' ] )
$field .= '<label for="' . esc_attr ( $key ) . '" class="' . implode ( ' ' , $args [ 'label_class' ] ) . '">' . $args [ 'label' ] . $required . '</label>' ;
2013-11-20 19:11:59 +00:00
$field .= '<input type="hidden" class="hidden" name="' . esc_attr ( $key ) . '" id="' . esc_attr ( $key ) . '" value="" ' . implode ( ' ' , $custom_attributes ) . ' placeholder="' . esc_attr ( $args [ 'placeholder' ] ) . '" />' ;
2012-07-18 19:07:32 +00:00
$field .= '</p>' . $after ;
2012-08-08 08:58:36 +00:00
2012-07-18 19:07:32 +00:00
} elseif ( is_array ( $states ) ) {
2012-08-08 08:58:36 +00:00
2012-10-16 13:46:23 +00:00
$field = '<p class="form-row ' . esc_attr ( implode ( ' ' , $args [ 'class' ] ) ) . '" id="' . esc_attr ( $key ) . '_field">' ;
2013-01-03 12:34:31 +00:00
if ( $args [ 'label' ] )
$field .= '<label for="' . esc_attr ( $key ) . '" class="' . implode ( ' ' , $args [ 'label_class' ] ) . '">' . $args [ 'label' ] . $required . '</label>' ;
2013-11-20 19:11:59 +00:00
$field .= '<select name="' . esc_attr ( $key ) . '" id="' . esc_attr ( $key ) . '" class="state_select" ' . implode ( ' ' , $custom_attributes ) . ' placeholder="' . esc_attr ( $args [ 'placeholder' ] ) . ' " >
2012-07-18 19:07:32 +00:00
< option value = " " > '.__( ' Select a state & hellip ; ', ' woocommerce ' ) .' </ option > ' ;
2012-08-08 08:58:36 +00:00
2012-07-18 19:07:32 +00:00
foreach ( $states as $ckey => $cvalue )
2013-11-20 19:11:59 +00:00
$field .= '<option value="' . esc_attr ( $ckey ) . '" ' . selected ( $value , $ckey , false ) . '>' . __ ( $cvalue , 'woocommerce' ) . '</option>' ;
2012-08-08 08:58:36 +00:00
2012-04-25 09:51:20 +00:00
$field .= '</select>' ;
2012-07-18 19:07:32 +00:00
$field .= '</p>' . $after ;
2012-08-08 08:58:36 +00:00
2012-04-25 09:51:20 +00:00
} else {
2012-08-08 08:58:36 +00:00
2012-10-16 13:46:23 +00:00
$field = '<p class="form-row ' . esc_attr ( implode ( ' ' , $args [ 'class' ] ) ) . '" id="' . esc_attr ( $key ) . '_field">' ;
2013-01-03 12:34:31 +00:00
if ( $args [ 'label' ] )
$field .= '<label for="' . esc_attr ( $key ) . '" class="' . implode ( ' ' , $args [ 'label_class' ] ) . '">' . $args [ 'label' ] . $required . '</label>' ;
2013-11-20 19:11:59 +00:00
$field .= '<input type="text" class="input-text ' . implode ( ' ' , $args [ 'input_class' ] ) . '" value="' . esc_attr ( $value ) . '" placeholder="' . esc_attr ( $args [ 'placeholder' ] ) . '" name="' . esc_attr ( $key ) . '" id="' . esc_attr ( $key ) . '" ' . implode ( ' ' , $custom_attributes ) . ' />' ;
2012-07-18 19:07:32 +00:00
$field .= '</p>' . $after ;
2012-08-08 08:58:36 +00:00
2012-04-25 09:51:20 +00:00
}
2011-12-21 16:03:45 +00:00
break ;
2012-04-25 09:51:20 +00:00
case " textarea " :
2013-01-03 12:34:31 +00:00
$field = '<p class="form-row ' . esc_attr ( implode ( ' ' , $args [ 'class' ] ) ) . '" id="' . esc_attr ( $key ) . '_field">' ;
if ( $args [ 'label' ] )
$field .= '<label for="' . esc_attr ( $key ) . '" class="' . implode ( ' ' , $args [ 'label_class' ] ) . '">' . $args [ 'label' ] . $required . '</label>' ;
2013-11-25 09:41:37 +00:00
$field .= '<textarea name="' . esc_attr ( $key ) . '" class="input-text ' . implode ( ' ' , $args [ 'input_class' ] ) . '" id="' . esc_attr ( $key ) . '" placeholder="' . esc_attr ( $args [ 'placeholder' ] ) . '"' . ( empty ( $args [ 'custom_attributes' ][ 'rows' ] ) ? ' rows="2"' : '' ) . ( empty ( $args [ 'custom_attributes' ][ 'cols' ] ) ? ' cols="5"' : '' ) . implode ( ' ' , $custom_attributes ) . '>' . esc_textarea ( $value ) . ' </ textarea >
2012-04-25 09:51:20 +00:00
</ p > ' . $after ;
break ;
case " checkbox " :
2012-10-16 13:46:23 +00:00
$field = '<p class="form-row ' . esc_attr ( implode ( ' ' , $args [ 'class' ] ) ) . '" id="' . esc_attr ( $key ) . ' _field " >
2013-11-20 19:11:59 +00:00
< input type = " ' . esc_attr( $args['type'] ) . ' " class = " input-checkbox " name = " ' . esc_attr( $key ) . ' " id = " ' . esc_attr( $key ) . ' " value = " 1 " '.checked( $value, 1, false ) .' />
2012-11-19 15:05:23 +00:00
< label for = " ' . esc_attr( $key ) . ' " class = " checkbox ' . implode( ' ', $args['label_class'] ) .' " ' . implode( ' ', $custom_attributes ) . ' > ' . $args[' label '] . $required . ' </ label >
2012-04-25 09:51:20 +00:00
</ p > ' . $after ;
2011-12-21 16:03:45 +00:00
break ;
2012-04-25 09:51:20 +00:00
case " password " :
2013-01-03 12:34:31 +00:00
$field = '<p class="form-row ' . esc_attr ( implode ( ' ' , $args [ 'class' ] ) ) . '" id="' . esc_attr ( $key ) . '_field">' ;
if ( $args [ 'label' ] )
$field .= '<label for="' . esc_attr ( $key ) . '" class="' . implode ( ' ' , $args [ 'label_class' ] ) . '">' . $args [ 'label' ] . $required . '</label>' ;
2013-11-20 19:11:59 +00:00
$field .= '<input type="password" class="input-text ' . implode ( ' ' , $args [ 'input_class' ] ) . '" name="' . esc_attr ( $key ) . '" id="' . esc_attr ( $key ) . '" placeholder="' . esc_attr ( $args [ 'placeholder' ] ) . '" value="' . esc_attr ( $value ) . '" ' . implode ( ' ' , $custom_attributes ) . ' />
2012-04-25 09:51:20 +00:00
</ p > ' . $after ;
2011-12-22 01:02:42 +00:00
break ;
2012-04-25 09:51:20 +00:00
case " text " :
2013-01-03 12:34:31 +00:00
$field = '<p class="form-row ' . esc_attr ( implode ( ' ' , $args [ 'class' ] ) ) . '" id="' . esc_attr ( $key ) . '_field">' ;
if ( $args [ 'label' ] )
$field .= '<label for="' . esc_attr ( $key ) . '" class="' . implode ( ' ' , $args [ 'label_class' ] ) . '">' . $args [ 'label' ] . $required . '</label>' ;
2013-11-20 19:11:59 +00:00
$field .= '<input type="text" class="input-text ' . implode ( ' ' , $args [ 'input_class' ] ) . '" name="' . esc_attr ( $key ) . '" id="' . esc_attr ( $key ) . '" placeholder="' . esc_attr ( $args [ 'placeholder' ] ) . '" ' . $args [ 'maxlength' ] . ' value="' . esc_attr ( $value ) . '" ' . implode ( ' ' , $custom_attributes ) . ' />
2012-04-25 09:51:20 +00:00
</ p > ' . $after ;
2011-12-22 01:02:42 +00:00
2011-12-21 16:03:45 +00:00
break ;
2012-04-25 09:51:20 +00:00
case " select " :
$options = '' ;
if ( ! empty ( $args [ 'options' ] ) )
foreach ( $args [ 'options' ] as $option_key => $option_text )
2012-10-16 13:46:23 +00:00
$options .= '<option value="' . esc_attr ( $option_key ) . '" ' . selected ( $value , $option_key , false ) . '>' . esc_attr ( $option_text ) . '</option>' ;
2012-04-25 09:51:20 +00:00
2013-01-03 12:34:31 +00:00
$field = '<p class="form-row ' . esc_attr ( implode ( ' ' , $args [ 'class' ] ) ) . '" id="' . esc_attr ( $key ) . '_field">' ;
if ( $args [ 'label' ] )
$field .= '<label for="' . esc_attr ( $key ) . '" class="' . implode ( ' ' , $args [ 'label_class' ] ) . '">' . $args [ 'label' ] . $required . '</label>' ;
$field .= '<select name="' . esc_attr ( $key ) . '" id="' . esc_attr ( $key ) . '" class="select" ' . implode ( ' ' , $custom_attributes ) . ' >
2012-04-25 09:51:20 +00:00
' . $options . '
</ select >
</ p > ' . $after ;
2011-12-21 16:03:45 +00:00
break ;
2012-04-25 09:51:20 +00:00
default :
2012-11-19 15:05:23 +00:00
$field = apply_filters ( 'woocommerce_form_field_' . $args [ 'type' ], '' , $key , $args , $value );
2012-04-25 09:51:20 +00:00
2012-02-15 17:57:12 +00:00
break ;
2012-04-25 09:51:20 +00:00
}
2012-02-15 17:57:12 +00:00
2012-04-25 09:51:20 +00:00
if ( $args [ 'return' ] ) return $field ; else echo $field ;
2011-12-21 16:03:45 +00:00
}
2012-03-12 17:23:04 +00:00
}
2012-04-16 13:32:58 +00:00
2012-08-14 15:30:23 +00:00
if ( ! function_exists ( 'get_product_search_form' ) ) {
/**
* Output Product search forms .
*
* @ access public
2012-08-15 18:15:06 +00:00
* @ subpackage Forms
2012-08-14 15:30:23 +00:00
* @ param bool $echo ( default : true )
2013-11-29 18:50:31 +00:00
* @ return string
2013-12-02 11:34:27 +00:00
* @ todo This function needs to be broken up in smaller pieces
2012-08-14 15:30:23 +00:00
*/
function get_product_search_form ( $echo = true ) {
do_action ( 'get_product_search_form' );
$search_form_template = locate_template ( 'product-searchform.php' );
if ( '' != $search_form_template ) {
require $search_form_template ;
return ;
}
2012-04-16 13:32:58 +00:00
2012-08-14 15:30:23 +00:00
$form = '<form role="search" method="get" id="searchform" action="' . esc_url ( home_url ( '/' ) ) . ' " >
< div >
< label class = " screen-reader-text " for = " s " > ' . __( ' Search for : ', ' woocommerce ' ) . ' </ label >
< input type = " text " value = " ' . get_search_query() . ' " name = " s " id = " s " placeholder = " ' . __( 'Search for products', 'woocommerce' ) . ' " />
2012-11-03 09:31:14 +00:00
< input type = " submit " id = " searchsubmit " value = " '. esc_attr__( 'Search', 'woocommerce' ) .' " />
2012-08-14 15:30:23 +00:00
< input type = " hidden " name = " post_type " value = " product " />
</ div >
</ form > ' ;
if ( $echo )
echo apply_filters ( 'get_product_search_form' , $form );
else
return apply_filters ( 'get_product_search_form' , $form );
2012-04-16 13:32:58 +00:00
}
2013-02-06 23:57:57 +00:00
}