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
*/
2014-09-20 19:10:45 +00:00
if ( ! defined ( 'ABSPATH' ) ) {
exit ; // Exit if accessed directly
}
2012-10-15 10:57:58 +00:00
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
2014-09-18 12:23:00 +00:00
elseif ( is_search () && is_post_type_archive ( 'product' ) && apply_filters ( 'woocommerce_redirect_single_search_result' , true ) && $wp_query -> found_posts == 1 ) {
2014-08-19 10:09:29 +00:00
$product = wc_get_product ( $wp_query -> post );
2013-08-09 16:11:15 +00:00
2015-01-19 10:43:43 +00:00
if ( $product && $product -> is_visible () ) {
2013-08-09 16:11:15 +00:00
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
}
}
2014-03-03 13:37:45 +00:00
add_action ( 'template_redirect' , 'wc_template_redirect' );
2013-08-09 16:11:15 +00:00
2014-11-26 00:02:56 +00:00
/**
* Enables template debug mode
*/
function wc_template_debug_mode () {
if ( ! defined ( 'WC_TEMPLATE_DEBUG_MODE' ) ) {
$status_options = get_option ( 'woocommerce_status_options' , array () );
if ( ! empty ( $status_options [ 'template_debug_mode' ] ) && current_user_can ( 'manage_options' ) ) {
define ( 'WC_TEMPLATE_DEBUG_MODE' , true );
} else {
define ( 'WC_TEMPLATE_DEBUG_MODE' , false );
}
}
}
add_action ( 'after_setup_theme' , 'wc_template_debug_mode' , 20 );
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 ;
2014-08-19 10:09:29 +00:00
$GLOBALS [ 'product' ] = wc_get_product ( $post );
2013-09-12 13:41:02 +00:00
return $GLOBALS [ 'product' ];
}
2014-03-03 13:37:45 +00:00
add_action ( 'the_post' , 'wc_setup_product_data' );
2013-09-12 13:41:02 +00:00
2014-03-13 13:07:44 +00:00
if ( ! function_exists ( 'woocommerce_reset_loop' ) ) {
/**
* Reset the loop 's index and columns when we' re done outputting a product loop .
*
* @ subpackage Loop
*/
function woocommerce_reset_loop () {
global $woocommerce_loop ;
// Reset loop/columns globals when starting a new loop
$woocommerce_loop [ 'loop' ] = $woocommerce_loop [ 'columns' ] = '' ;
}
}
add_filter ( 'loop_end' , 'woocommerce_reset_loop' );
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' );
2015-01-29 14:33:06 +00:00
echo '<link rel="alternate" type="application/rss+xml" title="' . __ ( 'New products' , 'woocommerce' ) . '" href="' . esc_url ( $feed ) . '" />' ;
2013-11-25 14:35:10 +00:00
} 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' ));
2015-01-29 14:33:06 +00:00
echo '<link rel="alternate" type="application/rss+xml" title="' . sprintf ( __ ( 'New products added to %s' , 'woocommerce' ), urlencode ( $term -> name )) . '" href="' . esc_url ( $feed ) . '" />' ;
2013-11-25 14:35:10 +00:00
} 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' ));
2015-01-29 14:33:06 +00:00
echo '<link rel="alternate" type="application/rss+xml" title="' . sprintf ( __ ( 'New products tagged %s' , 'woocommerce' ), urlencode ( $term -> name )) . '" href="' . esc_url ( $feed ) . '" />' ;
2013-11-25 14:35:10 +00:00
}
}
2013-09-12 13:41:02 +00:00
/**
* Output generator tag to aid debugging .
*
* @ access public
* @ return void
*/
2014-03-12 11:53:59 +00:00
function wc_generator_tag ( $gen , $type ) {
switch ( $type ) {
case 'html' :
$gen .= " \n " . '<meta name="generator" content="WooCommerce ' . esc_attr ( WC_VERSION ) . '">' ;
break ;
case 'xhtml' :
$gen .= " \n " . '<meta name="generator" content="WooCommerce ' . esc_attr ( WC_VERSION ) . '" />' ;
break ;
}
return $gen ;
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 = '' ) {
2014-07-28 17:05:36 +00:00
if ( ! $post_id || 'product' !== get_post_type ( $post_id ) ) {
2013-11-25 14:35:10 +00:00
return $classes ;
2014-07-28 17:05:36 +00:00
}
2013-11-25 14:35:10 +00:00
2014-08-19 10:09:29 +00:00
$product = wc_get_product ( $post_id );
2013-11-25 14:35:10 +00:00
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
2014-07-28 17:05:36 +00:00
$categories = get_the_terms ( $product -> id , 'product_cat' );
2013-11-25 14:35:10 +00:00
if ( ! empty ( $categories ) ) {
2014-07-28 17:05:36 +00:00
foreach ( $categories as $key => $value ) {
$classes [] = 'product-cat-' . $value -> slug ;
2013-11-25 14:35:10 +00:00
}
}
// add tag slugs
2014-07-28 17:05:36 +00:00
$tags = get_the_terms ( $product -> id , 'product_tag' );
2013-11-25 14:35:10 +00:00
if ( ! empty ( $tags ) ) {
2014-07-28 17:05:36 +00:00
foreach ( $tags as $key => $value ) {
$classes [] = 'product-tag-' . $value -> slug ;
2013-11-25 14:35:10 +00:00
}
}
$classes [] = $product -> stock_status ;
}
2014-07-28 17:05:36 +00:00
if ( false !== ( $key = array_search ( 'hentry' , $classes ) ) ) {
2014-02-23 11:13:42 +00:00
unset ( $classes [ $key ] );
}
2013-11-25 14:35:10 +00:00
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
*
*/
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 .
*
*/
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 .
*
*/
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 .
*
*/
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
*
*/
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
*
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
*
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
*
2012-08-15 18:15:06 +00:00
* @ subpackage Archives
2012-08-14 15:30:23 +00:00
*/
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 ) {
2015-01-16 12:32:41 +00:00
$description = wc_format_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
*
2012-08-15 18:15:06 +00:00
* @ subpackage Archives
2012-08-14 15:30:23 +00:00
*/
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 ) {
2015-01-16 12:32:41 +00:00
$description = wc_format_content ( $shop_page -> post_content );
2013-11-18 14:11:40 +00:00
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 .
*
2012-08-15 18:15:06 +00:00
* @ subpackage Loop
2012-08-14 15:30:23 +00:00
*/
2014-02-28 21:43:31 +00:00
function woocommerce_template_loop_add_to_cart ( $args = array () ) {
wc_get_template ( 'loop/add-to-cart.php' , $args );
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 .
*
2012-08-15 18:15:06 +00:00
* @ subpackage Loop
2012-08-14 15:30:23 +00:00
*/
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 .
*
2012-08-15 18:15:06 +00:00
* @ subpackage Loop
2012-08-14 15:30:23 +00:00
*/
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
*
* @ subpackage Loop
*/
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 .
*
2012-08-15 18:15:06 +00:00
* @ subpackage Loop
2012-08-14 15:30:23 +00:00
*/
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_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 () {
2014-06-08 20:33:11 +00:00
global $product ;
2013-08-20 12:52:06 +00:00
$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 .
*
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
2014-11-20 00:43:09 +00:00
if ( has_post_thumbnail () ) {
2012-08-08 08:58:36 +00:00
return get_the_post_thumbnail ( $post -> ID , $size );
2014-11-20 00:43:09 +00:00
} elseif ( wc_placeholder_img_src () ) {
2013-11-25 13:56:59 +00:00
return wc_placeholder_img ( $size );
2014-11-20 00:43:09 +00:00
}
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
*
2012-08-15 18:15:06 +00:00
* @ subpackage Loop
2012-08-14 15:30:23 +00:00
*/
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 .
*
2012-08-15 18:15:06 +00:00
* @ subpackage Loop
2012-08-14 15:30:23 +00:00
*/
2013-11-25 14:35:10 +00:00
function woocommerce_catalog_ordering () {
2014-07-30 16:23:24 +00:00
global $wp_query ;
2012-11-27 16:22:47 +00:00
2014-07-30 16:23:24 +00:00
if ( 1 == $wp_query -> found_posts || ! woocommerce_products_will_display () ) {
return ;
}
2014-09-10 08:32:24 +00:00
2014-07-30 16:23:24 +00:00
$orderby = isset ( $_GET [ 'orderby' ] ) ? wc_clean ( $_GET [ 'orderby' ] ) : apply_filters ( 'woocommerce_default_catalog_orderby' , get_option ( 'woocommerce_default_catalog_orderby' ) );
$show_default_orderby = 'menu_order' === apply_filters ( 'woocommerce_default_catalog_orderby' , get_option ( 'woocommerce_default_catalog_orderby' ) );
$catalog_orderby_options = apply_filters ( 'woocommerce_catalog_orderby' , array (
'menu_order' => __ ( 'Default sorting' , 'woocommerce' ),
'popularity' => __ ( 'Sort by popularity' , 'woocommerce' ),
'rating' => __ ( 'Sort by average rating' , 'woocommerce' ),
'date' => __ ( 'Sort by newness' , 'woocommerce' ),
'price' => __ ( 'Sort by price: low to high' , 'woocommerce' ),
'price-desc' => __ ( 'Sort by price: high to low' , 'woocommerce' )
) );
if ( ! $show_default_orderby ) {
unset ( $catalog_orderby_options [ 'menu_order' ] );
}
if ( get_option ( 'woocommerce_enable_review_rating' ) === 'no' ) {
unset ( $catalog_orderby_options [ 'rating' ] );
}
wc_get_template ( 'loop/orderby.php' , array ( 'catalog_orderby_options' => $catalog_orderby_options , 'orderby' => $orderby , 'show_default_orderby' => $show_default_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 .
*
* @ subpackage Loop
*/
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 .
*
2012-08-15 18:15:06 +00:00
* @ subpackage Product
2012-08-14 15:30:23 +00:00
*/
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 .
*
2012-08-15 18:15:06 +00:00
* @ subpackage Product
2012-08-14 15:30:23 +00:00
*/
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 .
*
2012-08-15 18:15:06 +00:00
* @ subpackage Product / Tabs
2012-08-14 15:30:23 +00:00
*/
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 .
*
2012-08-15 18:15:06 +00:00
* @ subpackage Product
2012-08-14 15:30:23 +00:00
*/
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 .
*
* @ subpackage Product
*/
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 .
*
2012-08-15 18:15:06 +00:00
* @ subpackage Product
2012-08-14 15:30:23 +00:00
*/
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 ) .
*
2012-08-15 18:15:06 +00:00
* @ subpackage Product
2012-08-14 15:30:23 +00:00
*/
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 .
*
2012-08-15 18:15:06 +00:00
* @ subpackage Product
2012-08-14 15:30:23 +00:00
*/
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 .
*
2012-08-15 18:15:06 +00:00
* @ subpackage Product
2012-08-14 15:30:23 +00:00
*/
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 .
*
2012-08-15 18:15:06 +00:00
* @ subpackage Product
2012-08-14 15:30:23 +00:00
*/
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 .
*
2012-08-15 18:15:06 +00:00
* @ subpackage Product
2012-08-14 15:30:23 +00:00
*/
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 .
*
2012-08-15 18:15:06 +00:00
* @ subpackage Product
2012-08-14 15:30:23 +00:00
*/
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 .
*
2012-08-15 18:15:06 +00:00
* @ subpackage Product
2012-08-14 15:30:23 +00:00
*/
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 .
*
2012-08-15 18:15:06 +00:00
* @ subpackage Product
2012-08-14 15:30:23 +00:00
*/
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 .
*
2012-08-15 18:15:06 +00:00
* @ subpackage Product
2012-08-14 15:30:23 +00:00
*/
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 .
2014-02-13 04:49:30 +00:00
*
2013-11-28 17:23:41 +00:00
* @ param array $args Args for the input
2014-02-13 04:49:30 +00:00
* @ param WC_Product | null $product
2014-11-26 14:19:53 +00:00
* @ param boolean $echo Whether to return or echo | 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
*
2012-08-15 18:15:06 +00:00
* @ subpackage Product / Tabs
2012-08-14 15:30:23 +00:00
*/
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
*
2012-08-15 18:15:06 +00:00
* @ subpackage Product / Tabs
2012-08-14 15:30:23 +00:00
*/
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
*
2012-08-15 18:15:06 +00:00
* @ subpackage Product / Tabs
2012-08-14 15:30:23 +00:00
*/
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
*
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 (
2014-11-20 09:43:48 +00:00
'title' => sprintf ( __ ( 'Reviews (%d)' , 'woocommerce' ), $product -> get_rating_count () ),
2013-02-10 17:33:13 +00:00
'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
*
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 () ) {
2014-02-13 04:49:30 +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 .
*
2012-08-15 18:15:06 +00:00
* @ subpackage Product
2012-08-14 15:30:23 +00:00
*/
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 .
*
2012-08-15 18:15:06 +00:00
* @ subpackage Product
2012-08-14 15:30:23 +00:00
*/
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
*
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
*/
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-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
*/
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 .
*
2012-08-15 18:15:06 +00:00
* @ subpackage Cart
2012-08-14 15:30:23 +00:00
*/
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 .
*
2012-08-15 18:15:06 +00:00
* @ subpackage Cart
2012-08-14 15:30:23 +00:00
*/
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
}
}
2014-10-06 11:33:36 +00:00
if ( ! function_exists ( 'woocommerce_button_proceed_to_checkout' ) ) {
/**
* Output the proceed to checkout button .
*
* @ subpackage Cart
*/
function woocommerce_button_proceed_to_checkout () {
$checkout_url = WC () -> cart -> get_checkout_url ();
?>
< a href = " <?php echo $checkout_url ; ?> " class = " checkout-button button alt wc-forward " >< ? php _e ( 'Proceed to Checkout' , 'woocommerce' ); ?> </a>
< ? php
}
}
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
*
*/
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
*
2012-08-15 18:15:06 +00:00
* @ subpackage Forms
2012-08-14 15:30:23 +00:00
*/
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
*
2012-08-15 18:15:06 +00:00
* @ subpackage Checkout
2012-08-14 15:30:23 +00:00
*/
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
*/
2013-11-25 14:35:10 +00:00
function woocommerce_breadcrumb ( $args = array () ) {
2014-12-05 13:42:19 +00:00
$args = wp_parse_args ( $args , 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' => '' ,
2014-12-05 13:42:19 +00:00
'home' => _x ( 'Home' , 'breadcrumb' , 'woocommerce' )
) ) );
2011-11-24 00:24:24 +00:00
2014-12-05 13:42:19 +00:00
$breadcrumbs = new WC_Breadcrumb ();
if ( $args [ 'home' ] ) {
$breadcrumbs -> add_crumb ( $args [ 'home' ], home_url () );
}
$args [ 'breadcrumb' ] = $breadcrumbs -> generate ();
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 .
*
2012-08-15 18:15:06 +00:00
* @ subpackage Checkout
2012-08-14 15:30:23 +00:00
*/
2014-11-26 14:19:53 +00:00
function woocommerce_order_review ( $deprecated = false ) {
wc_get_template ( 'checkout/review-order.php' , array ( 'checkout' => WC () -> checkout () ) );
}
}
if ( ! function_exists ( 'woocommerce_checkout_payment' ) ) {
/**
* Output the Payment Methods on the checkout
*
* @ subpackage Checkout
*/
function woocommerce_checkout_payment () {
if ( WC () -> cart -> needs_payment () ) {
$available_gateways = WC () -> payment_gateways () -> get_available_payment_gateways ();
WC () -> payment_gateways () -> set_current_gateway ( $available_gateways );
} else {
$available_gateways = array ();
}
wc_get_template ( 'checkout/payment.php' , array (
'checkout' => WC () -> checkout (),
'available_gateways' => WC () -> payment_gateways () -> get_available_payment_gateways (),
'order_button_text' => apply_filters ( 'woocommerce_order_button_text' , __ ( 'Place order' , 'woocommerce' ) )
) );
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 .
*
2012-08-15 18:15:06 +00:00
* @ subpackage Checkout
2012-08-14 15:30:23 +00:00
*/
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 )
*
* @ 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 ) ) {
2014-02-26 11:43:33 +00:00
case 'subcategories' :
// Nothing - we want to continue to see if there are products/subcats
break ;
2012-11-08 18:05:18 +00:00
case 'products' :
case 'both' :
return true ;
break ;
2014-02-26 11:43:33 +00:00
default :
// Default - no setting
2012-11-08 18:05:18 +00:00
if ( get_option ( 'woocommerce_category_archive_display' ) != 'subcategories' )
return true ;
break ;
}
}
2012-11-27 16:22:47 +00:00
2014-02-26 11:43:33 +00:00
// Begin subcategory logic
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 ;
2012-11-27 16:22:47 +00:00
2014-02-06 09:21:47 +00:00
if ( ! $parent_id && ! $taxonomy ) {
return true ;
}
2014-07-03 11:59:54 +00:00
$transient_name = 'wc_products_will_display_' . $parent_id . WC_Cache_Helper :: get_transient_version ( 'product_query' );
if ( false === ( $products_will_display = get_transient ( $transient_name ) ) ) {
2014-02-06 09:21:47 +00:00
$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 ) {
2014-02-26 11:43:33 +00:00
// Check terms have products inside - parents first. If products are found inside, subcats will be shown instead of products so we can return false.
2014-02-06 09:21:47 +00:00
if ( sizeof ( get_objects_in_term ( $has_children , $taxonomy ) ) > 0 ) {
2014-02-26 11:43:33 +00:00
$products_will_display = false ;
2014-02-06 09:21:47 +00:00
} 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 ) {
2014-02-26 11:43:33 +00:00
$products_will_display = false ;
2014-02-06 09:21:47 +00:00
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
2014-07-03 11:59:54 +00:00
set_transient ( $transient_name , $products_will_display , YEAR_IN_SECONDS );
2014-02-06 09:21:47 +00:00
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 .
*
2012-08-15 18:15:06 +00:00
* @ subpackage Loop
2013-11-27 18:20:31 +00:00
* @ param array $args
2014-09-07 23:37:55 +00:00
* @ return null | boolean
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 (
2014-05-28 16:25:33 +00:00
'before' => '' ,
'after' => '' ,
2012-07-19 18:34:49 +00:00
'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
2014-05-28 16:25:33 +00:00
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
2014-05-28 16:25:33 +00:00
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
2014-05-28 16:25:33 +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 '' :
2014-05-28 16:25:33 +00:00
if ( get_option ( 'woocommerce_category_archive_display' ) == '' ) {
2012-11-08 18:05:18 +00:00
return ;
2014-05-28 16:25:33 +00:00
}
2012-11-08 18:05:18 +00:00
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
2014-10-08 14:19:54 +00:00
$product_categories = get_categories ( apply_filters ( 'woocommerce_product_subcategories_args' , array (
2014-10-06 10:41:29 +00:00
'parent' => $parent_id ,
'menu_order' => 'ASC' ,
'hide_empty' => 0 ,
'hierarchical' => 1 ,
'taxonomy' => 'product_cat' ,
'pad_counts' => 1
2014-10-08 14:19:54 +00:00
) ) );
if ( ! apply_filters ( 'woocommerce_product_subcategories_hide_empty' , false ) ) {
$product_categories = wp_list_filter ( $product_categories , array ( 'count' => 0 ), 'NOT' );
}
2012-08-08 08:58:36 +00:00
2012-04-25 09:51:20 +00:00
if ( $product_categories ) {
2014-05-28 16:25:33 +00:00
echo $before ;
2012-08-08 08:58:36 +00:00
2012-07-11 12:50:24 +00:00
foreach ( $product_categories as $category ) {
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
) );
}
2014-05-28 16:25:33 +00:00
// If we are hiding products disable the loop and pagination
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' :
2014-05-28 16:25:33 +00:00
$wp_query -> post_count = 0 ;
2012-11-08 18:05:18 +00:00
$wp_query -> max_num_pages = 0 ;
break ;
case '' :
if ( get_option ( 'woocommerce_category_archive_display' ) == 'subcategories' ) {
2014-05-28 16:25:33 +00:00
$wp_query -> post_count = 0 ;
2012-11-08 18:05:18 +00:00
$wp_query -> max_num_pages = 0 ;
}
break ;
}
}
2014-05-28 16:25:33 +00:00
2012-11-08 18:05:18 +00:00
if ( is_shop () && get_option ( 'woocommerce_shop_page_display' ) == 'subcategories' ) {
2014-05-28 16:25:33 +00:00
$wp_query -> post_count = 0 ;
2012-11-08 18:05:18 +00:00
$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
}
2014-06-03 10:04:06 +00:00
2014-05-28 16:25:33 +00:00
return true ;
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 .
*
* @ param mixed $category
2012-08-15 18:15:06 +00:00
* @ subpackage Loop
2012-08-14 15:30:23 +00:00
*/
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 .
*
* @ param mixed $order_id
2012-08-15 18:15:06 +00:00
* @ subpackage Orders
2012-08-14 15:30:23 +00:00
*/
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 .
*
* @ param object $order
* @ subpackage Orders
*/
2013-11-25 14:35:10 +00:00
function woocommerce_order_again_button ( $order ) {
2014-11-12 10:44:26 +00:00
if ( ! $order || ! $order -> has_status ( 'completed' ) || ! is_user_logged_in () ) {
2013-06-05 10:13:36 +00:00
return ;
2014-05-30 16:16:22 +00:00
}
2014-11-12 15:33:00 +00:00
wc_get_template ( 'order/order-again.php' , array (
'order' => $order
) );
2013-06-05 10:13:36 +00:00
}
}
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 .
*
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 )
2014-02-13 04:49:30 +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' => '' ,
2014-02-14 23:19:49 +00:00
'description' => '' ,
2012-12-10 14:50:49 +00:00
'placeholder' => '' ,
'maxlength' => false ,
'required' => false ,
2014-09-10 09:39:31 +00:00
'id' => $key ,
2012-12-10 14:50:49 +00:00
'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 (),
2014-09-10 08:32:24 +00:00
'default' => '' ,
2011-12-21 16:03:45 +00:00
);
2012-04-25 09:51:20 +00:00
2014-12-01 12:13:41 +00:00
$args = wp_parse_args ( $args , $defaults );
2012-04-25 09:51:20 +00:00
2014-12-01 12:13:41 +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
2014-12-01 12:13:41 +00:00
if ( is_string ( $args [ 'label_class' ] ) ) {
2013-08-13 16:26:21 +00:00
$args [ 'label_class' ] = array ( $args [ 'label_class' ] );
2014-12-01 12:13:41 +00:00
}
2013-08-13 16:26:21 +00:00
2014-12-01 12:13:41 +00:00
if ( is_null ( $value ) ) {
2013-03-10 13:17:15 +00:00
$value = $args [ 'default' ];
2014-12-01 12:13:41 +00:00
}
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
2014-12-01 12:13:41 +00:00
if ( ! empty ( $args [ 'custom_attributes' ] ) && is_array ( $args [ 'custom_attributes' ] ) ) {
foreach ( $args [ 'custom_attributes' ] as $attribute => $attribute_value ) {
2013-02-26 11:51:12 +00:00
$custom_attributes [] = esc_attr ( $attribute ) . '="' . esc_attr ( $attribute_value ) . '"' ;
2014-12-01 12:13:41 +00:00
}
}
2012-11-27 16:22:47 +00:00
2014-12-01 12:13:41 +00:00
if ( ! empty ( $args [ 'validate' ] ) ) {
foreach ( $args [ 'validate' ] as $validate ) {
2012-12-10 14:50:49 +00:00
$args [ 'class' ][] = 'validate-' . $validate ;
2014-12-01 12:13:41 +00:00
}
}
2012-12-10 14:50:49 +00:00
2012-04-25 09:51:20 +00:00
switch ( $args [ 'type' ] ) {
2014-12-01 12:13:41 +00:00
case 'country' :
2012-11-27 16:22:47 +00:00
2014-12-01 12:13:41 +00:00
$countries = $key == 'shipping_country' ? WC () -> countries -> get_shipping_countries () : WC () -> countries -> get_allowed_countries ();
2013-08-02 15:54:28 +00:00
2014-12-01 12:13:41 +00:00
if ( sizeof ( $countries ) == 1 ) {
2012-11-27 16:22:47 +00:00
2014-12-01 12:13:41 +00:00
$field = '<p class="form-row ' . esc_attr ( implode ( ' ' , $args [ 'class' ] ) ) . '" id="' . esc_attr ( $args [ 'id' ] ) . '_field">' ;
2013-01-03 12:34:31 +00:00
2014-12-01 12:13:41 +00:00
if ( $args [ 'label' ] ) {
$field .= '<label class="' . esc_attr ( implode ( ' ' , $args [ 'label_class' ] ) ) . '">' . $args [ 'label' ] . '</label>' ;
}
2012-11-27 16:22:47 +00:00
2014-12-01 12:13:41 +00:00
$field .= '<strong>' . current ( array_values ( $countries ) ) . '</strong>' ;
2012-11-27 16:22:47 +00:00
2014-12-01 12:13:41 +00:00
$field .= '<input type="hidden" name="' . esc_attr ( $key ) . '" id="' . esc_attr ( $args [ 'id' ] ) . '" value="' . current ( array_keys ( $countries ) ) . '" ' . implode ( ' ' , $custom_attributes ) . ' class="country_to_state" />' ;
2012-11-27 16:22:47 +00:00
2014-12-01 12:13:41 +00:00
if ( $args [ 'description' ] ) {
$field .= '<span class="description">' . esc_attr ( $args [ 'description' ] ) . '</span>' ;
}
2014-06-03 10:04:06 +00:00
2014-12-01 12:13:41 +00:00
$field .= '</p>' . $after ;
2012-11-27 16:22:47 +00:00
2014-12-01 12:13:41 +00:00
} else {
2012-04-25 09:51:20 +00:00
2014-12-01 12:13:41 +00:00
$field = '<p class="form-row ' . esc_attr ( implode ( ' ' , $args [ 'class' ] ) ) . '" id="' . esc_attr ( $args [ 'id' ] ) . '_field">'
. '<label for="' . esc_attr ( $args [ 'id' ] ) . '" class="' . esc_attr ( implode ( ' ' , $args [ 'label_class' ] ) ) . '">' . $args [ 'label' ] . $required . '</label>'
2015-02-10 15:41:34 +00:00
. '<select name="' . esc_attr ( $key ) . '" id="' . esc_attr ( $args [ 'id' ] ) . '" class="country_to_state country_select ' . esc_attr ( implode ( ' ' , $args [ 'input_class' ] ) ) . '" ' . implode ( ' ' , $custom_attributes ) . '>'
2014-12-01 12:13:41 +00:00
. '<option value="">' . __ ( 'Select a country…' , 'woocommerce' ) . '</option>' ;
2012-11-27 16:22:47 +00:00
2014-12-01 12:13:41 +00:00
foreach ( $countries as $ckey => $cvalue ) {
$field .= '<option value="' . esc_attr ( $ckey ) . '" ' . selected ( $value , $ckey , false ) . '>' . __ ( $cvalue , 'woocommerce' ) . '</option>' ;
}
2012-11-27 16:22:47 +00:00
2014-12-01 12:13:41 +00:00
$field .= '</select>' ;
2012-11-27 16:22:47 +00:00
2014-12-01 12:13:41 +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
2014-12-01 12:13:41 +00:00
if ( $args [ 'description' ] ) {
$field .= '<span class="description">' . esc_attr ( $args [ 'description' ] ) . '</span>' ;
}
2014-06-03 10:04:06 +00:00
2014-12-01 12:13:41 +00:00
$field .= '</p>' . $after ;
2012-11-27 16:22:47 +00:00
2014-12-01 12:13:41 +00:00
}
2012-04-25 09:51:20 +00:00
2014-12-01 12:13:41 +00:00
break ;
case 'state' :
2012-04-25 09:51:20 +00:00
2014-12-01 12:13:41 +00:00
/* Get Country */
$country_key = $key == 'billing_state' ? 'billing_country' : 'shipping_country' ;
$current_cc = WC () -> checkout -> get_value ( $country_key );
$states = WC () -> countries -> get_states ( $current_cc );
2012-04-25 09:51:20 +00:00
2014-12-01 12:13:41 +00:00
if ( is_array ( $states ) && empty ( $states ) ) {
2012-08-08 08:58:36 +00:00
2014-12-01 12:13:41 +00:00
$field = '<p class="form-row ' . esc_attr ( implode ( ' ' , $args [ 'class' ] ) ) . '" id="' . esc_attr ( $args [ 'id' ] ) . '_field" style="display: none">' ;
2013-01-03 12:34:31 +00:00
2014-12-01 12:13:41 +00:00
if ( $args [ 'label' ] ) {
$field .= '<label for="' . esc_attr ( $args [ 'id' ] ) . '" class="' . esc_attr ( implode ( ' ' , $args [ 'label_class' ] ) ) . '">' . $args [ 'label' ] . $required . '</label>' ;
}
$field .= '<input type="hidden" class="hidden" name="' . esc_attr ( $key ) . '" id="' . esc_attr ( $args [ 'id' ] ) . '" value="" ' . implode ( ' ' , $custom_attributes ) . ' placeholder="' . esc_attr ( $args [ 'placeholder' ] ) . '" />' ;
2014-06-03 10:04:06 +00:00
2014-12-01 12:13:41 +00:00
if ( $args [ 'description' ] ) {
$field .= '<span class="description">' . esc_attr ( $args [ 'description' ] ) . '</span>' ;
}
2014-06-03 10:04:06 +00:00
2014-12-01 12:13:41 +00:00
$field .= '</p>' . $after ;
2012-08-08 08:58:36 +00:00
2014-12-01 12:13:41 +00:00
} elseif ( is_array ( $states ) ) {
2012-08-08 08:58:36 +00:00
2014-12-01 12:13:41 +00:00
$field = '<p class="form-row ' . esc_attr ( implode ( ' ' , $args [ 'class' ] ) ) . '" id="' . esc_attr ( $args [ 'id' ] ) . '_field">' ;
2013-01-03 12:34:31 +00:00
2014-12-01 12:13:41 +00:00
if ( $args [ 'label' ] )
$field .= '<label for="' . esc_attr ( $args [ 'id' ] ) . '" class="' . esc_attr ( implode ( ' ' , $args [ 'label_class' ] ) ) . '">' . $args [ 'label' ] . $required . '</label>' ;
2015-02-10 15:41:34 +00:00
$field .= '<select name="' . esc_attr ( $key ) . '" id="' . esc_attr ( $args [ 'id' ] ) . '" class="state_select ' . esc_attr ( implode ( ' ' , $args [ 'input_class' ] ) ) . '" ' . implode ( ' ' , $custom_attributes ) . ' placeholder="' . esc_attr ( $args [ 'placeholder' ] ) . ' " >
2014-12-01 12:13:41 +00:00
< option value = " " > '.__( ' Select a state & hellip ; ', ' woocommerce ' ) .' </ option > ' ;
2012-08-08 08:58:36 +00:00
2014-12-01 12:13:41 +00:00
foreach ( $states as $ckey => $cvalue ) {
$field .= '<option value="' . esc_attr ( $ckey ) . '" ' . selected ( $value , $ckey , false ) . '>' . __ ( $cvalue , 'woocommerce' ) . '</option>' ;
}
2012-08-08 08:58:36 +00:00
2014-12-01 12:13:41 +00:00
$field .= '</select>' ;
2014-06-03 10:04:06 +00:00
2014-12-01 12:13:41 +00:00
if ( $args [ 'description' ] ) {
$field .= '<span class="description">' . esc_attr ( $args [ 'description' ] ) . '</span>' ;
}
2014-06-03 10:04:06 +00:00
2014-12-01 12:13:41 +00:00
$field .= '</p>' . $after ;
2012-08-08 08:58:36 +00:00
2014-12-01 12:13:41 +00:00
} else {
2012-08-08 08:58:36 +00:00
2014-12-01 12:13:41 +00:00
$field = '<p class="form-row ' . esc_attr ( implode ( ' ' , $args [ 'class' ] ) ) . '" id="' . esc_attr ( $args [ 'id' ] ) . '_field">' ;
2013-01-03 12:34:31 +00:00
2014-12-01 12:13:41 +00:00
if ( $args [ 'label' ] ) {
$field .= '<label for="' . esc_attr ( $args [ 'id' ] ) . '" class="' . esc_attr ( implode ( ' ' , $args [ 'label_class' ] ) ) . '">' . $args [ 'label' ] . $required . '</label>' ;
}
$field .= '<input type="text" class="input-text ' . esc_attr ( implode ( ' ' , $args [ 'input_class' ] ) ) . '" value="' . esc_attr ( $value ) . '" placeholder="' . esc_attr ( $args [ 'placeholder' ] ) . '" name="' . esc_attr ( $key ) . '" id="' . esc_attr ( $args [ 'id' ] ) . '" ' . implode ( ' ' , $custom_attributes ) . ' />' ;
2014-06-03 10:04:06 +00:00
2014-12-01 12:13:41 +00:00
if ( $args [ 'description' ] ) {
$field .= '<span class="description">' . esc_attr ( $args [ 'description' ] ) . '</span>' ;
}
2014-06-03 10:04:06 +00:00
2014-12-01 12:13:41 +00:00
$field .= '</p>' . $after ;
2012-08-08 08:58:36 +00:00
2014-12-01 12:13:41 +00:00
}
2012-04-25 09:51:20 +00:00
2014-12-01 12:13:41 +00:00
break ;
case 'textarea' :
2012-04-25 09:51:20 +00:00
2014-12-01 12:13:41 +00:00
$field = '<p class="form-row ' . esc_attr ( implode ( ' ' , $args [ 'class' ] ) ) . '" id="' . esc_attr ( $args [ 'id' ] ) . '_field">' ;
2013-01-03 12:34:31 +00:00
2014-12-01 12:13:41 +00:00
if ( $args [ 'label' ] ) {
$field .= '<label for="' . esc_attr ( $args [ 'id' ] ) . '" class="' . esc_attr ( implode ( ' ' , $args [ 'label_class' ] ) ) . '">' . $args [ 'label' ] . $required . '</label>' ;
}
2013-01-03 12:34:31 +00:00
2014-12-01 12:13:41 +00:00
$field .= '<textarea name="' . esc_attr ( $key ) . '" class="input-text ' . esc_attr ( implode ( ' ' , $args [ 'input_class' ] ) ) . '" id="' . esc_attr ( $args [ 'id' ] ) . '" placeholder="' . esc_attr ( $args [ 'placeholder' ] ) . '" ' . $args [ 'maxlength' ] . ' ' . ( empty ( $args [ 'custom_attributes' ][ 'rows' ] ) ? ' rows="2"' : '' ) . ( empty ( $args [ 'custom_attributes' ][ 'cols' ] ) ? ' cols="5"' : '' ) . implode ( ' ' , $custom_attributes ) . '>' . esc_textarea ( $value ) . '</textarea>' ;
2014-06-03 10:04:06 +00:00
2014-12-01 12:13:41 +00:00
if ( $args [ 'description' ] ) {
$field .= '<span class="description">' . esc_attr ( $args [ 'description' ] ) . '</span>' ;
}
2014-06-03 10:04:06 +00:00
2014-12-01 12:13:41 +00:00
$field .= '</p>' . $after ;
2012-04-25 09:51:20 +00:00
2014-12-01 12:13:41 +00:00
break ;
case 'checkbox' :
2012-04-25 09:51:20 +00:00
2014-12-01 12:13:41 +00:00
$field = '<p class="form-row ' . esc_attr ( implode ( ' ' , $args [ 'class' ] ) ) . '" id="' . esc_attr ( $args [ 'id' ] ) . ' _field " >
< label class = " checkbox ' . implode( ' ', $args['label_class'] ) .' " ' . implode( ' ', $custom_attributes ) . ' >
2015-02-10 15:41:34 +00:00
< input type = " ' . esc_attr( $args['type'] ) . ' " class = " input-checkbox ' . esc_attr( implode( ' ', $args['input_class'] ) ) .' " name = " ' . esc_attr( $key ) . ' " id = " ' . esc_attr( $args['id'] ) . ' " value = " 1 " '.checked( $value, 1, false ) .' /> '
2014-12-01 12:13:41 +00:00
. $args [ 'label' ] . $required . '</label>' ;
2014-06-03 10:04:06 +00:00
2014-12-01 12:13:41 +00:00
if ( $args [ 'description' ] ) {
$field .= '<span class="description">' . esc_attr ( $args [ 'description' ] ) . '</span>' ;
}
2014-06-03 10:04:06 +00:00
2014-12-01 12:13:41 +00:00
$field .= '</p>' . $after ;
2012-04-25 09:51:20 +00:00
2014-12-01 12:13:41 +00:00
break ;
case 'password' :
2012-04-25 09:51:20 +00:00
2014-12-01 12:13:41 +00:00
$field = '<p class="form-row ' . esc_attr ( implode ( ' ' , $args [ 'class' ] ) ) . '" id="' . esc_attr ( $args [ 'id' ] ) . '_field">' ;
2013-01-03 12:34:31 +00:00
2014-12-01 12:13:41 +00:00
if ( $args [ 'label' ] ) {
$field .= '<label for="' . esc_attr ( $args [ 'id' ] ) . '" class="' . esc_attr ( implode ( ' ' , $args [ 'label_class' ] ) ) . '">' . $args [ 'label' ] . $required . '</label>' ;
}
2013-01-03 12:34:31 +00:00
2014-12-01 12:13:41 +00:00
$field .= '<input type="password" class="input-text ' . esc_attr ( implode ( ' ' , $args [ 'input_class' ] ) ) . '" name="' . esc_attr ( $key ) . '" id="' . esc_attr ( $args [ 'id' ] ) . '" placeholder="' . esc_attr ( $args [ 'placeholder' ] ) . '" value="' . esc_attr ( $value ) . '" ' . implode ( ' ' , $custom_attributes ) . ' />' ;
2014-06-03 10:04:06 +00:00
2014-12-01 12:13:41 +00:00
if ( $args [ 'description' ] ) {
$field .= '<span class="description">' . esc_attr ( $args [ 'description' ] ) . '</span>' ;
}
2014-06-03 10:04:06 +00:00
2014-12-01 12:13:41 +00:00
$field .= '</p>' . $after ;
2012-04-25 09:51:20 +00:00
2014-12-01 12:13:41 +00:00
break ;
case 'text' :
2012-04-25 09:51:20 +00:00
2014-12-01 12:13:41 +00:00
$field = '<p class="form-row ' . esc_attr ( implode ( ' ' , $args [ 'class' ] ) ) . '" id="' . esc_attr ( $args [ 'id' ] ) . '_field">' ;
2013-01-03 12:34:31 +00:00
2014-12-01 12:13:41 +00:00
if ( $args [ 'label' ] ) {
$field .= '<label for="' . esc_attr ( $args [ 'id' ] ) . '" class="' . esc_attr ( implode ( ' ' , $args [ 'label_class' ] ) ) . '">' . $args [ 'label' ] . $required . '</label>' ;
}
2013-01-03 12:34:31 +00:00
2014-12-01 12:13:41 +00:00
$field .= '<input type="text" class="input-text ' . esc_attr ( implode ( ' ' , $args [ 'input_class' ] ) ) . '" name="' . esc_attr ( $key ) . '" id="' . esc_attr ( $args [ 'id' ] ) . '" placeholder="' . esc_attr ( $args [ 'placeholder' ] ) . '" ' . $args [ 'maxlength' ] . ' value="' . esc_attr ( $value ) . '" ' . implode ( ' ' , $custom_attributes ) . ' />' ;
2014-06-03 10:04:06 +00:00
2014-12-01 12:13:41 +00:00
if ( $args [ 'description' ] ) {
$field .= '<span class="description">' . esc_attr ( $args [ 'description' ] ) . '</span>' ;
}
2014-06-03 10:04:06 +00:00
2014-12-01 12:13:41 +00:00
$field .= '</p>' . $after ;
2011-12-22 01:02:42 +00:00
2014-12-01 12:13:41 +00:00
break ;
case 'select' :
2012-04-25 09:51:20 +00:00
2014-12-01 12:13:41 +00:00
$options = '' ;
2012-04-25 09:51:20 +00:00
2014-12-01 12:13:41 +00:00
if ( ! empty ( $args [ 'options' ] ) ) {
foreach ( $args [ 'options' ] as $option_key => $option_text )
$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
2014-12-01 12:13:41 +00:00
$field = '<p class="form-row ' . esc_attr ( implode ( ' ' , $args [ 'class' ] ) ) . '" id="' . esc_attr ( $args [ 'id' ] ) . '_field">' ;
2013-01-03 12:34:31 +00:00
2014-12-01 12:13:41 +00:00
if ( $args [ 'label' ] ) {
$field .= '<label for="' . esc_attr ( $args [ 'id' ] ) . '" class="' . esc_attr ( implode ( ' ' , $args [ 'label_class' ] ) ) . '">' . $args [ 'label' ] . $required . '</label>' ;
}
2013-01-03 12:34:31 +00:00
2014-12-01 12:13:41 +00:00
$field .= '<select name="' . esc_attr ( $key ) . '" id="' . esc_attr ( $args [ 'id' ] ) . '" class="select ' . esc_attr ( implode ( ' ' , $args [ 'input_class' ] ) ) . '" ' . implode ( ' ' , $custom_attributes ) . ' >
' . $options . '
</ select > ' ;
2014-06-03 10:04:06 +00:00
2014-12-01 12:13:41 +00:00
if ( $args [ 'description' ] ) {
$field .= '<span class="description">' . esc_attr ( $args [ 'description' ] ) . '</span>' ;
}
2014-06-03 10:04:06 +00:00
2014-12-01 12:13:41 +00:00
$field .= '</p>' . $after ;
}
2012-04-25 09:51:20 +00:00
2014-12-01 12:13:41 +00:00
break ;
case 'radio' :
2014-06-03 10:04:06 +00:00
2014-12-01 12:13:41 +00:00
$field = '<p class="form-row ' . esc_attr ( implode ( ' ' , $args [ 'class' ] ) ) . '" id="' . esc_attr ( $args [ 'id' ] ) . '_field">' ;
2014-06-03 10:04:06 +00:00
2014-12-01 12:13:41 +00:00
if ( $args [ 'label' ] ) {
$field .= '<label for="' . esc_attr ( current ( array_keys ( $args [ 'options' ] ) ) ) . '" class="' . esc_attr ( implode ( ' ' , $args [ 'label_class' ] ) ) . '">' . $args [ 'label' ] . $required . '</label>' ;
}
2014-06-03 10:04:06 +00:00
2014-12-01 12:13:41 +00:00
if ( ! empty ( $args [ 'options' ] ) ) {
foreach ( $args [ 'options' ] as $option_key => $option_text ) {
2015-02-10 15:41:34 +00:00
$field .= '<input type="radio" class="input-radio ' . esc_attr ( implode ( ' ' , $args [ 'input_class' ] ) ) . '" value="' . esc_attr ( $option_key ) . '" name="' . esc_attr ( $key ) . '" id="' . esc_attr ( $args [ 'id' ] ) . '_' . esc_attr ( $option_key ) . '"' . checked ( $value , $option_key , false ) . ' />' ;
2014-12-01 12:13:41 +00:00
$field .= '<label for="' . esc_attr ( $args [ 'id' ] ) . '_' . esc_attr ( $option_key ) . '" class="radio ' . implode ( ' ' , $args [ 'label_class' ] ) . '">' . $option_text . '</label>' ;
}
2014-06-03 10:04:06 +00:00
}
2014-12-01 12:13:41 +00:00
$field .= '</p>' . $after ;
2014-06-03 10:04:06 +00:00
2014-12-01 12:13:41 +00:00
break ;
default :
2012-04-25 09:51:20 +00:00
2014-12-01 12:13:41 +00:00
$field = apply_filters ( 'woocommerce_form_field_' . $args [ 'type' ], '' , $key , $args , $value );
2012-04-25 09:51:20 +00:00
2014-12-01 12:13:41 +00:00
break ;
2012-04-25 09:51:20 +00:00
}
2012-02-15 17:57:12 +00:00
2014-12-01 12:13:41 +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' ) ) {
/**
2014-10-13 13:42:07 +00:00
* Display product search form .
2014-10-10 11:48:02 +00:00
*
* Will first attempt to locate the product - searchform . php file in either the child or
* the parent , then load it . If it doesn ' t exist , then the default search form
* will be displayed .
*
* The default searchform uses html5 .
2012-08-14 15:30:23 +00:00
*
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
2012-08-14 15:30:23 +00:00
*/
function get_product_search_form ( $echo = true ) {
2014-10-10 11:48:02 +00:00
ob_start ();
2012-08-14 15:30:23 +00:00
2014-10-10 11:48:02 +00:00
do_action ( 'pre_get_product_search_form' );
2012-04-16 13:32:58 +00:00
2014-10-10 11:48:02 +00:00
wc_get_template ( 'product-searchform.php' );
$form = apply_filters ( 'get_product_search_form' , ob_get_clean () );
if ( $echo ) {
echo $form ;
} else {
return $form ;
}
2012-04-16 13:32:58 +00:00
}
2013-02-06 23:57:57 +00:00
}