You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
1904 lines
60 KiB
1904 lines
60 KiB
<?php
|
|
|
|
if ( ! defined( 'WOODMART_THEME_DIR' ) ) {
|
|
exit( 'No direct script access allowed' );
|
|
}
|
|
|
|
if ( ! function_exists( 'woodmart_wc_ajax_variation_threshold' ) ) {
|
|
/**
|
|
* AJAX variation threshold.
|
|
*
|
|
* @since 1.0.0
|
|
*
|
|
* @param integer $limit Limit.
|
|
*
|
|
* @return mixed
|
|
*/
|
|
function woodmart_wc_ajax_variation_threshold( $limit ) {
|
|
if ( woodmart_get_opt( 'ajax_variation_threshold' ) && 30 !== (int) woodmart_get_opt( 'ajax_variation_threshold' ) ) {
|
|
$limit = woodmart_get_opt( 'ajax_variation_threshold' );
|
|
}
|
|
|
|
return $limit;
|
|
}
|
|
|
|
add_filter( 'woocommerce_ajax_variation_threshold', 'woodmart_wc_ajax_variation_threshold' );
|
|
}
|
|
|
|
if ( ! function_exists( 'woodmart_wc_products_shortcode_compatibility' ) ) {
|
|
/**
|
|
* Woocommerce products shortcode compatibility.
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
function woodmart_wc_products_shortcode_compatibility() {
|
|
add_action(
|
|
'woocommerce_shortcode_products_query',
|
|
function( $query ) {
|
|
if ( isset( $_GET['per_page'] ) ) { // phpcs:ignore
|
|
$query['posts_per_page'] = wc_clean( wp_unslash( $_GET['per_page'] ) ); // phpcs:ignore
|
|
}
|
|
|
|
return $query;
|
|
}
|
|
);
|
|
|
|
add_action(
|
|
'woocommerce_shortcode_before_products_loop',
|
|
function( $attributes ) {
|
|
woodmart_products_per_page_select( true );
|
|
woodmart_products_view_select( true );
|
|
woocommerce_catalog_ordering();
|
|
|
|
woodmart_set_loop_prop( 'products_columns', $attributes['columns'] ); // phpcs:ignore
|
|
|
|
if ( isset( $_GET['shop_view'] ) ) { // phpcs:ignore
|
|
woodmart_set_loop_prop( 'products_view', wc_clean( wp_unslash( $_GET['shop_view'] ) ) ); // phpcs:ignore
|
|
}
|
|
|
|
if ( isset( $_GET['per_row'] ) ) { // phpcs:ignore
|
|
woodmart_set_loop_prop( 'products_columns', wc_clean( wp_unslash( $_GET['per_row'] ) ) ); // phpcs:ignore
|
|
}
|
|
|
|
remove_action( 'woocommerce_before_shop_loop', 'woocommerce_catalog_ordering', 30 );
|
|
remove_action( 'woocommerce_before_shop_loop', 'woodmart_products_per_page_select', 25 );
|
|
remove_action( 'woocommerce_before_shop_loop', 'woodmart_products_view_select', 27 );
|
|
}
|
|
);
|
|
}
|
|
|
|
add_action( 'wp', 'woodmart_wc_products_shortcode_compatibility', 10 );
|
|
}
|
|
|
|
|
|
if ( ! function_exists( 'woodmart_product_price_slider_script' ) ) {
|
|
/**
|
|
* Enqueue script.
|
|
*
|
|
* @since 1.0.0
|
|
*
|
|
* @param string $template_name Template_name.
|
|
*/
|
|
function woodmart_product_price_slider_script( $template_name ) {
|
|
if ( 'content-widget-price-filter.php' === $template_name ) {
|
|
woodmart_enqueue_js_script( 'woocommerce-price-slider' );
|
|
}
|
|
}
|
|
|
|
add_action( 'woocommerce_before_template_part', 'woodmart_product_price_slider_script', 10 );
|
|
}
|
|
|
|
if ( ! function_exists( 'woodmart_product_categories_widget_script' ) ) {
|
|
/**
|
|
* Enqueue script.
|
|
*
|
|
* @since 1.0.0
|
|
*
|
|
* @param string $data Data.
|
|
*
|
|
* @return string
|
|
*/
|
|
function woodmart_product_categories_widget_script( $data ) {
|
|
if ( woodmart_get_opt( 'categories_toggle' ) ) {
|
|
woodmart_enqueue_js_script( 'categories-accordion' );
|
|
}
|
|
|
|
woodmart_enqueue_js_script( 'categories-dropdown' );
|
|
|
|
return $data;
|
|
}
|
|
|
|
add_action( 'woocommerce_product_categories_widget_args', 'woodmart_product_categories_widget_script', 10 );
|
|
add_action( 'woocommerce_product_categories_widget_dropdown_args', 'woodmart_product_categories_widget_script', 10 );
|
|
}
|
|
|
|
if ( ! function_exists( 'woodmart_woo_widgets_select2' ) ) {
|
|
/**
|
|
* Enqueue style for woo widgets.
|
|
*
|
|
* @since 1.0.0
|
|
*
|
|
* @param string $data Data.
|
|
*
|
|
* @return string
|
|
*/
|
|
function woodmart_woo_widgets_select2( $data ) {
|
|
woodmart_enqueue_inline_style( 'select2' );
|
|
|
|
return $data;
|
|
}
|
|
|
|
add_action( 'woocommerce_product_categories_widget_dropdown_args', 'woodmart_woo_widgets_select2', 10 );
|
|
add_action( 'woocommerce_layered_nav_any_label', 'woodmart_woo_widgets_select2', 10 );
|
|
}
|
|
|
|
if ( ! function_exists( 'woodmart_single_product_add_to_cart_scripts' ) ) {
|
|
/**
|
|
* Enqueue single product scripts.
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
function woodmart_single_product_add_to_cart_scripts() {
|
|
if ( woodmart_get_opt( 'single_ajax_add_to_cart' ) ) {
|
|
woodmart_enqueue_js_script( 'add-to-cart-all-types' );
|
|
}
|
|
|
|
if ( 'nothing' !== woodmart_get_opt( 'add_to_cart_action' ) ) {
|
|
woodmart_enqueue_js_library( 'magnific' );
|
|
woodmart_enqueue_js_script( 'action-after-add-to-cart' );
|
|
woodmart_enqueue_inline_style( 'add-to-cart-popup' );
|
|
woodmart_enqueue_inline_style( 'mfp-popup' );
|
|
}
|
|
}
|
|
|
|
add_action( 'woocommerce_before_add_to_cart_form', 'woodmart_single_product_add_to_cart_scripts' );
|
|
}
|
|
|
|
if ( ! function_exists( 'woodmart_product_loop_add_to_cart_scripts' ) ) {
|
|
/**
|
|
* Enqueue single product scripts.
|
|
*
|
|
* @since 1.0.0
|
|
*
|
|
* @param mixed $data Data.
|
|
*
|
|
* @return mixed
|
|
*/
|
|
function woodmart_product_loop_add_to_cart_scripts( $data ) {
|
|
if ( 'nothing' !== woodmart_get_opt( 'add_to_cart_action' ) ) {
|
|
woodmart_enqueue_js_library( 'magnific' );
|
|
woodmart_enqueue_js_script( 'action-after-add-to-cart' );
|
|
woodmart_enqueue_inline_style( 'add-to-cart-popup' );
|
|
woodmart_enqueue_inline_style( 'mfp-popup' );
|
|
}
|
|
|
|
return $data;
|
|
}
|
|
|
|
add_action( 'woocommerce_loop_add_to_cart_link', 'woodmart_product_loop_add_to_cart_scripts' );
|
|
}
|
|
|
|
if ( ! function_exists( 'woodmart_get_previous_product' ) ) {
|
|
/**
|
|
* Retrieves the previous product.
|
|
*
|
|
* @since 2.4.3
|
|
*
|
|
* @param bool $in_same_term Optional. Whether post should be in a same taxonomy term. Default false.
|
|
* @param array|string $excluded_terms Optional. Comma-separated list of excluded term IDs. Default empty.
|
|
* @param string $taxonomy Optional. Taxonomy, if $in_same_term is true. Default 'product_cat'.
|
|
*
|
|
* @return WC_Product|false Product object if successful. False if no valid product is found.
|
|
*/
|
|
function woodmart_get_previous_product( $in_same_term = false, $excluded_terms = '', $taxonomy = 'product_cat' ) {
|
|
$product = new XTS\Modules\WC_Adjacent_Products( $in_same_term, $excluded_terms, $taxonomy, true );
|
|
|
|
return $product->get_product();
|
|
}
|
|
}
|
|
|
|
if ( ! function_exists( 'woodmart_get_next_product' ) ) {
|
|
/**
|
|
* Retrieves the next product.
|
|
*
|
|
* @since 2.4.3
|
|
*
|
|
* @param bool $in_same_term Optional. Whether post should be in a same taxonomy term. Default false.
|
|
* @param array|string $excluded_terms Optional. Comma-separated list of excluded term IDs. Default empty.
|
|
* @param string $taxonomy Optional. Taxonomy, if $in_same_term is true. Default 'product_cat'.
|
|
*
|
|
* @return WC_Product|false Product object if successful. False if no valid product is found.
|
|
*/
|
|
function woodmart_get_next_product( $in_same_term = false, $excluded_terms = '', $taxonomy = 'product_cat' ) {
|
|
$product = new XTS\Modules\WC_Adjacent_Products( $in_same_term, $excluded_terms, $taxonomy );
|
|
|
|
return $product->get_product();
|
|
}
|
|
}
|
|
|
|
if ( ! function_exists( 'woodmart_get_products_tab_ajax' ) ) {
|
|
function woodmart_get_products_tab_ajax() {
|
|
if ( ! empty( $_POST['atts'] ) ) {
|
|
$atts = woodmart_clean( $_POST['atts'] );
|
|
if ( isset( $atts['elementor'] ) && $atts['elementor'] ) {
|
|
$data = woodmart_elementor_products_tab_template( $atts );
|
|
} else {
|
|
$data = woodmart_shortcode_products_tab( $atts );
|
|
}
|
|
echo json_encode( $data );
|
|
die();
|
|
}
|
|
}
|
|
|
|
add_action( 'wp_ajax_woodmart_get_products_tab_shortcode', 'woodmart_get_products_tab_ajax' );
|
|
add_action( 'wp_ajax_nopriv_woodmart_get_products_tab_shortcode', 'woodmart_get_products_tab_ajax' );
|
|
}
|
|
|
|
|
|
if ( ! function_exists( 'woodmart_get_shortcode_products_ajax' ) ) {
|
|
function woodmart_get_shortcode_products_ajax() {
|
|
if ( ! empty( $_POST['atts'] ) ) {
|
|
$atts = woodmart_clean( $_POST['atts'] );
|
|
$paged = ( empty( $_POST['paged'] ) ) ? 2 : sanitize_text_field( (int) $_POST['paged'] );
|
|
$atts['ajax_page'] = $paged;
|
|
|
|
if ( isset( $atts['elementor'] ) && $atts['elementor'] ) {
|
|
$data = woodmart_elementor_products_template( $atts );
|
|
} else {
|
|
$data = woodmart_shortcode_products( $atts );
|
|
}
|
|
|
|
echo json_encode( $data );
|
|
|
|
die();
|
|
}
|
|
}
|
|
|
|
add_action( 'wp_ajax_woodmart_get_products_shortcode', 'woodmart_get_shortcode_products_ajax' );
|
|
add_action( 'wp_ajax_nopriv_woodmart_get_products_shortcode', 'woodmart_get_shortcode_products_ajax' );
|
|
}
|
|
|
|
if ( ! empty( $_REQUEST['action'] ) && 'elementor' === $_REQUEST['action'] && is_admin() ) {
|
|
add_action(
|
|
'init',
|
|
function() {
|
|
if ( function_exists( 'wc' ) ) {
|
|
wc()->frontend_includes();
|
|
}
|
|
},
|
|
5
|
|
);
|
|
}
|
|
|
|
if ( ! function_exists( 'woodmart_widget_get_current_page_url' ) ) {
|
|
function woodmart_widget_get_current_page_url( $link ) {
|
|
if ( isset( $_GET['stock_status'] ) ) {
|
|
$link = add_query_arg( 'stock_status', wc_clean( $_GET['stock_status'] ), $link );
|
|
}
|
|
|
|
return $link;
|
|
}
|
|
|
|
add_filter( 'woocommerce_widget_get_current_page_url', 'woodmart_widget_get_current_page_url' );
|
|
}
|
|
|
|
if ( ! function_exists( 'woodmart_get_filtered_price_new' ) ) {
|
|
function woodmart_get_filtered_price_new() {
|
|
global $wpdb;
|
|
|
|
if ( ! is_shop() && ! is_product_taxonomy() ) {
|
|
$sql = "
|
|
SELECT min( FLOOR( min_price ) ) as min_price, MAX( CEILING( max_price ) ) as max_price
|
|
FROM {$wpdb->wc_product_meta_lookup}";
|
|
|
|
return $wpdb->get_row( $sql );
|
|
}
|
|
|
|
$args = WC()->query->get_main_query()->query_vars;
|
|
$tax_query = isset( $args['tax_query'] ) ? $args['tax_query'] : array();
|
|
$meta_query = isset( $args['meta_query'] ) ? $args['meta_query'] : array();
|
|
|
|
if ( ! is_post_type_archive( 'product' ) && ! empty( $args['taxonomy'] ) && ! empty( $args['term'] ) ) {
|
|
$tax_query[] = array(
|
|
'taxonomy' => $args['taxonomy'],
|
|
'terms' => array( $args['term'] ),
|
|
'field' => 'slug',
|
|
);
|
|
}
|
|
|
|
foreach ( $meta_query + $tax_query as $key => $query ) {
|
|
if ( ! empty( $query['price_filter'] ) || ! empty( $query['rating_filter'] ) ) {
|
|
unset( $meta_query[ $key ] );
|
|
}
|
|
}
|
|
|
|
$meta_query = new WP_Meta_Query( $meta_query );
|
|
$tax_query = new WP_Tax_Query( $tax_query );
|
|
$search = WC_Query::get_main_search_query_sql();
|
|
|
|
$meta_query_sql = $meta_query->get_sql( 'post', $wpdb->posts, 'ID' );
|
|
$tax_query_sql = $tax_query->get_sql( $wpdb->posts, 'ID' );
|
|
$search_query_sql = $search ? ' AND ' . $search : '';
|
|
|
|
$sql = "
|
|
SELECT min( min_price ) as min_price, MAX( max_price ) as max_price
|
|
FROM {$wpdb->wc_product_meta_lookup}
|
|
WHERE product_id IN (
|
|
SELECT ID FROM {$wpdb->posts}
|
|
" . $tax_query_sql['join'] . $meta_query_sql['join'] . "
|
|
WHERE {$wpdb->posts}.post_type IN ('" . implode( "','", array_map( 'esc_sql', apply_filters( 'woocommerce_price_filter_post_type', array( 'product' ) ) ) ) . "')
|
|
AND {$wpdb->posts}.post_status = 'publish'
|
|
" . $tax_query_sql['where'] . $meta_query_sql['where'] . $search_query_sql . '
|
|
)';
|
|
|
|
$sql = apply_filters( 'woocommerce_price_filter_sql', $sql, $meta_query_sql, $tax_query_sql );
|
|
|
|
return $wpdb->get_row( $sql ); // WPCS: unprepared SQL ok.
|
|
}
|
|
}
|
|
|
|
/**
|
|
* ------------------------------------------------------------------------------------------------
|
|
* Main loop
|
|
* ------------------------------------------------------------------------------------------------
|
|
*/
|
|
|
|
if ( ! function_exists( 'woodmart_woocommerce_main_loop' ) ) {
|
|
|
|
add_action( 'woodmart_woocommerce_main_loop', 'woodmart_woocommerce_main_loop' );
|
|
|
|
function woodmart_woocommerce_main_loop( $fragments = false ) {
|
|
global $paged, $wp_query;
|
|
|
|
$max_page = $wp_query->max_num_pages;
|
|
|
|
if ( $fragments ) {
|
|
ob_start();
|
|
}
|
|
|
|
if ( $fragments && isset( $_GET['loop'] ) ) {
|
|
woodmart_set_loop_prop( 'woocommerce_loop', (int) sanitize_text_field( $_GET['loop'] ) );
|
|
}
|
|
|
|
if ( woocommerce_product_loop() ) : ?>
|
|
|
|
<?php
|
|
if ( ! $fragments ) {
|
|
woocommerce_product_loop_start();}
|
|
?>
|
|
|
|
<?php if ( wc_get_loop_prop( 'total' ) || $fragments ) : ?>
|
|
<?php
|
|
while ( have_posts() ) :
|
|
the_post();
|
|
?>
|
|
|
|
<?php
|
|
/**
|
|
* Hook: woocommerce_shop_loop.
|
|
*
|
|
* @hooked WC_Structured_Data::generate_product_data() - 10
|
|
*/
|
|
do_action( 'woocommerce_shop_loop' );
|
|
?>
|
|
|
|
<?php wc_get_template_part( 'content', 'product' ); ?>
|
|
|
|
<?php endwhile; // end of the loop. ?>
|
|
<?php endif; ?>
|
|
|
|
|
|
<?php
|
|
if ( ! $fragments ) {
|
|
woocommerce_product_loop_end();}
|
|
?>
|
|
|
|
<?php
|
|
/**
|
|
* woocommerce_after_shop_loop hook
|
|
*
|
|
* @hooked woocommerce_pagination - 10
|
|
*/
|
|
if ( ! $fragments ) {
|
|
do_action( 'woocommerce_after_shop_loop' );
|
|
}
|
|
?>
|
|
|
|
<?php else : ?>
|
|
|
|
<?php
|
|
/**
|
|
* Hook: woocommerce_no_products_found.
|
|
*
|
|
* @hooked wc_no_products_found - 10
|
|
*/
|
|
do_action( 'woocommerce_no_products_found' );
|
|
?>
|
|
|
|
<?php
|
|
endif;
|
|
|
|
if ( $fragments ) {
|
|
$output = ob_get_clean();
|
|
}
|
|
|
|
if ( $fragments ) {
|
|
$output = array(
|
|
'items' => $output,
|
|
'status' => ( $max_page > $paged ) ? 'have-posts' : 'no-more-posts',
|
|
'nextPage' => str_replace( '&', '&', next_posts( $max_page, false ) ),
|
|
'currentPage' => strtok( woodmart_get_current_url(), '?' ),
|
|
);
|
|
|
|
echo json_encode( $output );
|
|
}
|
|
}
|
|
}
|
|
/**
|
|
* ------------------------------------------------------------------------------------------------
|
|
* Change number of products displayed per page
|
|
* ------------------------------------------------------------------------------------------------
|
|
*/
|
|
|
|
if ( ! function_exists( 'woodmart_shop_products_per_page' ) ) {
|
|
function woodmart_shop_products_per_page() {
|
|
$per_page = 12;
|
|
$number = apply_filters( 'woodmart_shop_per_page', woodmart_get_products_per_page() );
|
|
if ( is_numeric( $number ) ) {
|
|
$per_page = $number;
|
|
}
|
|
return $per_page;
|
|
}
|
|
|
|
add_filter( 'loop_shop_per_page', 'woodmart_shop_products_per_page', 20 );
|
|
}
|
|
|
|
/**
|
|
* ------------------------------------------------------------------------------------------------
|
|
* Set full width layouts for woocommerce pages on set up
|
|
* ------------------------------------------------------------------------------------------------
|
|
*/
|
|
|
|
/**
|
|
* ------------------------------------------------------------------------------------------------
|
|
* Get base shop page link
|
|
* ------------------------------------------------------------------------------------------------
|
|
*/
|
|
|
|
if ( ! function_exists( 'woodmart_shop_page_link' ) ) {
|
|
function woodmart_shop_page_link( $keep_query = false, $taxonomy = '' ) {
|
|
// Base Link decided by current page
|
|
$link = '';
|
|
|
|
if ( class_exists( 'Automattic\Jetpack\Constants' ) && Automattic\Jetpack\Constants::is_defined( 'SHOP_IS_ON_FRONT' ) ) {
|
|
$link = home_url();
|
|
} elseif ( is_post_type_archive( 'product' ) || is_page( wc_get_page_id( 'shop' ) ) || is_shop() ) {
|
|
$link = get_permalink( wc_get_page_id( 'shop' ) );
|
|
} elseif ( is_product_category() ) {
|
|
$link = get_term_link( get_query_var( 'product_cat' ), 'product_cat' );
|
|
} elseif ( is_product_tag() ) {
|
|
$link = get_term_link( get_query_var( 'product_tag' ), 'product_tag' );
|
|
} elseif ( get_queried_object() ) {
|
|
$queried_object = get_queried_object();
|
|
|
|
if ( property_exists( $queried_object, 'taxonomy' ) ) {
|
|
$link = get_term_link( $queried_object->slug, $queried_object->taxonomy );
|
|
}
|
|
}
|
|
|
|
if ( $keep_query ) {
|
|
|
|
// Min/Max
|
|
if ( isset( $_GET['min_price'] ) ) {
|
|
$link = add_query_arg( 'min_price', wc_clean( $_GET['min_price'] ), $link );
|
|
}
|
|
|
|
if ( isset( $_GET['max_price'] ) ) {
|
|
$link = add_query_arg( 'max_price', wc_clean( $_GET['max_price'] ), $link );
|
|
}
|
|
|
|
// Orderby
|
|
if ( isset( $_GET['orderby'] ) ) {
|
|
$link = add_query_arg( 'orderby', wc_clean( $_GET['orderby'] ), $link );
|
|
}
|
|
|
|
if ( isset( $_GET['stock_status'] ) ) {
|
|
$link = add_query_arg( 'stock_status', wc_clean( $_GET['stock_status'] ), $link );
|
|
}
|
|
|
|
if ( isset( $_GET['per_row'] ) ) {
|
|
$link = add_query_arg( 'per_row', wc_clean( $_GET['per_row'] ), $link );
|
|
}
|
|
|
|
if ( isset( $_GET['per_page'] ) ) {
|
|
$link = add_query_arg( 'per_page', wc_clean( $_GET['per_page'] ), $link );
|
|
}
|
|
|
|
if ( isset( $_GET['shop_view'] ) ) {
|
|
$link = add_query_arg( 'shop_view', wc_clean( $_GET['shop_view'] ), $link );
|
|
}
|
|
|
|
if ( isset( $_GET['shortcode'] ) ) {
|
|
$link = add_query_arg( 'shortcode', wc_clean( $_GET['shortcode'] ), $link );
|
|
}
|
|
|
|
/**
|
|
* Search Arg.
|
|
* To support quote characters, first they are decoded from " entities, then URL encoded.
|
|
*/
|
|
if ( get_search_query() ) {
|
|
$link = add_query_arg( 's', rawurlencode( wp_specialchars_decode( get_search_query() ) ), $link );
|
|
}
|
|
|
|
// Post Type Arg
|
|
if ( isset( $_GET['post_type'] ) ) {
|
|
$link = add_query_arg( 'post_type', wc_clean( wp_unslash( $_GET['post_type'] ) ), $link );
|
|
|
|
// Prevent post type and page id when pretty permalinks are disabled.
|
|
if ( is_shop() ) {
|
|
$link = remove_query_arg( 'page_id', $link );
|
|
}
|
|
}
|
|
|
|
// Min Rating Arg
|
|
if ( isset( $_GET['min_rating'] ) ) {
|
|
$link = add_query_arg( 'min_rating', wc_clean( $_GET['min_rating'] ), $link );
|
|
}
|
|
|
|
// All current filters
|
|
if ( $_chosen_attributes = WC_Query::get_layered_nav_chosen_attributes() ) {
|
|
foreach ( $_chosen_attributes as $name => $data ) {
|
|
if ( $name === $taxonomy ) {
|
|
continue;
|
|
}
|
|
$filter_name = sanitize_title( str_replace( 'pa_', '', $name ) );
|
|
if ( ! empty( $data['terms'] ) ) {
|
|
$link = add_query_arg( 'filter_' . $filter_name, implode( ',', $data['terms'] ), $link );
|
|
}
|
|
if ( 'or' == $data['query_type'] ) {
|
|
$link = add_query_arg( 'query_type_' . $filter_name, 'or', $link );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
$link = apply_filters( 'woodmart_shop_page_link', $link, $keep_query, $taxonomy );
|
|
|
|
if ( is_string( $link ) ) {
|
|
return $link;
|
|
} else {
|
|
return '';
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* ------------------------------------------------------------------------------------------------
|
|
* Get product design option
|
|
* ------------------------------------------------------------------------------------------------
|
|
*/
|
|
|
|
if ( ! function_exists( 'woodmart_product_design' ) ) {
|
|
function woodmart_product_design() {
|
|
$design = woodmart_get_opt( 'product_design' );
|
|
if ( is_singular( 'product' ) ) {
|
|
$custom = get_post_meta( get_the_ID(), '_woodmart_product_design', true );
|
|
if ( ! empty( $custom ) && $custom != 'inherit' ) {
|
|
$design = $custom;
|
|
}
|
|
}
|
|
|
|
return $design;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* ------------------------------------------------------------------------------------------------
|
|
* Is product sticky
|
|
* ------------------------------------------------------------------------------------------------
|
|
*/
|
|
|
|
if ( ! function_exists( 'woodmart_product_sticky' ) ) {
|
|
function woodmart_product_sticky() {
|
|
$sticky = woodmart_get_opt( 'product_sticky' ) && in_array( woodmart_get_opt( 'single_product_style' ), array( 1, 2, 3 ) ) ? true : false;
|
|
if ( is_singular( 'product' ) ) {
|
|
$custom = get_post_meta( get_the_ID(), '_woodmart_product_sticky', true );
|
|
if ( ! empty( $custom ) && $custom != 'inherit' ) {
|
|
$sticky = $custom;
|
|
}
|
|
}
|
|
|
|
return $sticky;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* ------------------------------------------------------------------------------------------------
|
|
* Register new image size two times larger than standard woocommerce one
|
|
* ------------------------------------------------------------------------------------------------
|
|
*/
|
|
|
|
if ( ! function_exists( 'woodmart_add_image_size' ) ) {
|
|
add_action( 'after_setup_theme', 'woodmart_add_image_size' );
|
|
|
|
function woodmart_add_image_size() {
|
|
|
|
if ( ! function_exists( 'wc_get_image_size' ) ) {
|
|
return;
|
|
}
|
|
|
|
$shop_catalog = wc_get_image_size( 'woocommerce_thumbnail' );
|
|
|
|
$width = (int) ( $shop_catalog['width'] * 2 );
|
|
$height = ( ! empty( $shop_catalog['height'] ) ) ? (int) ( $shop_catalog['height'] * 2 ) : '';
|
|
|
|
add_image_size( 'woodmart_shop_catalog_x2', $width, $height, $shop_catalog['crop'] );
|
|
}
|
|
}
|
|
|
|
/**
|
|
* ------------------------------------------------------------------------------------------------
|
|
* Custom thumbnail function for slider
|
|
* ------------------------------------------------------------------------------------------------
|
|
*/
|
|
|
|
if ( ! function_exists( 'woodmart_template_loop_product_thumbnail' ) ) {
|
|
function woodmart_template_loop_product_thumbnail() {
|
|
echo woodmart_get_product_thumbnail();
|
|
}
|
|
}
|
|
|
|
if ( ! function_exists( 'woodmart_get_product_thumbnail' ) ) {
|
|
function woodmart_get_product_thumbnail( $size = 'woocommerce_thumbnail', $attach_id = false ) {
|
|
global $post;
|
|
$custom_size = $size;
|
|
|
|
$defined_sizes = array( 'woocommerce_thumbnail', 'woodmart_shop_catalog_x2' );
|
|
|
|
if ( woodmart_loop_prop( 'double_size' ) ) {
|
|
$size = 'woodmart_shop_catalog_x2';
|
|
}
|
|
|
|
if ( has_post_thumbnail() ) {
|
|
|
|
if ( ! $attach_id ) {
|
|
$attach_id = get_post_thumbnail_id();
|
|
}
|
|
|
|
$props = wc_get_product_attachment_props( $attach_id, $post );
|
|
|
|
if ( woodmart_loop_prop( 'img_size' ) ) {
|
|
$custom_size = woodmart_loop_prop( 'img_size' );
|
|
}
|
|
|
|
$custom_size = apply_filters( 'woodmart_custom_img_size', $custom_size );
|
|
|
|
if ( woodmart_is_elementor_installed() ) {
|
|
$img = woodmart_get_image_html( // phpcs:ignore
|
|
array(
|
|
'image_size' => $custom_size,
|
|
'image_custom_dimension' => woodmart_loop_prop( 'img_size_custom' ),
|
|
'image' => array(
|
|
'id' => $attach_id,
|
|
),
|
|
),
|
|
'image'
|
|
);
|
|
} elseif ( ! in_array( $custom_size, $defined_sizes ) && function_exists( 'wpb_getImageBySize' ) ) {
|
|
$img = wpb_getImageBySize(
|
|
array(
|
|
'attach_id' => $attach_id,
|
|
'thumb_size' => $custom_size,
|
|
'class' => 'content-product-image',
|
|
)
|
|
);
|
|
$img = isset( $img['thumbnail'] ) ? $img['thumbnail'] : '';
|
|
|
|
} else {
|
|
$img = wp_get_attachment_image(
|
|
$attach_id,
|
|
$size,
|
|
array(
|
|
'title' => $props['title'],
|
|
'alt' => $props['alt'],
|
|
)
|
|
);
|
|
}
|
|
|
|
return $img;
|
|
|
|
} elseif ( wc_placeholder_img_src() ) {
|
|
return wc_placeholder_img( $size );
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( ! function_exists( 'woodmart_grid_swatches_attribute' ) ) {
|
|
function woodmart_grid_swatches_attribute() {
|
|
$custom = get_post_meta( get_the_ID(), '_woodmart_swatches_attribute', true );
|
|
return empty( $custom ) ? woodmart_get_opt( 'grid_swatches_attribute' ) : $custom;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* ------------------------------------------------------------------------------------------------
|
|
* Get product page classes (columns) for product images and product information blocks
|
|
* ------------------------------------------------------------------------------------------------
|
|
*/
|
|
|
|
if ( ! function_exists( 'woodmart_product_images_class' ) ) {
|
|
function woodmart_product_images_class() {
|
|
$size = woodmart_product_images_size();
|
|
$layout = woodmart_get_opt( 'single_product_style' );
|
|
|
|
$class = 'col-lg-' . $size . ' col-12';
|
|
|
|
$class .= ( $layout == 4 || $layout == 5 ) ? ' col-md-12' : ' col-md-6';
|
|
|
|
return $class;
|
|
}
|
|
|
|
function woodmart_product_images_size() {
|
|
$summary_size = ( woodmart_product_summary_size() == 12 ) ? 12 : 12 - woodmart_product_summary_size();
|
|
return apply_filters( 'woodmart_product_summary_size', $summary_size );
|
|
}
|
|
}
|
|
|
|
if ( ! function_exists( 'woodmart_product_summary_class' ) ) {
|
|
function woodmart_product_summary_class() {
|
|
$size = woodmart_product_summary_size();
|
|
$layout = woodmart_get_opt( 'single_product_style' );
|
|
|
|
$class = 'col-lg-' . $size . ' col-12';
|
|
|
|
$class .= ( $layout == 4 || $layout == 5 ) ? ' col-md-12' : ' col-md-6';
|
|
|
|
if ( woodmart_get_opt( 'single_product_variations_price' ) ) {
|
|
woodmart_enqueue_js_script( 'variations-price' );
|
|
$class .= ' wd-price-outside';
|
|
}
|
|
|
|
return $class;
|
|
}
|
|
|
|
function woodmart_product_summary_size() {
|
|
$page_layout = woodmart_get_opt( 'single_product_style' );
|
|
|
|
$size = 6;
|
|
switch ( $page_layout ) {
|
|
case 1:
|
|
$size = 8;
|
|
break;
|
|
case 2:
|
|
$size = 6;
|
|
break;
|
|
case 3:
|
|
$size = 4;
|
|
break;
|
|
case 4:
|
|
$size = 12;
|
|
break;
|
|
case 5:
|
|
$size = 12;
|
|
break;
|
|
}
|
|
return apply_filters( 'woodmart_product_summary_size', $size );
|
|
}
|
|
}
|
|
|
|
if ( ! function_exists( 'woodmart_single_product_class' ) ) {
|
|
function woodmart_single_product_class() {
|
|
$classes = array();
|
|
$classes[] = 'single-product-page';
|
|
$classes[] = 'single-product-content';
|
|
|
|
$design = woodmart_product_design();
|
|
$product_bg = woodmart_get_opt( 'product-background' );
|
|
$page_layout = woodmart_get_opt( 'single_product_style' );
|
|
|
|
$classes[] = 'product-design-' . $design;
|
|
$classes[] = 'tabs-location-' . woodmart_get_opt( 'product_tabs_location' );
|
|
$classes[] = 'tabs-type-' . woodmart_get_opt( 'product_tabs_layout' );
|
|
$classes[] = 'meta-location-' . woodmart_get_opt( 'product_show_meta' );
|
|
$classes[] = 'reviews-location-' . woodmart_get_opt( 'reviews_location' );
|
|
|
|
if ( $design == 'alt' ) {
|
|
$classes[] = 'product-align-center';
|
|
}
|
|
|
|
if ( $page_layout == 4 || $page_layout == 5 ) {
|
|
$classes[] = 'image-full-width';
|
|
}
|
|
|
|
if ( woodmart_get_opt( 'single_full_width' ) ) {
|
|
$classes[] = 'product-full-width';
|
|
}
|
|
|
|
if ( woodmart_get_opt( 'product_summary_shadow' ) ) {
|
|
$classes[] = 'product-summary-shadow';
|
|
}
|
|
|
|
if ( woodmart_product_sticky() ) {
|
|
$classes[] = 'product-sticky-on';
|
|
}
|
|
|
|
if ( ! empty( $product_bg ) && ! empty( $product_bg['background-color'] ) ) {
|
|
$classes[] = 'product-has-bg';
|
|
} else {
|
|
$classes[] = 'product-no-bg';
|
|
}
|
|
|
|
return $classes;
|
|
|
|
}
|
|
}
|
|
|
|
/**
|
|
* ------------------------------------------------------------------------------------------------
|
|
* Configure product image gallery JS
|
|
* ------------------------------------------------------------------------------------------------
|
|
*/
|
|
|
|
if ( ! function_exists( 'woodmart_get_product_gallery_settings' ) ) {
|
|
function woodmart_get_product_gallery_settings() {
|
|
return apply_filters(
|
|
'woodmart_product_gallery_settings',
|
|
array(
|
|
'images_slider' => woodmart_is_main_product_images_carousel(),
|
|
'thumbs_slider' => array(
|
|
'enabled' => woodmart_is_product_thumb_enabled(),
|
|
'position' => woodmart_get_opt( 'thums_position' ),
|
|
'items' => array(
|
|
'desktop' => 4,
|
|
'tablet_landscape' => 3,
|
|
'tablet' => 4,
|
|
'mobile' => 3,
|
|
'vertical_items' => 3,
|
|
),
|
|
),
|
|
)
|
|
);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* ------------------------------------------------------------------------------------------------
|
|
* WooCommerce enqueues 3 stylesheets by default. You can disable them all with the following snippet
|
|
* ------------------------------------------------------------------------------------------------
|
|
*/
|
|
|
|
add_filter( 'woocommerce_enqueue_styles', '__return_empty_array' );
|
|
|
|
/**
|
|
* ------------------------------------------------------------------------------------------------
|
|
* Disable photoswipe
|
|
* ------------------------------------------------------------------------------------------------
|
|
*/
|
|
|
|
remove_action( 'wp_footer', 'woocommerce_photoswipe' );
|
|
|
|
/**
|
|
* ------------------------------------------------------------------------------------------------
|
|
* Remove ordering from toolbar
|
|
* ------------------------------------------------------------------------------------------------
|
|
*/
|
|
|
|
remove_action( 'woocommerce_before_shop_loop', 'woocommerce_result_count', 20 );
|
|
|
|
/**
|
|
* ------------------------------------------------------------------------------------------------
|
|
* Unhook the WooCommerce wrappers
|
|
* ------------------------------------------------------------------------------------------------
|
|
*/
|
|
|
|
remove_action( 'woocommerce_before_main_content', 'woocommerce_output_content_wrapper', 10 );
|
|
remove_action( 'woocommerce_after_main_content', 'woocommerce_output_content_wrapper_end', 10 );
|
|
|
|
/**
|
|
* ------------------------------------------------------------------------------------------------
|
|
* Disable default product zoom init
|
|
* ------------------------------------------------------------------------------------------------
|
|
*/
|
|
add_filter( 'woocommerce_single_product_zoom_enabled', '__return_false' );
|
|
|
|
/**
|
|
* ------------------------------------------------------------------------------------------------
|
|
* Get CSS class for widget in shop area. Based on the number of widgets
|
|
* ------------------------------------------------------------------------------------------------
|
|
*/
|
|
|
|
if ( ! function_exists( 'woodmart_get_widget_column_class' ) ) {
|
|
function woodmart_get_widget_column_class( $sidebar_id = 'filters-area' ) {
|
|
global $_wp_sidebars_widgets;
|
|
if ( empty( $_wp_sidebars_widgets ) ) :
|
|
$_wp_sidebars_widgets = get_option( 'sidebars_widgets', array() );
|
|
endif;
|
|
|
|
$sidebars_widgets_count = $_wp_sidebars_widgets;
|
|
|
|
if ( isset( $sidebars_widgets_count[ $sidebar_id ] ) || $sidebar_id == 'filters-area' ) {
|
|
$count = ( isset( $sidebars_widgets_count[ $sidebar_id ] ) ) ? count( $sidebars_widgets_count[ $sidebar_id ] ) : 0;
|
|
$widget_count = apply_filters( 'widgets_count_' . $sidebar_id, $count );
|
|
$widget_classes = 'widget-count-' . $widget_count;
|
|
$column = 4;
|
|
if ( $widget_count < 4 && $widget_count != 0 ) {
|
|
$column = $widget_count;
|
|
}
|
|
$widget_classes .= woodmart_get_grid_el_class( 0, $column, false, 12, 6, 6 );
|
|
return apply_filters( 'widget_class_' . $sidebar_id, $widget_classes );
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* ------------------------------------------------------------------------------------------------
|
|
* Play with woocommerce hooks
|
|
* ------------------------------------------------------------------------------------------------
|
|
*/
|
|
|
|
if ( ! function_exists( 'woodmart_woocommerce_hooks' ) ) {
|
|
function woodmart_woocommerce_hooks() {
|
|
global $woodmart_prefix;
|
|
|
|
$product_meta_position = woodmart_get_opt( 'product_show_meta' );
|
|
$product_show_meta = ( $product_meta_position != 'hide' );
|
|
$product_show_share = woodmart_get_opt( 'product_share' );
|
|
$product_show_desc = woodmart_get_opt( 'product_short_description' );
|
|
$tabs_location = woodmart_get_opt( 'product_tabs_location' );
|
|
$reviews_location = woodmart_get_opt( 'reviews_location' );
|
|
|
|
remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_upsell_display', 15 );
|
|
remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_related_products', 20 );
|
|
|
|
// Reviews location
|
|
if ( $reviews_location == 'separate' ) {
|
|
add_filter( 'woocommerce_product_tabs', 'woodmart_disable_reviews_tab', 98 );
|
|
add_action( 'woocommerce_after_single_product_summary', 'comments_template', 50 );
|
|
}
|
|
|
|
// Upsells position
|
|
if ( is_singular( 'product' ) ) {
|
|
if ( woodmart_get_opt( 'upsells_position' ) == 'sidebar' ) {
|
|
add_action( 'woodmart_before_sidebar_area', 'woocommerce_upsell_display', 20 );
|
|
} else {
|
|
add_action( 'woodmart_woocommerce_after_sidebar', 'woocommerce_upsell_display', 10 );
|
|
}
|
|
}
|
|
|
|
// Disable related products option
|
|
if ( woodmart_get_opt( 'related_products' ) && ! get_post_meta( get_the_ID(), '_woodmart_related_off', true ) ) {
|
|
add_action( 'woodmart_woocommerce_after_sidebar', 'woocommerce_output_related_products', 20 );
|
|
}
|
|
|
|
// Disable product tabs title option
|
|
if ( woodmart_get_opt( 'hide_tabs_titles' ) || get_post_meta( get_the_ID(), '_woodmart_hide_tabs_titles', true ) ) {
|
|
add_filter( 'woocommerce_product_description_heading', '__return_false', 20 );
|
|
add_filter( 'woocommerce_product_additional_information_heading', '__return_false', 20 );
|
|
}
|
|
|
|
if ( woodmart_get_opt( 'shop_filters' ) ) {
|
|
|
|
// Use our own order widget list?
|
|
if ( apply_filters( 'woodmart_use_custom_order_widget', true ) ) {
|
|
if ( ! is_active_widget( false, false, 'woodmart-woocommerce-sort-by', true ) ) {
|
|
add_action( 'woodmart_before_filters_widgets', 'woodmart_sorting_widget', 10 );
|
|
}
|
|
if ( woodmart_get_opt( 'shop_filters_type' ) == 'widgets' ) {
|
|
remove_action( 'woocommerce_before_shop_loop', 'woocommerce_catalog_ordering', 30 );
|
|
}
|
|
}
|
|
|
|
// Use our custom price filter widget list?
|
|
if ( apply_filters( 'woodmart_use_custom_price_widget', true ) && ! is_active_widget( false, false, 'woodmart-price-filter', true ) ) {
|
|
add_action( 'woodmart_before_filters_widgets', 'woodmart_price_widget', 20 );
|
|
}
|
|
|
|
// Add 'filters button'
|
|
add_action( 'woocommerce_before_shop_loop', 'woodmart_filter_buttons', 40 );
|
|
}
|
|
|
|
add_action( 'woocommerce_cart_is_empty', 'woodmart_empty_cart_text', 20 );
|
|
|
|
/**
|
|
* Remove default empty cart text
|
|
*/
|
|
remove_action( 'woocommerce_cart_is_empty', 'wc_empty_cart_message', 10 );
|
|
|
|
// Wrapp cart totals
|
|
|
|
add_action(
|
|
'woocommerce_before_cart_totals',
|
|
function() {
|
|
echo '<div class="cart-totals-inner">';
|
|
},
|
|
1
|
|
);
|
|
add_action(
|
|
'woocommerce_after_cart_totals',
|
|
function() {
|
|
echo '</div><!--.cart-totals-inner-->';
|
|
},
|
|
200
|
|
);
|
|
|
|
// Brand tab for single product
|
|
if ( woodmart_get_opt( 'brand_tab' ) ) {
|
|
add_filter( 'woocommerce_product_tabs', 'woodmart_product_brand_tab' );
|
|
}
|
|
|
|
// Poduct brand
|
|
if ( woodmart_get_opt( 'product_brand_location' ) == 'about_title' && is_singular( 'product' ) ) {
|
|
add_action( 'woocommerce_single_product_summary', 'woodmart_product_brand', 3 );
|
|
} elseif ( is_singular( 'product' ) ) {
|
|
add_action( 'woodmart_before_sidebar_area', 'woodmart_product_brand', 10 );
|
|
}
|
|
|
|
// Product share
|
|
|
|
if ( $product_meta_position != 'after_tabs' && $product_show_share ) {
|
|
add_action( 'woocommerce_single_product_summary', 'woodmart_product_share_buttons', 60 );
|
|
}
|
|
|
|
// Disable meta and description if turned off
|
|
if ( $product_meta_position != 'add_to_cart' ) {
|
|
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_meta', 40 );
|
|
}
|
|
|
|
if ( ! $product_show_desc ) {
|
|
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_excerpt', 20 );
|
|
}
|
|
|
|
// Product tabs location
|
|
|
|
if ( $tabs_location == 'summary' ) {
|
|
remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_product_data_tabs', 10 );
|
|
add_action( 'woocommerce_single_product_summary', 'woocommerce_output_product_data_tabs', 39 );
|
|
}
|
|
|
|
if ( $product_meta_position == 'after_tabs' ) {
|
|
add_action(
|
|
'woodmart_after_product_tabs',
|
|
function() {
|
|
echo '<div class="wd-before-product-tabs"><div class="container">';
|
|
},
|
|
10
|
|
);
|
|
|
|
remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_meta', 40 );
|
|
if ( $product_show_meta ) {
|
|
add_action( 'woodmart_after_product_tabs', 'woocommerce_template_single_meta', 20 );
|
|
}
|
|
if ( $product_show_share ) {
|
|
add_action( 'woodmart_after_product_tabs', 'woodmart_product_share_buttons', 30 );
|
|
}
|
|
|
|
add_action(
|
|
'woodmart_after_product_tabs',
|
|
function() {
|
|
echo '</div></div>';
|
|
},
|
|
200
|
|
);
|
|
}
|
|
|
|
// Product video, 360 view, zoom
|
|
$video_url = get_post_meta( get_the_ID(), '_woodmart_product_video', true );
|
|
$images_360_gallery = woodmart_get_360_gallery_attachment_ids();
|
|
$image_action = woodmart_get_opt( 'image_action' );
|
|
|
|
if ( ! empty( $video_url ) || ! empty( $images_360_gallery ) || ! empty( $image_action ) ) {
|
|
add_action( 'woodmart_on_product_image', 'woodmart_additional_galleries_open', 25 );
|
|
add_action( 'woodmart_on_product_image', 'woodmart_additional_galleries_close', 100 );
|
|
}
|
|
|
|
if ( ! empty( $video_url ) ) {
|
|
add_action( 'woodmart_on_product_image', 'woodmart_product_video_button', 30 );
|
|
}
|
|
|
|
if ( ! empty( $images_360_gallery ) ) {
|
|
add_action( 'woodmart_on_product_image', 'woodmart_product_360_view', 40 );
|
|
}
|
|
|
|
if ( $image_action != 'popup' && woodmart_get_opt( 'photoswipe_icon' ) ) {
|
|
add_action( 'woodmart_on_product_image', 'woodmart_product_zoom_button', 50 );
|
|
}
|
|
|
|
// Custom extra content
|
|
$extra_block = get_post_meta( get_the_ID(), '_woodmart_extra_content', true );
|
|
|
|
if ( ! empty( $extra_block ) && $extra_block != 0 ) {
|
|
$extra_position = get_post_meta( get_the_ID(), '_woodmart_extra_position', true );
|
|
if ( $extra_position == 'before' ) {
|
|
add_action( 'woocommerce_before_single_product', 'woodmart_product_extra_content', 20 );
|
|
} elseif ( $extra_position == 'prefooter' ) {
|
|
add_action( 'woodmart_woocommerce_after_sidebar', 'woodmart_product_extra_content', 30 );
|
|
} else {
|
|
add_action( 'woodmart_after_product_content', 'woodmart_product_extra_content', 20 );
|
|
|
|
}
|
|
}
|
|
|
|
// Custom tabs
|
|
add_filter( 'woocommerce_product_tabs', 'woodmart_custom_product_tabs' );
|
|
|
|
// Timer on the single product page
|
|
add_action( 'woocommerce_single_product_summary', 'woodmart_single_product_countdown', 15 );
|
|
|
|
// Instagram by hashbat for product
|
|
add_action( 'woodmart_woocommerce_after_sidebar', 'woodmart_product_instagram', 80 );
|
|
|
|
// Cart page move totals
|
|
remove_action( 'woocommerce_cart_collaterals', 'woocommerce_cart_totals', 10 );
|
|
|
|
// Product attibutes after of short description
|
|
if ( woodmart_get_opt( 'attr_after_short_desc' ) ) {
|
|
add_action( 'woocommerce_single_product_summary', 'woodmart_display_product_attributes', 21 );
|
|
add_filter( 'woocommerce_product_tabs', 'woodmart_remove_additional_information_tab', 98 );
|
|
}
|
|
|
|
// Single product stock progress bar
|
|
if ( woodmart_get_opt( 'single_stock_progress_bar' ) ) {
|
|
add_action( 'woocommerce_single_product_summary', 'woodmart_stock_progress_bar', 16 );
|
|
}
|
|
}
|
|
|
|
add_action( 'wp', 'woodmart_woocommerce_hooks', 1000 );
|
|
}
|
|
|
|
if ( ! function_exists( 'woodmart_woocommerce_init_hooks' ) ) {
|
|
function woodmart_woocommerce_init_hooks() {
|
|
remove_action( 'woocommerce_before_shop_loop_item_title', 'woocommerce_template_loop_product_thumbnail', 10 );
|
|
add_action( 'woocommerce_before_shop_loop_item_title', 'woodmart_template_loop_product_thumbnail', 10 );
|
|
|
|
// Remove product content link
|
|
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_before_subcategory', 'woocommerce_template_loop_category_link_open', 10 );
|
|
remove_action( 'woocommerce_after_subcategory', 'woocommerce_template_loop_category_link_close', 10 );
|
|
|
|
remove_action( 'woocommerce_before_subcategory_title', 'woocommerce_subcategory_thumbnail', 10 );
|
|
add_action( 'woocommerce_before_subcategory_title', 'woodmart_category_thumb_double_size', 10 );
|
|
}
|
|
|
|
add_action( 'init', 'woodmart_woocommerce_init_hooks', 1000 );
|
|
}
|
|
|
|
if ( ! function_exists( 'woodmart_single_product_countdown' ) ) {
|
|
function woodmart_single_product_countdown( $tabs ) {
|
|
$timer = woodmart_get_opt( 'product_countdown' );
|
|
if ( $timer ) {
|
|
woodmart_product_sale_countdown();
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( ! function_exists( 'woodmart_display_product_attributes' ) ) {
|
|
function woodmart_display_product_attributes() {
|
|
global $product;
|
|
if ( $product && ( $product->has_attributes() || apply_filters( 'wc_product_enable_dimensions_display', $product->has_weight() || $product->has_dimensions() ) ) ) {
|
|
wc_display_product_attributes( $product );
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( ! function_exists( 'woodmart_remove_additional_information_tab' ) ) {
|
|
function woodmart_remove_additional_information_tab( $tabs ) {
|
|
unset( $tabs['additional_information'] );
|
|
return $tabs;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* ------------------------------------------------------------------------------------------------
|
|
* Additional tab
|
|
* ------------------------------------------------------------------------------------------------
|
|
*/
|
|
|
|
if ( ! function_exists( 'woodmart_custom_product_tabs' ) ) {
|
|
function woodmart_custom_product_tabs( $tabs ) {
|
|
$additional_tab_title = woodmart_get_opt( 'additional_tab_title' );
|
|
$custom_tab_title = get_post_meta( get_the_ID(), '_woodmart_product_custom_tab_title', true );
|
|
|
|
if ( $additional_tab_title ) {
|
|
$tabs['wd_additional_tab'] = array(
|
|
'title' => $additional_tab_title,
|
|
'priority' => 50,
|
|
'callback' => 'woodmart_additional_product_tab_content',
|
|
);
|
|
}
|
|
|
|
if ( $custom_tab_title ) {
|
|
$tabs['wd_custom_tab'] = array(
|
|
'title' => $custom_tab_title,
|
|
'priority' => 60,
|
|
'callback' => 'woodmart_custom_product_tab_content',
|
|
);
|
|
}
|
|
|
|
return $tabs;
|
|
}
|
|
}
|
|
|
|
if ( ! function_exists( 'woodmart_additional_product_tab_content' ) ) {
|
|
function woodmart_additional_product_tab_content() {
|
|
// The new tab content
|
|
$tab_content = woodmart_get_opt( 'additional_tab_text' );
|
|
echo do_shortcode( $tab_content );
|
|
|
|
}
|
|
}
|
|
|
|
if ( ! function_exists( 'woodmart_custom_product_tab_content' ) ) {
|
|
function woodmart_custom_product_tab_content() {
|
|
// The new tab content
|
|
$tab_content = get_post_meta( get_the_ID(), '_woodmart_product_custom_tab_content', true );
|
|
echo do_shortcode( $tab_content );
|
|
}
|
|
}
|
|
|
|
|
|
if ( ! function_exists( 'woodmart_disable_reviews_tab' ) ) {
|
|
function woodmart_disable_reviews_tab( $tabs ) {
|
|
unset( $tabs['reviews'] ); // Removes the reviews tab
|
|
return $tabs;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* ------------------------------------------------------------------------------------------------
|
|
* Filters buttons
|
|
* ------------------------------------------------------------------------------------------------
|
|
*/
|
|
|
|
if ( ! function_exists( 'woodmart_filter_widgts_classes' ) ) {
|
|
function woodmart_filter_widgts_classes( $count ) {
|
|
|
|
if ( apply_filters( 'woodmart_use_custom_order_widget', true ) && ! is_active_widget( false, false, 'woodmart-woocommerce-sort-by', true ) ) {
|
|
$count++;
|
|
}
|
|
|
|
if ( apply_filters( 'woodmart_use_custom_price_widget', true ) && ! is_active_widget( false, false, 'woodmart-price-filter', true ) ) {
|
|
$count++;
|
|
}
|
|
|
|
return $count;
|
|
}
|
|
|
|
add_filter( 'widgets_count_filters-area', 'woodmart_filter_widgts_classes' );
|
|
}
|
|
|
|
/**
|
|
* ------------------------------------------------------------------------------------------------
|
|
* Force WOODMART Swatche layered nav and price widget to work
|
|
* ------------------------------------------------------------------------------------------------
|
|
*/
|
|
|
|
|
|
add_filter( 'woocommerce_is_layered_nav_active', 'woodmart_is_layered_nav_active' );
|
|
if ( ! function_exists( 'woodmart_is_layered_nav_active' ) ) {
|
|
function woodmart_is_layered_nav_active() {
|
|
return is_active_widget( false, false, 'woodmart-woocommerce-layered-nav', true );
|
|
}
|
|
}
|
|
|
|
add_filter( 'woocommerce_is_price_filter_active', 'woodmart_is_layered_price_active' );
|
|
|
|
if ( ! function_exists( 'woodmart_is_layered_price_active' ) ) {
|
|
function woodmart_is_layered_price_active() {
|
|
$result = is_active_widget( false, false, 'woodmart-price-filter', true );
|
|
if ( ! $result ) {
|
|
$result = apply_filters( 'woodmart_use_custom_price_widget', true );
|
|
}
|
|
return $result;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
* ------------------------------------------------------------------------------------------------
|
|
* Change the position of woocommerce breadcrumbs
|
|
* ------------------------------------------------------------------------------------------------
|
|
*/
|
|
remove_action( 'woocommerce_before_main_content', 'woocommerce_breadcrumb', 20 );
|
|
|
|
// **********************************************************************//
|
|
// ! Items per page select on the shop page
|
|
// **********************************************************************//
|
|
|
|
if ( ! function_exists( 'woodmart_set_customer_session' ) ) {
|
|
function woodmart_set_customer_session() {
|
|
if ( ! function_exists( 'WC' ) || ! apply_filters( 'woodmart_woo_session', false ) ) {
|
|
return;
|
|
}
|
|
|
|
if ( WC()->version > '2.1' && ( ! is_admin() || defined( 'DOING_AJAX' ) ) && ! defined( 'DOING_CRON' ) ) :
|
|
WC()->session->set_customer_session_cookie( true );
|
|
endif;
|
|
}
|
|
add_action( 'woodmart_before_shop_page', 'woodmart_set_customer_session', 10 );
|
|
}
|
|
|
|
if ( apply_filters( 'woodmart_woo_session', false ) ) {
|
|
add_action( 'woodmart_before_shop_page', 'woodmart_woo_products_per_page_action', 100 );
|
|
} else {
|
|
add_action( 'init', 'woodmart_products_per_page_action', 100 );
|
|
}
|
|
|
|
if ( ! function_exists( 'woodmart_products_per_page_action' ) ) {
|
|
function woodmart_products_per_page_action() {
|
|
if ( isset( $_REQUEST['per_page'] ) && 1 != $_REQUEST['per_page'] && ! isset( $_REQUEST['_locale'] ) && ! isset( $_REQUEST['shortcode'] ) && apply_filters( 'woodmart_per_page_custom_expression', true ) ) {
|
|
setcookie( 'shop_per_page', intval( $_REQUEST['per_page'] ), 0, COOKIEPATH, COOKIE_DOMAIN, false, false );
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( ! function_exists( 'woodmart_woo_products_per_page_action' ) ) {
|
|
function woodmart_woo_products_per_page_action() {
|
|
if ( isset( $_REQUEST['per_page'] ) ) :
|
|
if ( ! class_exists( 'WC_Session_Handler' ) ) {
|
|
return;
|
|
}
|
|
$s = WC()->session; // WC()->session
|
|
if ( is_null( $s ) ) {
|
|
return;
|
|
}
|
|
|
|
$s->set( 'shop_per_page', intval( $_REQUEST['per_page'] ) );
|
|
endif;
|
|
}
|
|
}
|
|
|
|
// **********************************************************************//
|
|
// ! Get Items per page number on the shop page
|
|
// **********************************************************************//
|
|
|
|
if ( ! function_exists( 'woodmart_get_products_per_page' ) ) {
|
|
function woodmart_get_products_per_page() {
|
|
if ( apply_filters( 'woodmart_woo_session', false ) ) {
|
|
return woodmart_woo_get_products_per_page();
|
|
} else {
|
|
return woodmart_new_get_products_per_page();
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( ! function_exists( 'woodmart_new_get_products_per_page' ) ) {
|
|
function woodmart_new_get_products_per_page() {
|
|
if ( isset( $_REQUEST['per_page'] ) && ! empty( $_REQUEST['per_page'] ) ) {
|
|
return intval( $_REQUEST['per_page'] );
|
|
} elseif ( isset( $_COOKIE['shop_per_page'] ) ) {
|
|
$val = $_COOKIE['shop_per_page'];
|
|
|
|
if ( ! empty( $val ) ) {
|
|
return intval( $val );
|
|
}
|
|
}
|
|
|
|
return intval( woodmart_get_opt( 'shop_per_page' ) );
|
|
}
|
|
}
|
|
|
|
if ( ! function_exists( 'woodmart_woo_get_products_per_page' ) ) {
|
|
function woodmart_woo_get_products_per_page() {
|
|
if ( ! class_exists( 'WC_Session_Handler' ) ) {
|
|
return;
|
|
}
|
|
$s = WC()->session; // WC()->session
|
|
if ( is_null( $s ) ) {
|
|
return intval( woodmart_get_opt( 'shop_per_page' ) );
|
|
}
|
|
|
|
if ( isset( $_REQUEST['per_page'] ) && ! empty( $_REQUEST['per_page'] ) ) :
|
|
return intval( $_REQUEST['per_page'] );
|
|
elseif ( $s->__isset( 'shop_per_page' ) ) :
|
|
$val = $s->__get( 'shop_per_page' );
|
|
if ( ! empty( $val ) ) {
|
|
return intval( $s->__get( 'shop_per_page' ) );
|
|
}
|
|
endif;
|
|
return intval( woodmart_get_opt( 'shop_per_page' ) );
|
|
}
|
|
}
|
|
|
|
|
|
// **********************************************************************//
|
|
// ! Items view select on the shop page
|
|
// **********************************************************************//
|
|
if ( apply_filters( 'woodmart_woo_session', false ) ) {
|
|
add_action( 'woodmart_before_shop_page', 'woodmart_woo_shop_view_action', 100 );
|
|
} else {
|
|
add_action( 'init', 'woodmart_shop_view_action', 100 );
|
|
}
|
|
|
|
if ( ! function_exists( 'woodmart_shop_view_action' ) ) {
|
|
function woodmart_shop_view_action() {
|
|
if ( isset( $_REQUEST['shop_view'] ) && ! isset( $_REQUEST['shortcode'] ) ) {
|
|
setcookie( 'shop_view', $_REQUEST['shop_view'], 0, COOKIEPATH, COOKIE_DOMAIN, false, false );
|
|
}
|
|
if ( isset( $_REQUEST['per_row'] ) && ! isset( $_REQUEST['shortcode'] ) ) {
|
|
setcookie( 'shop_per_row', $_REQUEST['per_row'], 0, COOKIEPATH, COOKIE_DOMAIN, false, false );
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( ! function_exists( 'woodmart_woo_shop_view_action' ) ) {
|
|
function woodmart_woo_shop_view_action() {
|
|
if ( ! class_exists( 'WC_Session_Handler' ) ) {
|
|
return;
|
|
}
|
|
$s = WC()->session; // WC()->session
|
|
if ( is_null( $s ) ) {
|
|
return;
|
|
}
|
|
|
|
if ( isset( $_REQUEST['shop_view'] ) ) {
|
|
$s->set( 'shop_view', $_REQUEST['shop_view'] );
|
|
}
|
|
if ( isset( $_REQUEST['per_row'] ) ) {
|
|
$s->set( 'shop_per_row', $_REQUEST['per_row'] );
|
|
}
|
|
}
|
|
}
|
|
// **********************************************************************//
|
|
// ! Get Items per ROW number on the shop page
|
|
// **********************************************************************//
|
|
|
|
if ( ! function_exists( 'woodmart_get_products_columns_per_row' ) ) {
|
|
function woodmart_get_products_columns_per_row() {
|
|
if ( apply_filters( 'woodmart_woo_session', false ) ) {
|
|
return woodmart_woo_get_products_columns_per_row();
|
|
} else {
|
|
return woodmart_new_get_products_columns_per_row();
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( ! function_exists( 'woodmart_get_shop_view' ) ) {
|
|
function woodmart_get_shop_view() {
|
|
if ( apply_filters( 'woodmart_woo_session', false ) ) {
|
|
return woodmart_woo_get_shop_view();
|
|
} else {
|
|
return woodmart_new_get_shop_view();
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( ! function_exists( 'woodmart_new_get_products_columns_per_row' ) ) {
|
|
function woodmart_new_get_products_columns_per_row() {
|
|
if ( isset( $_REQUEST['per_row'] ) ) {
|
|
return intval( $_REQUEST['per_row'] );
|
|
} elseif ( isset( $_COOKIE['shop_per_row'] ) ) {
|
|
return intval( $_COOKIE['shop_per_row'] );
|
|
} else {
|
|
return intval( woodmart_get_opt( 'products_columns' ) );
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( ! function_exists( 'woodmart_new_get_shop_view' ) ) {
|
|
function woodmart_new_get_shop_view() {
|
|
if ( isset( $_REQUEST['shop_view'] ) ) {
|
|
return $_REQUEST['shop_view'];
|
|
} elseif ( isset( $_COOKIE['shop_view'] ) ) {
|
|
return $_COOKIE['shop_view'];
|
|
} else {
|
|
$shop_view = woodmart_get_opt( 'shop_view' );
|
|
if ( $shop_view == 'grid_list' ) {
|
|
return 'grid';
|
|
} elseif ( $shop_view == 'list_grid' ) {
|
|
return 'list';
|
|
} else {
|
|
return $shop_view;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( ! function_exists( 'woodmart_woo_get_products_columns_per_row' ) ) {
|
|
function woodmart_woo_get_products_columns_per_row() {
|
|
if ( ! class_exists( 'WC_Session_Handler' ) ) {
|
|
return;
|
|
}
|
|
$s = WC()->session; // WC()->session
|
|
if ( is_null( $s ) ) {
|
|
return intval( woodmart_get_opt( 'products_columns' ) );
|
|
}
|
|
|
|
if ( isset( $_REQUEST['per_row'] ) ) {
|
|
return intval( $_REQUEST['per_row'] );
|
|
} elseif ( $s->__isset( 'shop_per_row' ) ) {
|
|
return intval( $s->__get( 'shop_per_row' ) );
|
|
} else {
|
|
return intval( woodmart_get_opt( 'products_columns' ) );
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( ! function_exists( 'woodmart_woo_get_shop_view' ) ) {
|
|
function woodmart_woo_get_shop_view() {
|
|
if ( ! class_exists( 'WC_Session_Handler' ) ) {
|
|
return;
|
|
}
|
|
$s = WC()->session; // WC()->session
|
|
if ( is_null( $s ) ) {
|
|
return woodmart_get_opt( 'shop_view' );
|
|
}
|
|
|
|
if ( isset( $_REQUEST['shop_view'] ) ) {
|
|
return $_REQUEST['shop_view'];
|
|
} elseif ( $s->__isset( 'shop_view' ) ) {
|
|
return $s->__get( 'shop_view' );
|
|
} else {
|
|
$shop_view = woodmart_get_opt( 'shop_view' );
|
|
if ( $shop_view == 'grid_list' ) {
|
|
return 'grid';
|
|
} elseif ( $shop_view == 'list_grid' ) {
|
|
return 'list';
|
|
} else {
|
|
return $shop_view;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* ------------------------------------------------------------------------------------------------
|
|
* Remove () from numbers in categories widget
|
|
* ------------------------------------------------------------------------------------------------
|
|
*/
|
|
|
|
if ( ! function_exists( 'woodmart_filter_product_categories_widget_args' ) ) {
|
|
function woodmart_filter_product_categories_widget_args( $list_args ) {
|
|
|
|
$list_args['walker'] = new WOODMART_WC_Product_Cat_List_Walker();
|
|
|
|
return $list_args;
|
|
}
|
|
|
|
add_filter( 'woocommerce_product_categories_widget_args', 'woodmart_filter_product_categories_widget_args', 10, 1 );
|
|
}
|
|
|
|
/**
|
|
* ------------------------------------------------------------------------------------------------
|
|
* AJAX add to cart for all product types
|
|
* ------------------------------------------------------------------------------------------------
|
|
*/
|
|
|
|
if ( ! function_exists( 'woodmart_ajax_add_to_cart' ) ) {
|
|
function woodmart_ajax_add_to_cart() {
|
|
// Get messages
|
|
ob_start();
|
|
|
|
wc_print_notices();
|
|
|
|
$notices = ob_get_clean();
|
|
|
|
// Get mini cart
|
|
ob_start();
|
|
|
|
woocommerce_mini_cart();
|
|
|
|
$mini_cart = ob_get_clean();
|
|
|
|
// Fragments and mini cart are returned
|
|
$data = array(
|
|
'notices' => $notices,
|
|
'fragments' => apply_filters(
|
|
'woocommerce_add_to_cart_fragments',
|
|
array(
|
|
'div.widget_shopping_cart_content' => '<div class="widget_shopping_cart_content">' . $mini_cart . '</div>',
|
|
)
|
|
),
|
|
'cart_hash' => apply_filters( 'woocommerce_add_to_cart_hash', WC()->cart->get_cart_for_session() ? md5( json_encode( WC()->cart->get_cart_for_session() ) ) : '', WC()->cart->get_cart_for_session() ),
|
|
);
|
|
|
|
wp_send_json( $data );
|
|
|
|
die();
|
|
}
|
|
}
|
|
|
|
add_action( 'wp_ajax_woodmart_ajax_add_to_cart', 'woodmart_ajax_add_to_cart' );
|
|
add_action( 'wp_ajax_nopriv_woodmart_ajax_add_to_cart', 'woodmart_ajax_add_to_cart' );
|
|
|
|
/**
|
|
* ------------------------------------------------------------------------------------------------
|
|
* Function to prepare classes for grid element (column)
|
|
* ------------------------------------------------------------------------------------------------
|
|
*/
|
|
|
|
if ( ! function_exists( 'woodmart_get_grid_el_class' ) ) {
|
|
function woodmart_get_grid_el_class( $loop = 0, $columns = 4, $different_sizes = false, $xs_size = false, $sm_size = 4, $lg_size = 3, $md_size = false ) {
|
|
$classes = '';
|
|
|
|
$items_wide = woodmart_get_wide_items_array( $different_sizes );
|
|
|
|
if ( ! $xs_size ) {
|
|
$xs_size = apply_filters( 'woodmart_grid_xs_default', 6 );
|
|
}
|
|
|
|
if ( $columns > 0 ) {
|
|
$lg_size = 12 / $columns;
|
|
}
|
|
|
|
if ( ! $md_size ) {
|
|
$md_size = $lg_size;
|
|
}
|
|
|
|
if ( $columns > 4 ) {
|
|
$md_size = 3;
|
|
}
|
|
|
|
if ( $columns <= 3 ) {
|
|
if ( $columns == 1 ) {
|
|
$sm_size = 12;
|
|
$xs_size = 12;
|
|
} else {
|
|
$sm_size = 6;
|
|
}
|
|
}
|
|
|
|
// every third element make 2 times larger (for isotope grid)
|
|
if ( $different_sizes && ( in_array( $loop, $items_wide ) ) ) {
|
|
$lg_size *= 2;
|
|
$md_size *= 2;
|
|
}
|
|
|
|
if ( in_array( $columns, array( 5, 7, 8, 9, 10, 11 ) ) ) {
|
|
$lg_size = str_replace( '.', '_', round( 100 / $columns, 1 ) );
|
|
if ( ! strpos( $lg_size, '_' ) ) {
|
|
$lg_size = $lg_size . '_0';
|
|
}
|
|
}
|
|
|
|
$sizes = array(
|
|
array(
|
|
'name' => 'col-lg',
|
|
'value' => $lg_size,
|
|
),
|
|
array(
|
|
'name' => 'col-md',
|
|
'value' => $md_size,
|
|
),
|
|
array(
|
|
'name' => 'col-sm',
|
|
'value' => $sm_size,
|
|
),
|
|
array(
|
|
'name' => 'col',
|
|
'value' => $xs_size,
|
|
),
|
|
);
|
|
|
|
$result_sizes = array();
|
|
foreach ( $sizes as $index => $value ) {
|
|
if ( isset( $sizes[ $index + 1 ] ) ) {
|
|
$next = $sizes[ $index + 1 ];
|
|
} else {
|
|
continue;
|
|
}
|
|
|
|
if ( $value['value'] === $next['value'] ) {
|
|
$result_sizes[ $next['name'] ] = $next['value'];
|
|
unset( $result_sizes[ $value['name'] ] );
|
|
} elseif ( $value['value'] !== $next['value'] ) {
|
|
$result_sizes[ $value['name'] ] = $value['value'];
|
|
$result_sizes[ $next['name'] ] = $next['value'];
|
|
}
|
|
}
|
|
|
|
if ( apply_filters( 'woodmart_old_product_grid_classes', false ) ) {
|
|
$result_sizes = array(
|
|
'col-lg' => $lg_size,
|
|
'col-md' => $md_size,
|
|
'col-sm' => $sm_size,
|
|
'col' => $xs_size,
|
|
);
|
|
}
|
|
|
|
foreach ( $result_sizes as $size => $value ) {
|
|
$classes .= ' ' . $size . '-' . $value;
|
|
}
|
|
|
|
if ( $loop > 0 && $columns > 0 ) {
|
|
if ( 0 == ( $loop - 1 ) % $columns || 1 == $columns ) {
|
|
$classes .= ' first ';
|
|
}
|
|
if ( 0 == $loop % $columns ) {
|
|
$classes .= ' last ';
|
|
}
|
|
}
|
|
|
|
return $classes;
|
|
}
|
|
}
|
|
|
|
|
|
if ( ! function_exists( 'woodmart_get_wide_items_array' ) ) {
|
|
function woodmart_get_wide_items_array( $different_sizes = false ) {
|
|
$items_wide = apply_filters( 'woodmart_wide_items', array( 5, 6, 7, 8, 13, 14 ) );
|
|
|
|
if ( is_array( $different_sizes ) ) {
|
|
$items_wide = apply_filters( 'woodmart_wide_items', $different_sizes );
|
|
}
|
|
|
|
return $items_wide;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* ------------------------------------------------------------------------------------------------
|
|
* Woodmart Related product count
|
|
* ------------------------------------------------------------------------------------------------
|
|
*/
|
|
if ( ! function_exists( 'woodmart_related_count' ) ) {
|
|
add_filter( 'woocommerce_output_related_products_args', 'woodmart_related_count' );
|
|
function woodmart_related_count() {
|
|
$args['posts_per_page'] = ( woodmart_get_opt( 'related_product_count' ) ) ? woodmart_get_opt( 'related_product_count' ) : 8;
|
|
return $args;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* ------------------------------------------------------------------------------------------------
|
|
* Reset loop
|
|
* ------------------------------------------------------------------------------------------------
|
|
*/
|
|
|
|
if ( ! function_exists( 'woodmart_reset_loop' ) ) {
|
|
function woodmart_reset_loop() {
|
|
unset( $GLOBALS['woodmart_loop'] );
|
|
woodmart_setup_loop();
|
|
}
|
|
add_action( 'woocommerce_after_shop_loop', 'woodmart_reset_loop', 1000 );
|
|
add_action( 'loop_end', 'woodmart_reset_loop', 1000 );
|
|
}
|
|
|
|
/**
|
|
* ------------------------------------------------------------------------------------------------
|
|
* Get loop prop
|
|
* ------------------------------------------------------------------------------------------------
|
|
*/
|
|
|
|
if ( ! function_exists( 'woodmart_loop_prop' ) ) {
|
|
function woodmart_loop_prop( $prop, $default = '' ) {
|
|
woodmart_setup_loop();
|
|
|
|
return isset( $GLOBALS['woodmart_loop'], $GLOBALS['woodmart_loop'][ $prop ] ) ? $GLOBALS['woodmart_loop'][ $prop ] : $default;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* ------------------------------------------------------------------------------------------------
|
|
* Set loop prop
|
|
* ------------------------------------------------------------------------------------------------
|
|
*/
|
|
|
|
if ( ! function_exists( 'woodmart_set_loop_prop' ) ) {
|
|
function woodmart_set_loop_prop( $prop, $value = '' ) {
|
|
if ( ! isset( $GLOBALS['woodmart_loop'] ) ) {
|
|
woodmart_setup_loop();
|
|
}
|
|
|
|
$GLOBALS['woodmart_loop'][ $prop ] = $value;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* ------------------------------------------------------------------------------------------------
|
|
* Setup loop
|
|
* ------------------------------------------------------------------------------------------------
|
|
*/
|
|
|
|
if ( ! function_exists( 'woodmart_setup_loop' ) ) {
|
|
function woodmart_setup_loop( $args = array() ) {
|
|
if ( isset( $GLOBALS['woodmart_loop'] ) ) {
|
|
return; // If the loop has already been setup, bail.
|
|
}
|
|
|
|
$default_args = array(
|
|
'products_different_sizes' => woodmart_get_opt( 'products_different_sizes' ),
|
|
'product_categories_design' => woodmart_get_opt( 'categories_design' ),
|
|
'product_categories_shadow' => woodmart_get_opt( 'categories_with_shadow' ),
|
|
'products_columns' => ( woodmart_get_opt( 'per_row_columns_selector' ) ) ? apply_filters( 'loop_shop_columns', woodmart_get_products_columns_per_row() ) : woodmart_get_opt( 'products_columns' ),
|
|
'product_categories_style' => false,
|
|
'product_hover' => woodmart_get_opt( 'products_hover' ),
|
|
'products_view' => woodmart_get_shop_view(),
|
|
'products_masonry' => woodmart_get_opt( 'products_masonry' ),
|
|
'product_quantity' => woodmart_get_opt( 'product_quantity' ),
|
|
'img_size' => false,
|
|
'img_size_custom' => false,
|
|
|
|
'timer' => woodmart_get_opt( 'shop_countdown' ),
|
|
'progress_bar' => woodmart_get_opt( 'grid_stock_progress_bar' ),
|
|
'swatches' => false,
|
|
|
|
'is_slider' => false,
|
|
'is_shortcode' => false,
|
|
'is_quick_view' => false,
|
|
|
|
'woocommerce_loop' => 0,
|
|
'woodmart_loop' => 0,
|
|
|
|
'parts_media' => true,
|
|
'parts_title' => true,
|
|
'parts_meta' => true,
|
|
'parts_text' => true,
|
|
'parts_btn' => true,
|
|
|
|
'blog_design' => woodmart_get_opt( 'blog_design' ),
|
|
'blog_type' => false,
|
|
'blog_columns' => woodmart_get_opt( 'blog_columns' ),
|
|
'double_size' => false,
|
|
|
|
'portfolio_style' => woodmart_get_opt( 'portoflio_style' ),
|
|
'portfolio_column' => woodmart_get_opt( 'projects_columns' ),
|
|
'portfolio_image_size' => woodmart_get_opt( 'portoflio_image_size' ),
|
|
'portfolio_image_size_custom' => false,
|
|
);
|
|
|
|
$GLOBALS['woodmart_loop'] = wp_parse_args( $args, $default_args );
|
|
}
|
|
add_action( 'woocommerce_before_shop_loop', 'woodmart_setup_loop', 10 );
|
|
add_action( 'wp', 'woodmart_setup_loop', 50 );
|
|
add_action( 'loop_start', 'woodmart_setup_loop', 10 );
|
|
}
|
|
|
|
/**
|
|
* ------------------------------------------------------------------------------------------------
|
|
* Hide woocommerce notice
|
|
* ------------------------------------------------------------------------------------------------
|
|
*/
|
|
if ( ! function_exists( 'woodmart_hide_outdated_templates_notice' ) ) {
|
|
function woodmart_hide_outdated_templates_notice( $value, $notice ) {
|
|
if ( $notice == 'template_files' ) {
|
|
return false;
|
|
}
|
|
|
|
return $value;
|
|
}
|
|
|
|
add_filter( 'woocommerce_show_admin_notice', 'woodmart_hide_outdated_templates_notice', 2, 10 );
|
|
}
|
|
|
|
if ( ! function_exists( 'woodmart_single_product_thumbnails_gallery_image_width' ) ) {
|
|
/**
|
|
* Change default `gallery_thumbnail` size values
|
|
*
|
|
* @since 1.0.0
|
|
*
|
|
* @return array
|
|
*/
|
|
function woodmart_single_product_thumbnails_gallery_image_width() {
|
|
if ( woodmart_get_opt( 'single_product_thumbnails_gallery_image_width' ) ) {
|
|
$size = array(
|
|
'width' => (int) woodmart_get_opt( 'single_product_thumbnails_gallery_image_width' ),
|
|
'height' => 0,
|
|
'crop' => 0,
|
|
);
|
|
} else {
|
|
$size = wc_get_image_size( 'woocommerce_thumbnail' );
|
|
}
|
|
|
|
if ( isset( $size['height'] ) && ! $size['height'] ) {
|
|
$size['height'] = 0;
|
|
}
|
|
|
|
return $size;
|
|
}
|
|
|
|
add_filter( 'woocommerce_get_image_size_gallery_thumbnail', 'woodmart_single_product_thumbnails_gallery_image_width', 10 );
|
|
}
|
|
|
|
/**
|
|
* ------------------------------------------------------------------------------------------------
|
|
* Change single product notice position
|
|
* ------------------------------------------------------------------------------------------------
|
|
*/
|
|
remove_action( 'woocommerce_before_single_product', 'woocommerce_output_all_notices', 10 );
|
|
remove_action( 'woocommerce_before_shop_loop', 'woocommerce_output_all_notices', 10 );
|
|
|
|
add_action( 'woodmart_before_single_product_summary_wrap', 'woocommerce_output_all_notices', 10 );
|
|
add_action( 'woodmart_before_shop_page', 'woocommerce_output_all_notices', 10 );
|
|
|