????JFIF??x?x????'
| Server IP : 79.136.114.73 / Your IP : 216.73.216.25 Web Server : Apache/2.4.7 (Ubuntu) PHP/5.5.9-1ubuntu4.29 OpenSSL/1.0.1f System : Linux b8009 3.13.0-170-generic #220-Ubuntu SMP Thu May 9 12:40:49 UTC 2019 x86_64 User : www-data ( 33) PHP Version : 5.5.9-1ubuntu4.29 Disable Function : pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority, MySQL : ON | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : ON | Pkexec : ON Directory : /var/www/www.astacus.eu/wp-content/themes/Avada/includes/ |
Upload File : |
<?php
/**
* Fusion Framework
* WARNING: This file is part of the Fusion Core Framework.
* Do not edit the core files.
* Add any modifications necessary under a child theme.
*
* @package Fusion/Template
* @author ThemeFusion
* @link http://theme-fusion.com
*/
// Exit if accessed directly.
if ( ! defined( 'ABSPATH' ) ) {
die;
}
// Don't duplicate me!
if ( ! class_exists( 'Avada_Woocommerce' ) ) {
/**
* Class to apply woocommerce templates.
*
* @since 4.0.0
*/
class Avada_Woocommerce {
/**
* Constructor.
*/
function __construct() {
add_filter( 'woocommerce_show_page_title', array( $this, 'shop_title' ), 10 );
remove_action( 'woocommerce_before_main_content', 'woocommerce_output_content_wrapper', 10 );
remove_action( 'woocommerce_after_main_content', 'woocommerce_output_content_wrapper_end', 10 );
add_action( 'woocommerce_before_main_content', array( $this, 'before_container' ), 10 );
add_action( 'woocommerce_after_main_content', array( $this, 'after_container' ), 10 );
remove_action( 'woocommerce_sidebar', 'woocommerce_get_sidebar', 10 );
add_action( 'woocommerce_sidebar', array( $this, 'add_sidebar' ), 10 );
/**
* Products Loop.
*/
remove_action( 'woocommerce_before_shop_loop_item', 'woocommerce_template_loop_product_link_open', 10 );
remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_product_link_close', 5 );
remove_action( 'woocommerce_shop_loop_item_title', 'woocommerce_template_loop_product_title', 10 );
add_action( 'woocommerce_before_shop_loop_item_title', array( $this, 'avada_woocommerce_add_product_wrappers_open' ), 30 );
add_action( 'woocommerce_shop_loop_item_title', array( $this, 'product_title' ), 10 );
add_action( 'woocommerce_after_shop_loop_item_title', array( $this, 'avada_woocommerce_add_product_wrappers_close' ), 20 );
add_action( 'avada_woocommerce_buttons_on_rollover', array( $this, 'avada_woocommerce_template_loop_add_to_cart' ), 10 );
add_action( 'avada_woocommerce_buttons_on_rollover', array( $this, 'avada_woocommerce_rollover_buttons_linebreak' ), 15 );
add_action( 'avada_woocommerce_buttons_on_rollover', array( $this, 'show_details_button' ), 20 );
if ( 'clean' === Avada()->settings->get( 'woocommerce_product_box_design' ) ) {
remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 );
remove_action( 'woocommerce_after_shop_loop_item_title', 'woocommerce_template_loop_rating', 5 );
add_action( 'woocommerce_after_shop_loop_item', array( $this, 'before_shop_item_buttons' ), 9 );
} else {
remove_action( 'woocommerce_after_shop_loop_item', 'woocommerce_template_loop_add_to_cart', 10 );
add_action( 'woocommerce_before_shop_loop_item_title', array( $this, 'avada_show_product_loop_outofstock_flash' ), 10 );
add_action( 'woocommerce_before_shop_loop_item_title', array( $this, 'avada_woocommerce_before_shop_loop_item_title_open' ), 5 );
add_action( 'woocommerce_before_shop_loop_item_title', array( $this, 'avada_woocommerce_before_shop_loop_item_title_close' ), 20 );
add_action( 'woocommerce_after_shop_loop_item', array( $this, 'before_shop_item_buttons' ), 5 );
add_action( 'woocommerce_after_shop_loop_item', array( $this, 'avada_woocommerce_template_loop_add_to_cart' ), 10 );
add_action( 'woocommerce_after_shop_loop_item', array( $this, 'show_details_button' ), 15 );
add_action( 'woocommerce_after_shop_loop_item', array( $this, 'after_shop_item_buttons' ), 20 );
}
/**
* Single Product Page
*/
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_title', 5 );
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_rating', 10 );
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 10 );
add_action( 'woocommerce_single_product_summary', array( $this, 'add_product_border' ), 19 );
add_action( 'woocommerce_single_product_summary', array( $this, 'avada_woocommerce_template_single_title' ), 5 );
add_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_price', 10 );
add_action( 'woocommerce_single_product_summary', array( $this, 'avada_woocommerce_stock_html' ), 10 );
add_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_rating', 11 );
add_action( 'woocommerce_proceed_to_checkout', array( $this, 'avada_woocommerce_proceed_to_checkout' ), 10 );
add_action( 'woocommerce_before_account_navigation', array( $this, 'avada_top_user_container' ), 10 );
// Add welcome user bar to checkout page.
add_action( 'woocommerce_before_checkout_form', array( $this, 'avada_top_user_container' ), 1 );
// Filter the pagination.
add_filter( 'woocommerce_pagination_args', array( $this, 'change_pagination' ) );
/**
* Version sensitive hooks.
*/
if ( version_compare( self::get_wc_version(), '2.6', '>=' ) ) {
// Account Page.
add_action( 'woocommerce_account_dashboard', array( $this, 'avada_woocommerce_account_dashboard' ), 5 );
add_action( 'woocommerce_before_account_orders', array( $this, 'avada_woocommerce_before_account_content_heading' ) );
add_action( 'woocommerce_before_account_downloads', array( $this, 'avada_woocommerce_before_account_content_heading' ) );
add_action( 'woocommerce_before_account_payment_methods', array( $this, 'avada_woocommerce_before_account_content_heading' ) );
add_action( 'woocommerce_edit_account_form_start', array( $this, 'avada_woocommerce_before_account_content_heading' ) );
} else {
add_filter( 'woocommerce_template_path', array( $this, 'backwards_compatibility' ) );
// Account Page.
add_action( 'woocommerce_before_my_account', array( $this, 'avada_woocommerce_pre26_before_my_account' ) );
add_action( 'woocommerce_after_my_account', array( $this, 'avada_woocommerce_pre26_after_my_account' ) );
}
}
/**
* Filter method to modify path to WooCommerce files if WooCommerce is a version less than 2.6.
*
* @since 3.7.2
* @param string $path The path.
* @return string The relative path of WooCommerce template files within the theme.
*/
function backwards_compatibility( $path ) {
return 'woocommerce/compatibility/2.5/';
}
/**
* Helper method to get the version of the currently installed WooCommerce.
*
* @since 3.7.2
* @return string woocommerce version number or null.
*/
private static function get_wc_version() {
return defined( 'WC_VERSION' ) && WC_VERSION ? WC_VERSION : null;
}
/**
* Add content before the container.
*
* @access public
*/
public function before_container() {
ob_start();
Avada()->layout->add_class( 'content_class' );
$content_class = ob_get_clean();
ob_start();
Avada()->layout->add_style( 'content_style' );
$content_css = ob_get_clean();
echo '<div class="woocommerce-container"><div id="content" ' . $content_class . ' ' . $content_css . '>';
}
/**
* Returns false.
*
* @access public
* @return false
*/
public function shop_title() {
return false;
}
/**
* Closes 2 divs that were previously opened.
*
* @access public
*/
public function after_container() {
echo '</div></div>';
}
/**
* Adds the sidebar.
*
* @access public
*/
function add_sidebar() {
do_action( 'avada_after_content' );
}
/**
* Prints the out of stock warning.
*
* @access public
*/
public function avada_show_product_loop_outofstock_flash() {
global $product; ?>
<?php if ( ! $product->is_in_stock() ) : ?>
<div class="fusion-out-of-stock">
<div class="fusion-position-text">
<?php esc_attr_e( 'Out of stock', 'Avada' ); ?>
</div>
</div>
<?php endif;
}
/**
* Adds the link to permalink.
*
* @access public
*/
public function avada_woocommerce_before_shop_loop_item_title_open() {
?>
<a href="<?php the_permalink(); ?>" class="product-images">
<?php
}
/**
* Closes the link.
*
* @access public
*/
public function avada_woocommerce_before_shop_loop_item_title_close() {
?>
</a>
<?php
}
/**
* Content before the item buttons.
*
* @access public
*/
function before_shop_item_buttons() {
global $post;
$html = '';
$buttons_container = '<div class="product-buttons"><div class="product-buttons-container clearfix">';
if ( isset( $_SERVER['QUERY_STRING'] ) ) {
parse_str( $_SERVER['QUERY_STRING'], $params );
if ( isset( $params['product_view'] ) ) {
$product_view = $params['product_view'];
if ( 'list' == $product_view ) {
$html = '<div class="product-excerpt product-' . $product_view . '">';
$html .= '<div class="product-excerpt-container">';
$html .= '<div class="post-content">';
$html .= do_shortcode( $post->post_excerpt );
$html .= '</div>';
$html .= '</div>';
$html .= $buttons_container;
$html .= ' </div>';
echo $html;
} else {
echo $buttons_container;
}
} else {
echo $buttons_container;
}
} else {
echo $buttons_container;
}
}
/**
* Add to cart loop.
*
* @access public
* @param array $args The arguments.
*/
function avada_woocommerce_template_loop_add_to_cart( $args = array() ) {
global $product;
if ( $product && ( ( $product->is_purchasable() && $product->is_in_stock() ) || $product->is_type( 'external' ) ) ) {
if ( version_compare( self::get_wc_version(), '2.5', '>=' ) ) {
$defaults = array(
'quantity' => 1,
'class' => implode( ' ', array_filter( array(
'button',
'product_type_' . $product->product_type,
$product->is_purchasable() && $product->is_in_stock() ? 'add_to_cart_button' : '',
$product->supports( 'ajax_add_to_cart' ) ? 'ajax_add_to_cart' : '',
) ) ),
);
$args = apply_filters( 'woocommerce_loop_add_to_cart_args', wp_parse_args( $args, $defaults ), $product );
}
wc_get_template( 'loop/add-to-cart.php' , $args );
}
}
/**
* Adds the linebreak where needed.
*
* @access public
*/
public function avada_woocommerce_rollover_buttons_linebreak() {
global $product; ?>
<?php if ( $product && ( ( $product->is_purchasable() && $product->is_in_stock() ) || $product->is_type( 'external' ) ) ) : ?>
<span class="fusion-rollover-linebreak">
<?php echo ( 'clean' === Avada()->settings->get( 'woocommerce_product_box_design' ) ) ? '/' : ''; ?>
</span>
<?php endif;
}
/**
* Renders the "Details" button.
*
* @access public
*/
public function show_details_button() {
global $product;
$styles = '';
if ( ( ! $product->is_purchasable() || ! $product->is_in_stock() ) && ! $product->is_type( 'external' ) ) {
$styles = ' style="float:none;max-width:none;text-align:center;"';
}
echo '<a href="' . get_permalink() . '" class="show_details_button"' . $styles . '>' . esc_attr__( 'Details', 'Avada' ) . '</a>';
}
/**
* Closes 2 divs that were previously opened.
*
* @access public
*/
public function after_shop_item_buttons() {
echo '</div></div>';
}
/**
* Adds a div that is used for borders.
*
* @access public
*/
function add_product_border() {
echo '<div class="product-border"></div>';
}
/**
* Modifies the pagination.
*
* @access public
* @param array $options An array of our options.
* @return array The options, modified.
*/
public function change_pagination( $options ) {
$options['prev_text'] = '<span class="page-prev"></span><span class="page-text">' . __( 'Previous', 'Avada' ) . '</span>';
$options['next_text'] = '<span class="page-text">' . __( 'Next', 'Avada' ) . '</span><span class="page-next"></span>';
$options['type'] = 'plain';
return $options;
}
/**
* Open wrapper divs.
*
* @access public
*/
public function avada_woocommerce_add_product_wrappers_open() {
?>
<div class="product-details">
<div class="product-details-container">
<?php
}
/**
* Renders the product title.
*
* @access public
*/
public function product_title() {
?>
<h3 class="product-title"><a href="<?php echo get_the_permalink(); ?>"><?php echo get_the_title(); ?></a></h3>
<div class="clearfix">
<?php
}
/**
* Closes previously opened wrappers.
*
* @access public
*/
public function avada_woocommerce_add_product_wrappers_close() {
?>
</div>
<div class="fusion-content-sep"></div>
</div>
</div>
<?php
}
/**
* Single Product Page functions.
*
* @access public
*/
public function avada_woocommerce_template_single_title() {
?>
<h2 itemprop="name" class="product_title entry-title"><?php the_title(); ?></h2>
<?php
}
/**
* Add the availability HTML.
*
* @access public
*/
public function avada_woocommerce_stock_html() {
global $product;
// Availability.
$availability = $product->get_availability();
$availability_html = empty( $availability['availability'] ) ? '' : '<p class="stock ' . esc_attr( $availability['class'] ) . '">' . esc_html( $availability['availability'] ) . '</p>';
?>
<div class="avada-availability">
<?php echo apply_filters( 'woocommerce_stock_html', $availability_html, $availability['availability'], $product ); ?>
</div>
<?php
}
/**
* Cart Page functions.
*/
public function avada_woocommerce_proceed_to_checkout() {
?>
<a href="" class="fusion-button button-default button-medium button default medium fusion-update-cart"><?php esc_attr_e( 'Update Cart', 'woocommerce' ); ?></a>
<?php
}
/**
* Account Page functions.
*
* @access public
*/
public function avada_top_user_container() {
global $woocommerce, $current_user;
?>
<div class="avada-myaccount-user">
<span class="username">
<?php if ( $current_user->display_name ) { ?>
<span class="hello">
<?php printf(
__( 'Hello %1$s (not %2$s? %3$s)', 'Avada' ),
'<strong>' . esc_html( $current_user->display_name ) . '</strong></span><span class="not-user">',
esc_html( $current_user->display_name ),
'<a href="' . esc_url( wc_get_endpoint_url( 'customer-logout', '', wc_get_page_permalink( 'myaccount' ) ) ) . '">' . esc_attr__( 'Sign Out', 'Avada' ) . '</a>'
); ?>
</span>
<?php } else { ?>
<span class="hello"><?php esc_attr_e( 'Hello', 'Avada' ); ?></span>
<?php } ?>
</span>
<?php if ( Avada()->settings->get( 'woo_acc_msg_1' ) ) : ?>
<span class="msg"><?php echo wp_kses_post( Avada()->settings->get( 'woo_acc_msg_1' ) ); ?></span>
<?php endif; ?>
<?php if ( Avada()->settings->get( 'woo_acc_msg_2' ) ) : ?>
<span class="msg"><?php echo wp_kses_post( Avada()->settings->get( 'woo_acc_msg_2' ) ); ?></span>
<?php endif; ?>
<span class="view-cart"><a href="<?php echo get_permalink( get_option( 'woocommerce_cart_page_id' ) ); ?>"><?php esc_attr_e( 'View Cart', 'Avada' ); ?></a></span>
</div>
<?php
}
/**
* The account dashboard.
*
* @access public
*/
public function avada_woocommerce_account_dashboard() {
?>
<style>
.woocommerce-MyAccount-content{ display: -webkit-flex;display: -ms-flexbox;display:flex;-webkit-flex-flow: column wrap;flex-flow: column nowrap; }
.avada-woocommerce-myaccount-heading{ -ms-flex-order: 0;-webkit-order: 0;order: 0; }
.woocommerce-MyAccount-content > p, .woocommerce-MyAccount-content > div, .woocommerce-MyAccount-content > span{ -ms-flex-order: 1;-webkit-order: 1;order: 1; }
.woocommerce-MyAccount-content > p:first-child { display: none; }
</style>
<?php
self::avada_woocommerce_before_account_content_heading();
}
/**
* Content injected before the content heading.
*
* @access public
*/
public function avada_woocommerce_before_account_content_heading() {
if ( is_account_page() ) {
$account_items = wc_get_account_menu_items();
$heading_content = __( 'Dashboard', 'Avada' );
if ( is_wc_endpoint_url( 'orders' ) ) {
$heading_content = $account_items['orders'];
} else if ( is_wc_endpoint_url( 'downloads' ) ) {
$heading_content = $account_items['downloads'];
} else if ( is_wc_endpoint_url( 'payment-methods' ) ) {
$heading_content = $account_items['payment-methods'];
} else if ( is_wc_endpoint_url( 'edit-account' ) ) {
$heading_content = $account_items['edit-account'];
}
?>
<h2 class="avada-woocommerce-myaccount-heading">
<?php echo $heading_content; ?>
</h2>
<?php
}
}
/**
* WooCommerce pre 2.6 compatibility functions.
*
* @access public
* @param string|int $order_count The number of posts in the query.
* @param bool $edit_address If we want to edit the address or not.
*/
public function avada_woocommerce_pre26_before_my_account( $order_count, $edit_address = false ) {
global $woocommerce;
$edit_address = is_wc_endpoint_url( 'edit-address' );
$this->avada_top_user_container();
?>
<ul class="woocommerce-side-nav avada-myaccount-nav avada-woocommerce-pre26">
<?php if ( $downloads = WC()->customer->get_downloadable_products() ) : ?>
<li <?php echo ( ! $edit_address ) ? 'class="is-active"' : ''; ?>>
<a class="downloads" href="#">
<?php esc_attr_e( 'View Downloads', 'Avada' ); ?>
</a>
</li>
<?php endif; ?>
<?php
if ( function_exists( 'wc_get_order_types' ) && function_exists( 'wc_get_order_statuses' ) ) {
$customer_orders = avada_cached_get_posts( apply_filters( 'woocommerce_my_account_my_orders_query', array(
'numberposts' => $order_count,
'meta_key' => '_customer_user',
'meta_value' => get_current_user_id(),
'post_type' => wc_get_order_types( 'view-orders' ),
'post_status' => array_keys( wc_get_order_statuses() ),
) ) );
} else {
$customer_orders = avada_cached_get_posts( apply_filters( 'woocommerce_my_account_my_orders_query', array(
'numberposts' => $order_count,
'meta_key' => '_customer_user',
'meta_value' => get_current_user_id(),
'post_type' => 'shop_order',
'post_status' => 'publish',
) ) );
}
if ( $customer_orders ) : ?>
<li <?php echo ( ! $edit_address && ! WC()->customer->get_downloadable_products() ) ? 'class="is-active"' : ''; ?>>
<a class="orders" href="#"><?php esc_attr_e( 'View Orders', 'Avada' ); ?></a>
</li>
<?php endif; ?>
<li <?php echo ( $edit_address || ! WC()->customer->get_downloadable_products() && ! $customer_orders ) ? 'class="is-active"' : ''; ?>>
<a class="address" href="#"><?php esc_attr_e( 'Change Address', 'Avada' ); ?></a>
</li>
<li>
<a class="account" href="#"><?php esc_attr_e( 'Edit Account', 'Avada' ); ?></a>
</li>
</ul>
<div class="woocommerce-content-box avada-myaccount-data">
<?php
}
/**
* Edit account form.
*
* @access public
* @param array $args The arguments.
*/
function avada_woocommerce_pre26_after_my_account( $args ) {
global $woocommerce, $wp;
$user = wp_get_current_user();
?>
<h2 class="edit-account-heading"><?php _e( 'Edit Account', 'Avada' ); ?></h2>
<form class="edit-account-form" action="" method="post">
<p class="form-row form-row-first">
<label for="account_first_name"><?php _e( 'First name', 'woocommerce' ); ?> <span class="required">*</span></label>
<input type="text" class="input-text" name="account_first_name" id="account_first_name" value="<?php echo esc_attr( $user->first_name ); ?>" />
</p>
<p class="form-row form-row-last">
<label for="account_last_name"><?php _e( 'Last name', 'woocommerce' ); ?> <span class="required">*</span></label>
<input type="text" class="input-text" name="account_last_name" id="account_last_name" value="<?php echo esc_attr( $user->last_name ); ?>" />
</p>
<p class="form-row form-row-wide">
<label for="account_email"><?php _e( 'Email address', 'woocommerce' ); ?> <span class="required">*</span></label>
<input type="email" class="input-text" name="account_email" id="account_email" value="<?php echo esc_attr( $user->user_email ); ?>" />
</p>
<p class="form-row form-row-wide">
<label for="password_current"><?php _e( 'Current Password (leave blank to leave unchanged)', 'woocommerce' ); ?></label>
<input type="password" class="input-text" name="password_current" id="password_current" />
</p>
<p class="form-row form-row-wide">
<label for="password_1"><?php _e( 'New Password (leave blank to leave unchanged)', 'woocommerce' ); ?></label>
<input type="password" class="input-text" name="password_1" id="password_1" />
</p>
<p class="form-row form-row-wide">
<label for="password_2"><?php _e( 'Confirm New Password', 'woocommerce' ); ?></label>
<input type="password" class="input-text" name="password_2" id="password_2" />
</p>
<div class="clear"></div>
<?php do_action( 'woocommerce_edit_account_form' ); ?>
<p><input type="submit" class="fusion-button button-default button-medium button default medium alignright"
name="save_account_details" value="<?php _e( 'Save changes', 'woocommerce' ); ?>"/></p>
<?php wp_nonce_field( 'save_account_details' ); ?>
<input type="hidden" name="action" value="save_account_details"/>
<div class="clearboth"></div>
</form>
</div>
<?php
}
} // end Avada_Woocommerce() class.
}
add_filter( 'get_product_search_form', 'avada_product_search_form' );
/**
* Changes the markup for the product search form.
*
* @param string $form The HTML of the form.
* @return string Modified HTML of the form.
*/
function avada_product_search_form( $form ) {
$form = '<form role="search" method="get" class="searchform" action="' . esc_url( home_url( '/' ) ) . '">
<div>
<input type="text" value="' . get_search_query() . '" name="s" class="s" placeholder="' . __( 'Search...', 'Avada' ) . '" />
<input type="hidden" name="post_type" value="product" />
</div>
</form>';
return $form;
}
remove_action( 'woocommerce_before_main_content', 'woocommerce_breadcrumb', 20 );
remove_action( 'woocommerce_before_shop_loop', 'woocommerce_result_count', 20 );
if ( Avada()->settings->get( 'woocommerce_avada_ordering' ) ) {
remove_action( 'woocommerce_before_shop_loop', 'woocommerce_catalog_ordering', 30 );
add_action( 'woocommerce_before_shop_loop', 'avada_woocommerce_catalog_ordering', 30 );
}
/**
* Modified the ordering of products.
*/
function avada_woocommerce_catalog_ordering() {
$query_string = '';
if ( isset( $_SERVER['QUERY_STRING'] ) ) {
parse_str( $_SERVER['QUERY_STRING'], $params );
$query_string = '?' . $_SERVER['QUERY_STRING'];
}
// Replace it with theme option.
$per_page = 12;
if ( Avada()->settings->get( 'woo_items' ) ) {
$per_page = Avada()->settings->get( 'woo_items' );
}
$pob = ! empty( $params['product_orderby'] ) ? $params['product_orderby'] : get_option( 'woocommerce_default_catalog_orderby' );
if ( ! empty( $params['product_order'] ) ) {
$po = $params['product_order'];
} else {
switch ( $pob ) {
case 'default':
case 'menu_order':
$po = 'asc';
break;
case 'date':
$po = 'desc';
break;
case 'price':
$po = 'asc';
break;
case 'price-desc':
$po = 'desc';
break;
case 'popularity':
$po = 'desc';
break;
case 'rating':
$po = 'desc';
break;
case 'name':
$po = 'asc';
break;
}
}
$order_string = __( 'Default Order', 'Avada' );
switch ( $pob ) {
case 'date':
$order_string = __( 'Date', 'Avada' );
break;
case 'price':
case 'price-desc':
$order_string = __( 'Price', 'Avada' );
break;
case 'popularity':
$order_string = __( 'Popularity', 'Avada' );
break;
case 'rating':
$order_string = __( 'Rating', 'Avada' );
break;
case 'name':
$order_string = __( 'Name', 'Avada' );
break;
}
$pc = ! empty( $params['product_count'] ) ? $params['product_count'] : $per_page;
?>
<div class="catalog-ordering clearfix">
<div class="orderby-order-container">
<ul class="orderby order-dropdown">
<li>
<span class="current-li">
<span class="current-li-content">
<a aria-haspopup="true"><?php printf( esc_html__( 'Sort by %s', 'Avada' ), '<strong>' . $order_string . '</strong>' ); ?></a>
</span>
</span>
<ul>
<li class="<?php echo ( 'menu_order' == $pob ) ? 'current' : ''; ?>">
<a href="<?php echo fusion_add_url_parameter( $query_string, 'product_orderby', 'default' ); ?>"><?php printf( esc_html__( 'Sort by %s', 'Avada' ), '<strong>' . esc_attr__( 'Default Order', 'Avada' ) . '</strong>' ); ?></a>
</li>
<li class="<?php echo ( 'name' == $pob ) ? 'current' : ''; ?>">
<a href="<?php echo fusion_add_url_parameter( $query_string, 'product_orderby', 'name' ); ?>"><?php printf( esc_html__( 'Sort by %s', 'Avada' ), '<strong>' . esc_attr__( 'Name', 'Avada' ) . '</strong>' ); ?></a>
</li>
<li class="<?php echo ( 'price' == $pob || 'price-desc' == $pob ) ? 'current' : ''; ?>">
<a href="<?php echo fusion_add_url_parameter( $query_string, 'product_orderby', 'price' ); ?>"><?php printf( esc_html__( 'Sort by %s', 'Avada' ), '<strong>' . esc_attr__( 'Price', 'Avada' ) . '</strong>' ); ?></a>
</li>
<li class="<?php echo ( 'date' == $pob ) ? 'current' : ''; ?>">
<a href="<?php echo fusion_add_url_parameter( $query_string, 'product_orderby', 'date' ); ?>"><?php printf( esc_html__( 'Sort by %s', 'Avada' ), '<strong>' . esc_attr__( 'Date', 'Avada' ) . '</strong>' ); ?></a>
</li>
<li class="<?php echo ( 'popularity' == $pob ) ? 'current' : ''; ?>">
<a href="<?php echo fusion_add_url_parameter( $query_string, 'product_orderby', 'popularity' ); ?>"><?php printf( esc_html__( 'Sort by %s', 'Avada' ), '<strong>' . esc_attr__( 'Popularity', 'Avada' ) . '</strong>' ); ?></a>
</li>
<?php if ( 'no' !== get_option( 'woocommerce_enable_review_rating' ) ) : ?>
<li class="<?php echo ( 'rating' == $pob ) ? 'current' : ''; ?>">
<a href="<?php echo fusion_add_url_parameter( $query_string, 'product_orderby', 'rating' ); ?>"><?php printf( esc_html__( 'Sort by %s', 'Avada' ), '<strong>' . esc_attr__( 'Rating', 'Avada' ) . '</strong>' ); ?></a>
</li>
<?php endif; ?>
</ul>
</li>
</ul>
<ul class="order">
<?php if ( isset( $po ) ) : ?>
<?php if ( 'desc' == $po ) : ?>
<li class="desc"><a aria-haspopup="true" href="<?php echo fusion_add_url_parameter( $query_string, 'product_order', 'asc' ); ?>"><i class="fusion-icon-arrow-down2 icomoon-up"></i></a></li>
<?php else : ?>
<li class="asc"><a aria-haspopup="true" href="<?php echo fusion_add_url_parameter( $query_string, 'product_order', 'desc' ); ?>"><i class="fusion-icon-arrow-down2"></i></a></li>
<?php endif; ?>
<?php endif; ?>
</ul>
</div>
<ul class="sort-count order-dropdown">
<li>
<span class="current-li"><a aria-haspopup="true"><?php printf( __( 'Show <strong>%s Products</strong>', 'Avada' ), $per_page ); ?></a></span>
<ul>
<li class="<?php echo ( $pc == $per_page ) ? 'current' : ''; ?>">
<a href="<?php echo fusion_add_url_parameter( $query_string, 'product_count', $per_page ); ?>"><?php printf( __( 'Show <strong>%s Products</strong>', 'Avada' ), $per_page ); ?></a>
</li>
<li class="<?php echo ( $pc == $per_page * 2 ) ? 'current' : ''; ?>">
<a href="<?php echo fusion_add_url_parameter( $query_string, 'product_count', $per_page * 2 ); ?>"><?php printf( __( 'Show <strong>%s Products</strong>', 'Avada' ), $per_page * 2 ); ?></a>
</li>
<li class="<?php echo ( $pc == $per_page * 3 ) ? 'current' : ''; ?>">
<a href="<?php echo fusion_add_url_parameter( $query_string, 'product_count', $per_page * 3 ); ?>"><?php printf( __( 'Show <strong>%s Products</strong>', 'Avada' ), $per_page * 3 ); ?></a>
</li>
</ul>
</li>
</ul>
<?php $woocommerce_toggle_grid_list = Avada()->settings->get( 'woocommerce_toggle_grid_list' ); ?>
<?php $product_view = 'grid'; ?>
<?php if ( isset( $_SERVER['QUERY_STRING'] ) ) : ?>
<?php parse_str( $_SERVER['QUERY_STRING'], $params ); ?>
<?php if ( isset( $params['product_view'] ) ) : ?>
<?php $product_view = $params['product_view']; ?>
<?php endif; ?>
<?php endif; ?>
<?php if ( $woocommerce_toggle_grid_list ) : ?>
<ul class="fusion-grid-list-view">
<li class="fusion-grid-view-li<?php echo ( 'grid' === $product_view ) ? ' active-view' : ''; ?>">
<a class="fusion-grid-view" aria-haspopup="true" href="<?php echo fusion_add_url_parameter( $query_string, 'product_view', 'grid' ); ?>"><i class="fusion-icon-grid icomoon-grid"></i></a>
</li>
<li class="fusion-list-view-li<?php echo ( 'list' == $product_view ) ? ' active-view' : ''; ?>">
<a class="fusion-list-view" aria-haspopup="true" href="<?php echo fusion_add_url_parameter( $query_string, 'product_view', 'list' ); ?>"><i class="fusion-icon-list icomoon-list"></i></a>
</li>
</ul>
<?php endif; ?>
</div>
<?php
}
if ( Avada()->settings->get( 'woocommerce_avada_ordering' ) ) {
add_action( 'woocommerce_get_catalog_ordering_args', 'avada_woocommerce_get_catalog_ordering_args', 20 );
}
/**
* Gets the catalogue ordering arguments.
*
* @param array $args The arguments.
* @return array
*/
function avada_woocommerce_get_catalog_ordering_args( $args ) {
global $woocommerce;
$woo_default_catalog_orderby = get_option( 'woocommerce_default_catalog_orderby' );
if ( isset( $_SERVER['QUERY_STRING'] ) ) {
parse_str( $_SERVER['QUERY_STRING'], $params );
}
$pob = ! empty( $params['product_orderby'] ) ? $params['product_orderby'] : get_option( 'woocommerce_default_catalog_orderby' );
if ( empty( $params['product_order'] ) ) {
if ( ! isset( $args['order'] ) ) {
if ( 'date' == $woo_default_catalog_orderby || 'popularity' == $woo_default_catalog_orderby ) {
$po = 'desc';
} else {
$po = 'asc';
}
} else {
$po = $args['order'];
}
} else {
$po = $params['product_order'];
}
// Remove posts_clause filter, if default ordering is set to rating or popularity to make custom ordering work correctly.
if ( 'default' != $pob ) {
if ( 'rating' == $woo_default_catalog_orderby || 'popularity' == $woo_default_catalog_orderby ) {
WC()->query->remove_ordering_args();
}
}
$orderby = 'date';
$meta_key = '';
switch ( $pob ) {
case 'menu_order':
case 'default':
$orderby = $args['orderby'];
$order = $args['order'];
break;
case 'date':
$order = 'desc';
break;
case 'price':
$orderby = 'meta_value_num';
$order = 'asc';
$meta_key = '_price';
break;
case 'popularity':
$orderby = 'meta_value_num';
$order = 'desc';
$meta_key = 'total_sales';
break;
case 'rating':
$orderby = 'meta_value_num';
$order = 'desc';
$meta_key = 'average_rating';
break;
case 'name':
$orderby = 'title';
$order = 'asc';
break;
}
switch ( strtolower( $po ) ) {
case 'desc':
$order = 'desc';
break;
case 'asc':
$order = 'asc';
break;
default:
$order = 'asc';
break;
}
$args['orderby'] = $orderby;
$args['order'] = $order;
$args['meta_key'] = $meta_key;
if ( 'popularity' == $pob ) {
add_filter( 'posts_clauses', 'fusion_order_by_popularity_post_clauses' );
}
if ( 'rating' == $pob ) {
$args['orderby'] = 'menu_order title';
$args['order'] = 'desc' == $po ? 'desc' : 'asc';
$args['order'] = strtoupper( $args['order'] );
$args['meta_key'] = '';
add_filter( 'posts_clauses', 'fusion_order_by_rating_post_clauses' );
}
return $args;
}
/**
* The fusion_order_by_rating_post_clauses function.
*
* @since 5.0.0
* @access public
* @param array $args The arguments array.
* @return array The altered arguments array.
*/
function fusion_order_by_popularity_post_clauses( $args ) {
global $wpdb;
if ( isset( $_SERVER['QUERY_STRING'] ) ) {
parse_str( $_SERVER['QUERY_STRING'], $params );
}
$order = empty( $params['product_order'] ) ? 'DESC' : strtoupper( $params['product_order'] );
$args['orderby'] = "$wpdb->postmeta.meta_value+0 {$order}, $wpdb->posts.post_date {$order}";
return $args;
}
/**
* The fusion_order_by_rating_post_clauses function.
*
* @access public
* @param array $args The arguments array.
* @return array The altered arguments array.
*/
function fusion_order_by_rating_post_clauses( $args ) {
global $wpdb;
$args['fields'] .= ", AVG( $wpdb->commentmeta.meta_value ) as average_rating ";
$args['where'] .= " AND ( $wpdb->commentmeta.meta_key = 'rating' OR $wpdb->commentmeta.meta_key IS null ) ";
$args['join'] .= "
LEFT OUTER JOIN $wpdb->comments ON($wpdb->posts.ID = $wpdb->comments.comment_post_ID)
LEFT JOIN $wpdb->commentmeta ON($wpdb->comments.comment_ID = $wpdb->commentmeta.comment_id)
";
if ( isset( $_SERVER['QUERY_STRING'] ) ) {
parse_str( $_SERVER['QUERY_STRING'], $params );
}
$order = ! empty( $params['product_order'] ) ? $params['product_order'] : 'desc';
$order = strtoupper( $order );
$args['orderby'] = "average_rating {$order}, $wpdb->posts.post_date {$order}";
$args['groupby'] = "$wpdb->posts.ID";
return $args;
}
add_filter( 'loop_shop_per_page', 'avada_loop_shop_per_page' );
/**
* Determine how many products we want to show per page.
*
* @return int
*/
function avada_loop_shop_per_page() {
if ( isset( $_SERVER['QUERY_STRING'] ) ) {
parse_str( $_SERVER['QUERY_STRING'], $params );
}
$per_page = 12;
if ( Avada()->settings->get( 'woo_items' ) ) {
$per_page = Avada()->settings->get( 'woo_items' );
}
return ( ! empty( $params['product_count'] ) ) ? $params['product_count'] : $per_page;
}
if ( 'clean' !== Avada()->settings->get( 'woocommerce_product_box_design' ) ) {
add_action( 'woocommerce_before_shop_loop_item_title', 'avada_woocommerce_thumbnail', 10 );
remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_thumbnail', 10 );
/**
* Shows the product image.
*/
function avada_woocommerce_thumbnail() {
global $product, $woocommerce;
$items_in_cart = array();
if ( $woocommerce->cart && $woocommerce->cart->get_cart() && is_array( $woocommerce->cart->get_cart() ) ) {
foreach ( $woocommerce->cart->get_cart() as $cart ) {
$items_in_cart[] = $cart['product_id'];
}
}
$id = get_the_ID();
$in_cart = in_array( $id, $items_in_cart );
$size = 'shop_catalog';
$attachment_image = '';
if ( Avada()->settings->get( 'woocommerce_disable_crossfade_effect' ) ) {
$gallery = get_post_meta( $id, '_product_image_gallery', true );
if ( ! empty( $gallery ) ) {
$gallery = explode( ',', $gallery );
$first_image_id = $gallery[0];
$attachment_image = wp_get_attachment_image( $first_image_id, $size, false, array( 'class' => 'hover-image' ) );
}
}
$thumb_image = get_the_post_thumbnail( $id, $size );
if ( $attachment_image ) {
$classes = 'crossfade-images';
} else {
$classes = 'featured-image';
}
echo '<span class="' . $classes . '">';
echo $attachment_image;
echo $thumb_image;
if ( $in_cart ) {
echo '<span class="cart-loading"><i class="fusion-icon-check-square-o"></i></span>';
} else {
echo '<span class="cart-loading"><i class="fusion-icon-spinner"></i></span>';
}
echo '</span>';
}
}
if ( Avada()->settings->get( 'woocommerce_product_box_design' ) == 'clean' ) {
add_action( 'woocommerce_before_shop_loop_item_title', 'avada_woocommerce_thumbnail', 10 );
remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_thumbnail', 10 );
/**
* Shows the featured image of the product.
*/
function avada_woocommerce_thumbnail() {
global $product, $woocommerce;
$items_in_cart = array();
if ( $woocommerce->cart && $woocommerce->cart->get_cart() && is_array( $woocommerce->cart->get_cart() ) ) {
foreach ( $woocommerce->cart->get_cart() as $cart ) {
$items_in_cart[] = $cart['product_id'];
}
}
$id = get_the_ID();
$in_cart = in_array( $id, $items_in_cart );
$size = 'shop_catalog';
$post_permalink = get_permalink();
$classes = '';
if ( $in_cart ) {
$classes = 'fusion-item-in-cart';
}
$featured_image_markup = avada_render_first_featured_image_markup( $id, $size, $post_permalink, true, false, true, 'disable', 'disable', '', '', 'yes', true );
echo '<div class="fusion-clean-product-image-wrapper ' . $classes . '">';
echo $featured_image_markup;
echo '</div>';
}
}
add_filter( 'wp_nav_menu_items', 'fusion_add_woo_cart_to_widget', 20, 4 );
/**
* Adds cart menu item.
*
* @param string $items The menu items.
* @param array $args The menu arguments.
* @return string
*/
function fusion_add_woo_cart_to_widget( $items, $args ) {
if ( class_exists( 'WooCommerce' ) ) {
$ubermenu = false;
if ( function_exists( 'ubermenu_get_menu_instance_by_theme_location' ) && ubermenu_get_menu_instance_by_theme_location( $args->theme_location ) ) {
// Disable woo cart on ubermenu navigations.
$ubermenu = true;
}
if ( false == $ubermenu && 'fusion-widget-menu' == $args->container_class ) {
$items .= fusion_add_woo_cart_to_widget_html();
}
}
return $items;
}
add_filter( 'woocommerce_add_to_cart_fragments', 'avada_woocommerce_header_add_to_cart_fragment' );
/**
* Modify the cart ajax.
*
* @param array $fragments Ajax fragments handled by WooCommerce.
* @return array
*/
function avada_woocommerce_header_add_to_cart_fragment( $fragments ) {
global $woocommerce;
$header_top_cart = avada_nav_woo_cart( 'secondary' );
$fragments['.fusion-secondary-menu-cart'] = $header_top_cart;
$header_cart = avada_nav_woo_cart( 'main' );
$fragments['.fusion-main-menu-cart'] = $header_cart;
$widget_cart = fusion_add_woo_cart_to_widget_html();
$fragments['.fusion-widget-cart'] = $widget_cart;
return $fragments;
}
/**
* Opens a div.
*/
function avada_woocommerce_single_product_summary_open() {
echo '<div class="summary-container">';
}
add_action( 'woocommerce_single_product_summary', 'avada_woocommerce_single_product_summary_open', 1 );
/**
* Closes the div.
*/
function avada_woocommerce_single_product_summary_close() {
echo '</div>';
}
add_action( 'woocommerce_single_product_summary', 'avada_woocommerce_single_product_summary_close', 100 );
add_action( 'woocommerce_after_single_product_summary', 'avada_woocommerce_after_single_product_summary', 15 );
/**
* Markupo to add after the summary on single products.
*/
function avada_woocommerce_after_single_product_summary() {
$nofollow = ' rel="noopener noreferrer"';
if ( Avada()->settings->get( 'nofollow_social_links' ) ) {
$nofollow = ' rel="noopener noreferrer nofollow"';
}
$social = '<div class="fusion-clearfix"></div>';
if ( Avada()->settings->get( 'woocommerce_social_links' ) ) {
if ( ! wp_is_mobile() ) {
$facebook_url = 'http://www.facebook.com/sharer.php?m2w&s=100&p[url]=' . get_permalink() . '&p[title]=' . wp_strip_all_tags( get_the_title(), true );
} else {
$facebook_url = 'https://m.facebook.com/sharer.php?u=' . get_permalink();
}
$social .= '<ul class="social-share clearfix">
<li class="facebook">
<a href="' . $facebook_url . '" target="_blank"' . $nofollow . '>
<i class="fontawesome-icon medium circle-yes fusion-icon-facebook"></i>
<div class="fusion-woo-social-share-text"><span>' . __( 'Share On Facebook', 'Avada' ) . '</span></div>
</a>
</li>
<li class="twitter">
<a href="https://twitter.com/share?text=' . wp_strip_all_tags( get_the_title(), true ) . '&url=' . urlencode( get_permalink() ) . '" target="_blank"' . $nofollow . '>
<i class="fontawesome-icon medium circle-yes fusion-icon-twitter"></i>
<div class="fusion-woo-social-share-text"><span>' . __( 'Tweet This Product', 'Avada' ) . '</span></div>
</a>
</li>
<li class="pinterest">';
$full_image = wp_get_attachment_image_src( get_post_thumbnail_id(), 'full' );
$social .= '<a href="http://pinterest.com/pin/create/button/?url=' . urlencode( get_permalink() ) . '&description=' . urlencode( wp_strip_all_tags( get_the_title(), true ) ) . '&media=' . urlencode( $full_image[0] ) . '" target="_blank"' . $nofollow . '>
<i class="fontawesome-icon medium circle-yes fusion-icon-pinterest"></i>
<div class="fusion-woo-social-share-text"><span>' . __( 'Pin This Product', 'Avada' ) . '</span></div>
</a>
</li>
<li class="email">
<a href="mailto:?subject=' . rawurlencode( html_entity_decode( wp_strip_all_tags( get_the_title(), true ), ENT_COMPAT, 'UTF-8' ) ) . '&body=' . get_permalink() . '" target="_blank"' . $nofollow . '>
<i class="fontawesome-icon medium circle-yes fusion-icon-mail"></i>
<div class="fusion-woo-social-share-text"><span>' . __( 'Mail This Product', 'Avada' ) . '</span></div>
</a>
</li>
</ul>';
echo $social;
}
}
remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_related_products', 20 );
add_action( 'woocommerce_after_single_product_summary', 'avada_woocommerce_output_related_products', 15 );
/**
* Add related products.
*/
function avada_woocommerce_output_related_products() {
global $post;
$number_of_columns = get_post_meta( $post->ID, 'pyre_number_of_related_products', true );
if ( in_array( get_post_meta( $post->ID, 'pyre_number_of_related_products', true ), array( 'default', '' ) ) || ! get_post_meta( $post->ID, 'pyre_number_of_related_products', true ) ) {
$number_of_columns = Avada()->settings->get( 'woocommerce_related_columns' );
}
$args = array(
'posts_per_page' => $number_of_columns,
'columns' => $number_of_columns,
'orderby' => 'rand',
);
echo '<div class="fusion-clearfix"></div>';
woocommerce_related_products( apply_filters( 'woocommerce_output_related_products_args', $args ) );
}
remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_upsell_display', 15 );
add_action( 'woocommerce_after_single_product_summary', 'avada_woocommerce_upsell_display', 10 );
/**
* Displays upsells.
*/
function avada_woocommerce_upsell_display() {
global $product, $woocommerce_loop, $post;
$upsells = $product->get_upsells();
if ( count( $upsells ) == 0 ) {
return;
}
?>
<div class="fusion-clearfix"></div>
<?php
$number_of_columns = get_post_meta( $post->ID, 'pyre_number_of_related_products', true );
if ( in_array( get_post_meta( $post->ID, 'pyre_number_of_related_products', true ), array( 'default', '' ) ) || ! get_post_meta( $post->ID, 'pyre_number_of_related_products', true ) ) {
$number_of_columns = Avada()->settings->get( 'woocommerce_related_columns' );
}
woocommerce_upsell_display( - 1, $number_of_columns );
}
/* variations hooks */
/* end variations hooks */
/* cart hooks */
add_action( 'woocommerce_before_cart_table', 'avada_woocommerce_before_cart_table', 20 );
/**
* Add markup before the cart table.
*
* @param array $args Not really used here.
*/
function avada_woocommerce_before_cart_table( $args ) {
global $woocommerce;
$html = '<div class="woocommerce-content-box full-width clearfix">';
if ( $woocommerce->cart->get_cart_contents_count() == 1 ) {
$html .= '<h2>' . sprintf( __( 'You Have %d Item In Your Cart', 'Avada' ), $woocommerce->cart->get_cart_contents_count() ) . '</h2>';
} else {
$html .= '<h2>' . sprintf( __( 'You Have %d Items In Your Cart', 'Avada' ), $woocommerce->cart->get_cart_contents_count() ) . '</h2>';
}
echo $html;
}
add_action( 'woocommerce_after_cart_table', 'avada_woocommerce_after_cart_table', 20 );
/**
* Adds markup after the cart table.
*
* @param array $args Not used here.
*/
function avada_woocommerce_after_cart_table( $args ) {
echo '</div>';
}
/**
* Display cross-sell template.
*
* @param int $posts_per_page Number of posts in the query.
* @param int $columns Number of culumns.
* @param string $orderby Determines how the query will order the posts.
*/
function woocommerce_cross_sell_display( $posts_per_page = 3, $columns = 3, $orderby = 'rand' ) {
wc_get_template( 'cart/cross-sells.php', array(
'posts_per_page' => $posts_per_page,
'orderby' => $orderby,
'columns' => $columns,
) );
}
/**
* Adds shipping calculation markup & form.
*/
function cart_shipping_calc() {
global $woocommerce;
if ( get_option( 'woocommerce_enable_shipping_calc' ) === 'no' || ! WC()->cart->needs_shipping() ) {
return;
}
?>
<?php do_action( 'woocommerce_before_shipping_calculator' ); ?>
<form class="woocommerce-shipping-calculator" action="<?php echo esc_url( WC()->cart->get_cart_url() ); ?>" method="post">
<h2><span href="#" class="shipping-calculator-button"><?php _e( 'Calculate Shipping', 'woocommerce' ); ?></span>
</h2>
<div class="avada-shipping-calculator-form">
<p class="form-row form-row-wide">
<select name="calc_shipping_country" id="calc_shipping_country" class="country_to_state" rel="calc_shipping_state">
<option value=""><?php _e( 'Select a country…', 'woocommerce' ); ?></option>
<?php
foreach ( WC()->countries->get_shipping_countries() as $key => $value ) {
echo '<option value="' . esc_attr( $key ) . '"' . selected( WC()->customer->get_shipping_country(), esc_attr( $key ), false ) . '>' . esc_html( $value ) . '</option>';
}
?>
</select>
</p>
<div class="<?php if ( Avada()->settings->get( 'avada_styles_dropdowns' ) ) : ?>avada-select-parent fusion-layout-column fusion-one-half fusion-spacing-yes<?php endif; ?>">
<?php
$current_cc = WC()->customer->get_shipping_country();
$current_r = WC()->customer->get_shipping_state();
$states = WC()->countries->get_states( $current_cc );
?>
<?php if ( is_array( $states ) && empty( $states ) ) : // Hidden Input. ?>
<input type="hidden" name="calc_shipping_state" id="calc_shipping_state" placeholder="<?php esc_attr_e( 'State / county', 'woocommerce' ); ?>" />
<?php elseif ( is_array( $states ) ) : // Dropdown Input. ?>
<span>
<select name="calc_shipping_state" id="calc_shipping_state" placeholder="<?php esc_attr_e( 'State / county', 'woocommerce' ); ?>">
<option value=""><?php _e( 'Select a state…', 'woocommerce' ); ?></option>
<?php
foreach ( $states as $ckey => $cvalue ) {
echo '<option value="' . esc_attr( $ckey ) . '" ' . selected( $current_r, $ckey, false ) . '>' . esc_html( $cvalue ) . '</option>';
}
?>
</select>
</span>
<?php else : // Standard Input. ?>
<input type="text" class="input-text" value="<?php echo esc_attr( $current_r ); ?>" placeholder="<?php esc_attr_e( 'State / county', 'woocommerce' ); ?>" name="calc_shipping_state" id="calc_shipping_state" />
<?php endif; ?>
</div>
<?php if ( apply_filters( 'woocommerce_shipping_calculator_enable_city', false ) ) : ?>
<p class="form-row form-row-wide">
<input type="text" class="input-text" value="<?php echo esc_attr( WC()->customer->get_shipping_city() ); ?>" placeholder="<?php esc_attr_e( 'City', 'woocommerce' ); ?>" name="calc_shipping_city" id="calc_shipping_city" />
</p>
<?php endif; ?>
<?php if ( apply_filters( 'woocommerce_shipping_calculator_enable_postcode', true ) ) : ?>
<div class="form-row form-row-wide fusion-layout-column fusion-one-half fusion-spacing-yes fusion-column-last">
<input type="text" class="input-text" value="<?php echo esc_attr( WC()->customer->get_shipping_postcode() ); ?>" placeholder="<?php esc_attr_e( 'Postcode / ZIP', 'woocommerce' ); ?>" name="calc_shipping_postcode" id="calc_shipping_postcode" />
</div>
<?php endif; ?>
<p>
<button type="submit" name="calc_shipping" value="1" class="fusion-button button-default button-small button small default"><?php _e( 'Update Totals', 'woocommerce' ); ?></button>
</p>
<?php wp_nonce_field( 'woocommerce-cart' ); ?>
</div>
</form>
<?php do_action( 'woocommerce_after_shipping_calculator' ); ?>
<?php
}
/**
* Gets the shipping calculator template.
*/
function woocommerce_shipping_calculator() {
if ( ! is_cart() ) {
wc_get_template( 'cart/shipping-calculator.php' );
}
}
add_action( 'woocommerce_cart_collaterals', 'avada_woocommerce_cart_collaterals', 5 );
/**
* Adds coupon code form.
*
* @param array $args The formarguments.
*/
function avada_woocommerce_cart_collaterals( $args ) {
global $woocommerce;
?>
<div class="shipping-coupon">
<?php echo cart_shipping_calc(); ?>
<?php if ( WC()->cart->coupons_enabled() ) : ?>
<div class="coupon">
<h2><?php esc_attr_e( 'Have A Promotional Code?', 'Avada' ); ?></h2>
<input type="text" name="coupon_code" class="input-text" id="avada_coupon_code" value="" placeholder="<?php esc_attr_e( 'Coupon code', 'woocommerce' ); ?>" />
<input type="submit" class="fusion-apply-coupon fusion-button fusion-button-default fusion-button-small button default small" name="apply_coupon" value="<?php esc_attr_e( 'Apply Coupon', 'Avada' ); ?>" />
<?php do_action( 'woocommerce_cart_coupon' ); ?>
</div>
<?php endif; ?>
</div>
<?php
}
remove_action( 'woocommerce_cart_collaterals', 'woocommerce_cross_sell_display' );
add_action( 'woocommerce_cart_collaterals', 'avada_woocommerce_cross_sell_display', 5 );
/**
* Displays cross-sell.
*/
function avada_woocommerce_cross_sell_display() {
global $product, $woocommerce_loop, $post;
$crosssells = WC()->cart->get_cross_sells();
if ( 0 == count( $crosssells ) ) {
return;
}
$number_of_columns = Avada()->settings->get( 'woocommerce_related_columns' );
woocommerce_cross_sell_display( apply_filters( 'woocommerce_cross_sells_total', - 1 ), $number_of_columns );
}
/* end cart hooks */
/* begin checkout hooks */
remove_action( 'woocommerce_before_checkout_form', 'woocommerce_checkout_coupon_form', 10 );
add_action( 'woocommerce_before_checkout_form', 'avada_woocommerce_checkout_coupon_form', 10 );
/**
* Adds coupon form in the checkout page.
*
* @param array $args The form arguments.
*/
function avada_woocommerce_checkout_coupon_form( $args ) {
global $woocommerce;
if ( ! WC()->cart->coupons_enabled() ) {
return;
}
?>
<form class="woocommerce-content-box full-width checkout_coupon" method="post">
<h2 class="promo-code-heading fusion-alignleft"><?php _e( 'Have A Promotional Code?', 'Avada' ); ?></h2>
<div class="coupon-contents fusion-alignright">
<div class="form-row form-row-first fusion-alignleft coupon-input">
<input type="text" name="coupon_code" class="input-text"
placeholder="<?php _e( 'Coupon code', 'woocommerce' ); ?>" id="coupon_code" value=""/>
</div>
<div class="form-row form-row-last fusion-alignleft coupon-button">
<input type="submit" class="fusion-button button-default button-small button default small"
name="apply_coupon" value="<?php _e( 'Apply Coupon', 'woocommerce' ); ?>"/>
</div>
<div class="clear"></div>
</div>
</form>
<?php
}
if ( ! Avada()->settings->get( 'woocommerce_one_page_checkout' ) ) {
add_action( 'woocommerce_before_checkout_form', 'avada_woocommerce_before_checkout_form' );
}
/**
* Markup to add before the checkout form.
*
* @param array $args Not used in this context.
*/
function avada_woocommerce_before_checkout_form( $args ) {
global $woocommerce;
?>
<ul class="woocommerce-side-nav woocommerce-checkout-nav">
<li class="is-active">
<a data-name="col-1" href="#">
<?php _e( 'Billing Address', 'Avada' ); ?>
</a>
</li>
<?php if ( WC()->cart->needs_shipping() && ! WC()->cart->ship_to_billing_address_only() ) : ?>
<li>
<a data-name="col-2" href="#">
<?php _e( 'Shipping Address', 'Avada' ); ?>
</a>
</li>
<?php
elseif ( apply_filters( 'woocommerce_enable_order_notes_field', get_option( 'woocommerce_enable_order_comments', 'yes' ) === 'yes' ) ) :
if ( ! WC()->cart->needs_shipping() || WC()->cart->ship_to_billing_address_only() ) : ?>
<li>
<a data-name="col-2" href="#">
<?php esc_attr_e( 'Additional Information', 'Avada' ); ?>
</a>
</li>
<?php endif; ?>
<?php endif; ?>
<li>
<a data-name="order_review" href="#">
<?php _e( 'Review & Payment', 'Avada' ); ?>
</a>
</li>
</ul>
<div class="woocommerce-content-box avada-checkout">
<?php
}
if ( ! Avada()->settings->get( 'woocommerce_one_page_checkout' ) ) {
add_action( 'woocommerce_after_checkout_form', 'avada_woocommerce_after_checkout_form' );
}
/**
* Closes the div after the checkout form.
*
* @param array $args The arguments (not used here).
*/
function avada_woocommerce_after_checkout_form( $args ) {
echo '</div>';
}
if ( Avada()->settings->get( 'woocommerce_one_page_checkout' ) ) {
add_action( 'woocommerce_checkout_before_customer_details', 'avada_woocommerce_checkout_before_customer_details' );
}
/**
* Markup to add before the customer details form.
*
* @param array $args The form arguments. Not used in the context of this function.
*/
function avada_woocommerce_checkout_before_customer_details( $args ) {
global $woocommerce;
if ( WC()->cart->needs_shipping() && ! WC()->cart->ship_to_billing_address_only() || apply_filters( 'woocommerce_enable_order_notes_field', get_option( 'woocommerce_enable_order_comments', 'yes' ) === 'yes' ) && ( ! WC()->cart->needs_shipping() || WC()->cart->ship_to_billing_address_only() ) ) {
return;
} else {
echo '<div class="avada-checkout-no-shipping">';
}
}
if ( Avada()->settings->get( 'woocommerce_one_page_checkout' ) ) {
add_action( 'woocommerce_checkout_after_customer_details', 'avada_woocommerce_checkout_after_customer_details' );
}
/**
* Adds markup after the customer details form.
*
* @param array $args The form arguments. Not used in the context of this function.
*/
function avada_woocommerce_checkout_after_customer_details( $args ) {
global $woocommerce;
if ( WC()->cart->needs_shipping() && ! WC()->cart->ship_to_billing_address_only() || apply_filters( 'woocommerce_enable_order_notes_field', get_option( 'woocommerce_enable_order_comments', 'yes' ) === 'yes' ) && ( ! WC()->cart->needs_shipping() || WC()->cart->ship_to_billing_address_only() ) ) {
echo '<div class="clearboth"></div>';
} else {
echo '<div class="clearboth"></div></div>';
}
echo '<div class="woocommerce-content-box full-width">';
}
add_action( 'woocommerce_checkout_billing', 'avada_woocommerce_checkout_billing', 20 );
/**
* Add checkout billing markup.
*
* @param array $args The form arguments. Not used in the context of this function.
*/
function avada_woocommerce_checkout_billing( $args ) {
global $woocommerce;
$data_name = 'order_review';
if ( WC()->cart->needs_shipping() && ! WC()->cart->ship_to_billing_address_only() || apply_filters( 'woocommerce_enable_order_notes_field', get_option( 'woocommerce_enable_order_comments', 'yes' ) === 'yes' ) && ( ! WC()->cart->needs_shipping() || WC()->cart->ship_to_billing_address_only() ) ) {
$data_name = 'col-2';
}
if ( ! Avada()->settings->get( 'woocommerce_one_page_checkout' ) ) {
?>
<a data-name="<?php echo esc_attr( $data_name ); ?>" href="#"
class="fusion-button button-default button-medium button default medium continue-checkout"><?php esc_attr_e( 'Continue', 'Avada' ); ?></a>
<div class="clearboth"></div>
<?php
}
}
add_action( 'woocommerce_checkout_shipping', 'avada_woocommerce_checkout_shipping', 20 );
/**
* Add checkout shipping markup.
*
* @param array $args The form arguments. Not used in the context of this function.
*/
function avada_woocommerce_checkout_shipping( $args ) {
if ( ! Avada()->settings->get( 'woocommerce_one_page_checkout' ) ) {
?>
<a data-name="order_review" href="#"
class="fusion-button button-default button-medium continue-checkout button default medium"><?php _e( 'Continue', 'Avada' ); ?></a>
<div class="clearboth"></div>
<?php
}
}
add_filter( 'woocommerce_enable_order_notes_field', 'avada_enable_order_notes_field' );
/**
* Determines if we should enable order notes or not.
*
* @return bool
*/
function avada_enable_order_notes_field() {
return ( ! Avada()->settings->get( 'woocommerce_enable_order_notes' ) ) ? 0 : 1;
}
if ( Avada()->settings->get( 'woocommerce_one_page_checkout' ) ) {
add_action( 'woocommerce_checkout_after_order_review', 'avada_woocommerce_checkout_after_order_review', 20 );
}
/**
* Closes the div.
*/
function avada_woocommerce_checkout_after_order_review() {
echo '</div>';
}
// Function under myaccount hooks.
remove_action( 'woocommerce_thankyou', 'woocommerce_order_details_table', 10 );
add_action( 'woocommerce_thankyou', 'avada_woocommerce_view_order', 10 );
/* End checkout hooks */
/* Begin my-account hooks */
/**
* Open a div if needed.
*/
function avada_woocommerce_before_customer_login_form() {
global $woocommerce;
if ( 'yes' !== get_option( 'woocommerce_enable_myaccount_registration' ) ) {
echo '<div id="customer_login" class="woocommerce-content-box full-width">';
}
}
add_action( 'woocommerce_before_customer_login_form', 'avada_woocommerce_before_customer_login_form' );
add_action( 'woocommerce_after_customer_login_form', 'avada_woocommerce_after_customer_login_form' );
/**
* Markup to add after the customer-login form.
*/
function avada_woocommerce_after_customer_login_form() {
global $woocommerce;
if ( 'yes' !== get_option( 'woocommerce_enable_myaccount_registration' ) ) {
echo '</div>';
}
}
/* End my-account hooks */
/* Begin order hooks */
remove_action( 'woocommerce_view_order', 'woocommerce_order_details_table', 10 );
add_action( 'woocommerce_view_order', 'avada_woocommerce_view_order', 10 );
/**
* Add the view-order markup.
*
* @param int $order_id The ID of the order we're querying.
*/
function avada_woocommerce_view_order( $order_id ) {
global $woocommerce;
$order = new WC_Order( $order_id );
?>
<div class="avada-order-details woocommerce-content-box full-width">
<h2><?php _e( 'Order Details', 'woocommerce' ); ?></h2>
<table class="shop_table order_details">
<thead>
<tr>
<th class="product-name"><?php _e( 'Product', 'woocommerce' ); ?></th>
<th class="product-quantity"><?php _e( 'Quantity', 'woocommerce' ); ?></th>
<th class="product-total"><?php _e( 'Total', 'woocommerce' ); ?></th>
</tr>
</thead>
<tfoot>
<?php if ( $totals = $order->get_order_item_totals() ) : ?>
<?php foreach ( $totals as $total ) : ?>
<tr>
<td class="filler-td"> </td>
<th scope="row"><?php echo $total['label']; ?></th>
<td class="product-total"><?php echo $total['value']; ?></td>
</tr>
<?php endforeach; ?>
<?php endif; ?>
</tfoot>
<tbody>
<?php if ( count( $order->get_items() ) > 0 ) : ?>
<?php foreach ( $order->get_items() as $item ) : ?>
<?php $_product = apply_filters( 'woocommerce_order_item_product', $order->get_product_from_item( $item ), $item ); ?>
<?php $item_meta = new WC_Order_Item_Meta( $item['item_meta'] ); ?>
<tr class="<?php echo esc_attr( apply_filters( 'woocommerce_order_item_class', 'order_item', $item, $order ) ); ?>">
<td class="product-name">
<span class="product-thumbnail">
<?php $thumbnail = $_product->get_image(); ?>
<?php if ( ! $_product->is_visible() ) : ?>
<?php echo $thumbnail; ?>
<?php else : ?>
<a href="<?php echo $_product->get_permalink(); ?>"><?php echo $thumbnail; ?></a>
<?php endif; ?>
</span>
<div class="product-info">
<?php if ( $_product && ! $_product->is_visible() ) : ?>
<?php echo apply_filters( 'woocommerce_order_item_name', $item['name'], $item ); ?>
<?php else : ?>
<?php echo apply_filters( 'woocommerce_order_item_name', sprintf( '<a href="%s">%s</a>', get_permalink( $item['product_id'] ), $item['name'] ), $item ); ?>
<?php endif; ?>
<?php
// Meta data.
do_action( 'woocommerce_order_item_meta_start', $item['product_id'], $item, $order );
$order->display_item_meta( $item );
$order->display_item_downloads( $item );
do_action( 'woocommerce_order_item_meta_end', $item['product_id'], $item, $order );
?>
</div>
</td>
<td class="product-quantity">
<?php echo apply_filters( 'woocommerce_order_item_quantity_html', $item['qty'], $item ); ?>
</td>
<td class="product-total">
<?php echo $order->get_formatted_line_subtotal( $item ); ?>
</td>
</tr>
<?php if ( in_array( $order->status, array( 'processing', 'completed' ) ) && ( $purchase_note = get_post_meta( $_product->id, '_purchase_note', true ) ) ) : ?>
<tr class="product-purchase-note">
<td colspan="3"><?php echo apply_filters( 'the_content', $purchase_note ); ?></td>
</tr>
<?php endif; ?>
<?php endforeach; ?>
<?php endif; ?>
<?php do_action( 'woocommerce_order_items_table', $order ); ?>
</tbody>
</table>
<?php do_action( 'woocommerce_order_details_after_order_table', $order ); ?>
</div>
<div class="avada-customer-details woocommerce-content-box full-width">
<header>
<h2><?php _e( 'Customer details', 'woocommerce' ); ?></h2>
</header>
<dl class="customer_details">
<?php if ( $order->billing_email ) : ?>
<?php echo '<dt>' . __( 'Email:', 'woocommerce' ) . '</dt> <dd>' . $order->billing_email . '</dd><br />'; ?>
<?php endif; ?>
<?php if ( $order->billing_phone ) : ?>
<dt><?php esc_attr_e( 'Telephone:', 'woocommerce' ); ?></dt> <dd><?php echo esc_html( $order->billing_phone ); ?></dd>
<?php endif; ?>
<?php
// Additional customer details hook.
do_action( 'woocommerce_order_details_after_customer_details', $order );
?>
</dl>
<?php if ( 'no' === get_option( 'woocommerce_ship_to_billing_address_only' ) && 'no' !== get_option( 'woocommerce_calc_shipping' ) ) : ?>
<div class="col2-set addresses">
<div class="col-1">
<?php endif; ?>
<header class="title">
<h3><?php esc_attr_e( 'Billing Address', 'woocommerce' ); ?></h3>
</header>
<address>
<p>
<?php if ( ! $order->get_formatted_billing_address() ) : ?>
<?php esc_attr_e( 'N/A', 'woocommerce' ); ?>
<?php else : ?>
<?php echo $order->get_formatted_billing_address(); ?>
<?php endif; ?>
</p>
</address>
<?php if ( 'no' === get_option( 'woocommerce_ship_to_billing_address_only' ) && 'no' !== get_option( 'woocommerce_calc_shipping' ) ) : ?>
</div>
<!-- /.col-1 -->
<div class="col-2">
<header class="title">
<h3><?php _e( 'Shipping Address', 'woocommerce' ); ?></h3>
</header>
<address>
<p>
<?php if ( ! $order->get_formatted_shipping_address() ) : ?>
<?php esc_attr_e( 'N/A', 'woocommerce' ); ?>
<?php else : ?>
<?php echo $order->get_formatted_shipping_address(); ?>
<?php endif; ?>
</p>
</address>
</div>
<!-- /.col-2 -->
</div>
<!-- /.col2-set -->
<?php endif; ?>
<div class="clear"></div>
</div>
<?php
}
/* End order hooks */
add_filter( 'post_class', 'avada_change_product_class' );
if ( ! function_exists( 'avada_change_product_class' ) ) {
/**
* The avada_change_product_class hook - Function to add 'product-list-view' class if the list view is being displayed.
*
* @param array $classes - An array containing class names for the particular post / product.
* @return array $classes - An array containing additional class 'product-list-view' if the product view is set to list.
*/
function avada_change_product_class( $classes ) {
if ( isset( $_SERVER['QUERY_STRING'] ) ) {
parse_str( $_SERVER['QUERY_STRING'], $params );
if ( isset( $params['product_view'] ) ) {
$product_view = $params['product_view'];
if ( 'list' == $product_view ) {
$classes[] = 'product-list-view';
}
}
}
return $classes;
}
}
/* Omit closing PHP tag to avoid "Headers already sent" issues. */