ASTRA_Ext_WooCommerce_Markup
Description
Source
File: addons/woocommerce/classes/class-astra-ext-woocommerce-markup.php
class ASTRA_Ext_WooCommerce_Markup { /** * Member Varible * * @var object instance */ private static $instance; /** * Initiator */ public static function get_instance() { if ( ! isset( self::$instance ) ) { self::$instance = new self(); } return self::$instance; } /** * Constructor */ public function __construct() { add_action( 'astra_get_css_files', array( $this, 'add_styles' ) ); add_action( 'astra_get_js_files', array( $this, 'add_scripts' ) ); add_filter( 'woocommerce_output_related_products_args', array( $this, 'related_products_args' ) ); add_filter( 'get_the_post_type_description', 'astra_woo_remove_shop_page_description', 10, 2 ); add_filter( 'body_class', array( $this, 'body_class' ) ); add_filter( 'post_class', array( $this, 'post_class' ) ); // Single product. add_filter( 'woocommerce_loop_add_to_cart_args', array( $this, 'add_to_cart_args' ), 10, 2 ); add_filter( 'woocommerce_sale_flash', array( $this, 'sale_flash' ), 10, 3 ); add_action( 'wp', array( $this, 'single_product_customization' ) ); add_action( 'wp', array( $this, 'customization_checkout_page' ) ); add_action( 'wp', array( $this, 'customization_cart_page' ) ); // Load WooCommerce shop page styles. add_action( 'wp', array( $this, 'shop_page_styles' ) ); $astra_woocommerce_instance = Astra_Woocommerce::get_instance(); add_action( 'woocommerce_shop_loop', array( $this, 'init_quick_view' ), 999 ); // Pagination. add_action( 'wp', array( $this, 'common_actions' ), 999 ); add_action( 'wp_enqueue_scripts', array( $this, 'enqueue_frontend_scripts' ) ); add_filter( 'astra_theme_js_localize', array( $this, 'shop_js_localize' ) ); // if user not logged in. // quick view ajax. add_action( 'wp_ajax_ast_load_product_quick_view', array( $this, 'ast_load_product_quick_view_ajax' ) ); add_action( 'wp_ajax_nopriv_ast_load_product_quick_view', array( $this, 'ast_load_product_quick_view_ajax' ) ); // Custom Template Quick View. $this->quick_view_content_actions(); add_action( 'wp_ajax_astra_add_cart_single_product', array( $this, 'astra_add_cart_single_product_ajax' ) ); add_action( 'wp_ajax_nopriv_astra_add_cart_single_product', array( $this, 'astra_add_cart_single_product_ajax' ) ); // Register Off Canvas Sidebars. add_action( 'widgets_init', array( $this, 'shop_filters_sidebar' ), 15 ); add_action( 'astra_body_bottom', array( $this, 'get_off_canvas_sidebar' ) ); // Addon meta option. add_action( 'wp', array( $this, 'addons_meta_options' ) ); add_filter( 'astra_addon_js_localize', array( $this, 'localize_variables_shop_page' ) ); // Advanced header bg image. add_filter( 'astra_advanced_headers_title_bar_bg', array( $this, 'category_featured_image' ), 10, 2 ); add_shortcode( 'astra_woo_mini_cart', array( $this, 'astra_woo_mini_cart_markup' ) ); // Load Google fonts. add_action( 'astra_get_fonts', array( $this, 'add_fonts' ), 1 ); } /** * Add Font Family Callback * * @since 1.2.0 * @return void */ public function add_fonts() { $font_family_product_title = astra_get_option( 'font-family-product-title' ); $font_weight_product_title = astra_get_option( 'font-weight-product-title' ); Astra_Fonts::add_font( $font_family_product_title, $font_weight_product_title ); $font_family_shop_product_title = astra_get_option( 'font-family-shop-product-title' ); $font_weight_shop_product_title = astra_get_option( 'font-weight-shop-product-title' ); Astra_Fonts::add_font( $font_family_shop_product_title, $font_weight_shop_product_title ); $font_family_shop_product_price = astra_get_option( 'font-family-shop-product-price' ); $font_weight_shop_product_price = astra_get_option( 'font-weight-shop-product-price' ); Astra_Fonts::add_font( $font_family_shop_product_price, $font_weight_shop_product_price ); $font_family_shop_product_content = astra_get_option( 'font-family-shop-product-content' ); $font_weight_shop_product_content = astra_get_option( 'font-weight-shop-product-content' ); Astra_Fonts::add_font( $font_family_shop_product_content, $font_weight_shop_product_content ); $font_family_product_price = astra_get_option( 'font-family-product-price' ); $font_weight_product_price = astra_get_option( 'font-weight-product-price' ); Astra_Fonts::add_font( $font_family_product_price, $font_weight_product_price ); $font_family_product_content = astra_get_option( 'font-family-product-content' ); $font_weight_product_content = astra_get_option( 'font-weight-product-content' ); Astra_Fonts::add_font( $font_family_product_content, $font_weight_product_content ); $font_family_product_breadcrumb = astra_get_option( 'font-family-product-breadcrumb' ); $font_weight_product_breadcrumb = astra_get_option( 'font-weight-product-breadcrumb' ); Astra_Fonts::add_font( $font_family_product_breadcrumb, $font_weight_product_breadcrumb ); } /** * Mini Cart shortcode `astra_woo_mini_cart` mrakup. * * @since 1.2.0 * @param array $atts Shortcode atts. * @return html */ public function astra_woo_mini_cart_markup( $atts ) { $atts = shortcode_atts( array( 'direction' => 'bottom left', ), $atts ); $output = ''; $astra_woocommerce_instance = Astra_Woocommerce::get_instance(); if ( method_exists( $astra_woocommerce_instance, 'woo_mini_cart_markup' ) ) { $output = '<div class="ast-woo-mini-cart-wrapper ast-woo-mini-cart-dir ' . esc_attr( $atts['direction'] ) . '">'; $output .= $astra_woocommerce_instance->woo_mini_cart_markup(); $output .= '</div>'; } return $output; } /** * Get Off Canvas Sidebar * * @return void */ public function get_off_canvas_sidebar() { if ( 'disable' != astra_get_option( 'shop-off-canvas-trigger-type' ) && ( is_shop() || is_product_taxonomy() ) ) { echo '<div class="astra-off-canvas-sidebar-wrapper from-left"><div class="astra-off-canvas-sidebar"><a href="javascript:void(0)" id="cart-accessibility" class="ast-shop-filter-close close">' . Astra_Icons::get_icons( 'close' ) . '</a>'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped astra_get_footer_widget( 'astra-woo-product-off-canvas-sidebar' ); echo '</div></div>'; } } /** * Store widgets init. * * @since 1.1.0 * @return void */ public function shop_filters_sidebar() { register_sidebar( array( 'name' => esc_html__( 'Off-Canvas Filters', 'astra-addon' ), 'id' => 'astra-woo-product-off-canvas-sidebar', 'description' => __( 'This sidebar will show product filters on Shop page. Uncheck "Disable Off Canvas" option from `Customizer > Layout > Woocommerce > Shop` to enable this on Shop page.', 'astra-addon' ), 'before_widget' => '<div id="%1$s" class="widget %2$s">', 'after_widget' => '</div>', 'before_title' => '<h2 class="widget-title">', 'after_title' => '</h2>', ) ); } /** * Infinite Products Show on scroll * * @since 1.1.0 * @param array $localize JS localize variables. * @return array */ public function shop_js_localize( $localize ) { global $wp_query; $single_ajax_add_to_cart = astra_get_option( 'single-product-ajax-add-to-cart' ); if ( is_singular( 'product' ) ) { $product = wc_get_product( get_the_id() ); if ( false !== $product && $product->is_type( 'external' ) ) { // Disable Ajax Add to Cart feature for External/Affiliate product. $single_ajax_add_to_cart = false; } } $shop_pagination = astra_get_option( 'shop-pagination' ); $shop_infinite_scroll_event = astra_get_option( 'shop-infinite-scroll-event' ); $localize['edit_post_url'] = admin_url( 'post.php?post={{id}}&action=edit' ); $localize['ajax_url'] = admin_url( 'admin-ajax.php' ); $localize['shop_infinite_count'] = 2; $localize['shop_infinite_total'] = $wp_query->max_num_pages; $localize['shop_pagination'] = $shop_pagination; $localize['shop_infinite_scroll_event'] = $shop_infinite_scroll_event; $localize['shop_no_more_post_message'] = apply_filters( 'astra_shop_no_more_product_text', __( 'No more products to show.', 'astra-addon' ) ); $localize['checkout_prev_text'] = __( 'Back to my details', 'astra-addon' ); $localize['checkout_next_text'] = __( 'Proceed to payment', 'astra-addon' ); $localize['show_comments'] = __( 'Show Comments', 'astra-addon' ); $localize['shop_quick_view_enable'] = astra_get_option( 'shop-quick-view-enable' ); $localize['shop_quick_view_stick_cart'] = astra_get_option( 'shop-quick-view-stick-cart' ); $localize['shop_quick_view_auto_height'] = true; $localize['single_product_ajax_add_to_cart'] = $single_ajax_add_to_cart; $localize['is_cart'] = is_cart(); $localize['is_single_product'] = is_product(); $localize['view_cart'] = esc_attr__( 'View cart', 'astra-addon' ); $localize['cart_url'] = apply_filters( 'astra_woocommerce_add_to_cart_redirect', wc_get_cart_url() ); return $localize; } /** * Common Actions. * * @since 1.1.0 * @return void */ public function common_actions() { // Shop Pagination. $this->shop_pagination(); // Quick View. $this->init_quick_view(); } /** * Shop Pagination. * * @since 1.1.0 * @return void */ public function shop_pagination() { $pagination = astra_get_option( 'shop-pagination' ); if ( 'infinite' == $pagination ) { add_action( 'woocommerce_after_shop_loop', array( $this, 'astra_shop_pagination' ), 10 ); } } /** * Astra Shop Pagination * * @since 1.1.0 * @param html $output Pagination markup. * @return void */ public function astra_shop_pagination( $output ) { global $wp_query; $infinite_event = astra_get_option( 'shop-infinite-scroll-event' ); $load_more_text = astra_get_option( 'shop-load-more-text' ); if ( '' === $load_more_text ) { $load_more_text = __( 'Load More', 'astra-addon' ); } if ( $wp_query->max_num_pages > 1 ) { ?> <nav class="ast-shop-pagination-infinite"> <div class="ast-loader"> <div class="ast-loader-1"></div> <div class="ast-loader-2"></div> <div class="ast-loader-3"></div> </div> <?php if ( 'click' == $infinite_event ) { ?> <span class="ast-shop-load-more active"> <?php echo apply_filters( 'astra_load_more_text', esc_html( $load_more_text ) ); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped ?> </span> <?php } ?> </nav> <?php } } /** * Frontend scripts. * * @since 1.0 * * @return void. */ public function enqueue_frontend_scripts() { /* Directory and Extension */ $shop_pagination = astra_get_option( 'shop-pagination' ); $file_prefix = '.min'; $dir_name = 'minified'; if ( SCRIPT_DEBUG ) { $file_prefix = ''; $dir_name = 'unminified'; } $js_gen_path = ASTRA_EXT_WOOCOMMERCE_URI . 'assets/js/' . $dir_name . '/'; $css_gen_path = ASTRA_EXT_WOOCOMMERCE_URI . 'assets/css/' . $dir_name . '/'; // Load shop infinite JS pagination only when used. if ( ( is_shop() || is_product_taxonomy() ) && 'infinite' === $shop_pagination ) { if ( is_shop() ) { $shop_page_display = get_option( 'woocommerce_shop_page_display', false ); if ( 'subcategories' !== $shop_page_display || is_search() ) { wp_enqueue_script( 'astra-shop-pagination-infinite', $js_gen_path . 'pagination-infinite' . $file_prefix . '.js', array( 'jquery', 'astra-addon-js' ), ASTRA_EXT_VER, true ); } } elseif ( is_product_taxonomy() ) { wp_enqueue_script( 'astra-shop-pagination-infinite', $js_gen_path . 'pagination-infinite' . $file_prefix . '.js', array( 'jquery', 'astra-addon-js' ), ASTRA_EXT_VER, true ); } } if ( is_checkout() ) { $two_step_checkout = astra_get_option( 'two-step-checkout' ); if ( $two_step_checkout ) { wp_enqueue_script( 'astra-two-step-checkout', $js_gen_path . 'two-step-checkout' . $file_prefix . '.js', array( 'jquery', 'astra-addon-js', 'flexslider' ), ASTRA_EXT_VER, true ); } $checkout_placeholder_forms = astra_get_option( 'checkout-labels-as-placeholders' ); if ( $checkout_placeholder_forms ) { wp_enqueue_script( 'astra-checkout-labels-as-placeholders', $js_gen_path . 'checkout-labels-as-placeholders' . $file_prefix . '.js', array( 'jquery', 'astra-addon-js' ), ASTRA_EXT_VER, true ); } $checkout_persistence_form_data = astra_get_option( 'checkout-persistence-form-data' ); if ( $checkout_persistence_form_data ) { wp_enqueue_script( 'astra-checkout-persistence-form-data', $js_gen_path . 'checkout-persistence-form-data' . $file_prefix . '.js', array( 'jquery', 'astra-addon-js' ), ASTRA_EXT_VER, true ); } } $single_product_ajax_add_to_cart = astra_get_option( 'single-product-ajax-add-to-cart' ); $shop_quick_view_enable = astra_get_option( 'shop-quick-view-enable' ); if ( $single_product_ajax_add_to_cart || $shop_quick_view_enable ) { wp_enqueue_script( 'astra-single-product-ajax-cart', $js_gen_path . 'single-product-ajax-cart' . $file_prefix . '.js', array( 'jquery', 'astra-addon-js' ), ASTRA_EXT_VER, true ); } } /** * Single Product add to cart ajax request * * @since 1.1.0 * * @return void. */ public function astra_add_cart_single_product_ajax() { add_action( 'wp_loaded', array( 'WC_Form_Handler', 'add_to_cart_action' ), 20 ); if ( is_callable( array( 'WC_AJAX', 'get_refreshed_fragments' ) ) ) { WC_AJAX::get_refreshed_fragments(); } die(); } /** * Breadcrumb wrapper Start */ public function product_navigation_wrapper_start() { $nav_style = astra_get_option( 'single-product-nav-style' ); ?> <div class="ast-product-navigation-wrapper <?php echo esc_attr( $nav_style ); ?>"> <?php } /** * Breadcrumb wrapper End */ public function product_navigation_wrapper_end() { ?> </div><!-- .ast-product-navigation-wrapper --> <?php } /** * Single product next and previous links. * * @since 1.0.0 * @return void if not a single product. */ public function next_previous_links() { if ( ! is_product() ) { return; } $previous_icon = '<i class="ast-icon-previous"></i>'; $next_icon = '<i class="ast-icon-next"></i>'; if ( true === Astra_Icons::is_svg_icons() ) { $previous_icon = '<i class="ast-product-icon-previous">' . Astra_Icons::get_icons( 'arrow' ) . '</i>'; $next_icon = '<i class="ast-product-icon-next">' . Astra_Icons::get_icons( 'arrow' ) . '</i>'; } ?> <div class="product-links"> <?php previous_post_link( '%link', $previous_icon ); next_post_link( '%link', $next_icon ); ?> </div> <?php } /** * Shop page template. * * @since 1.0.0 * @return void if not a shop page. */ public function shop_page_styles() { $wp_doing_ajax = wp_doing_ajax(); if ( ! ( is_shop() || is_product_taxonomy() ) && ! $wp_doing_ajax ) { return; } // Page Title. if ( ! astra_get_option( 'shop-page-title-display' ) ) { add_filter( 'woocommerce_show_page_title', '__return_false' ); } // Breadcrumb. if ( ! astra_get_option( 'shop-breadcrumb-display' ) ) { remove_action( 'woocommerce_before_main_content', 'woocommerce_breadcrumb', 20, 0 ); } // Toolbar. if ( ! astra_get_option( 'shop-toolbar-display' ) ) { remove_action( 'woocommerce_before_shop_loop', 'woocommerce_result_count', 20 ); remove_action( 'woocommerce_before_shop_loop', 'woocommerce_catalog_ordering', 30 ); } // Off Canvas. if ( 'disable' != astra_get_option( 'shop-off-canvas-trigger-type' ) ) { add_action( 'woocommerce_before_shop_loop', array( $this, 'off_canvas_button' ), 11 ); if ( astra_get_option( 'shop-active-filters-display' ) ) { add_action( 'woocommerce_before_shop_loop', array( $this, 'off_canvas_applied_filters' ), 40 ); } } } /** * Off Canvas Filters button. * * @return void */ public function off_canvas_button() { $icon_class = apply_filters( 'astra_woo_off_canvas_trigger_icon', 'astra-woo-filter-icon' ); $filter_text = ''; $trigger_link = astra_get_option( 'shop-filter-trigger-link' ); if ( ! empty( $trigger_link ) ) { $filter_text = '<span class="astra-woo-filter-text">' . $trigger_link . '</span>'; } switch ( astra_get_option( 'shop-off-canvas-trigger-type' ) ) { case 'link': echo '<a href="#" class="astra-shop-filter-button" data-selector="astra-off-canvas-sidebar-wrapper"><span class="' . $icon_class . '">' . Astra_Icons::get_icons( 'menu-bars' ) . '</span>' . $filter_text . '</a>'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped break; case 'button': echo '<button class="button astra-shop-filter-button" data-selector="astra-off-canvas-sidebar-wrapper"><span class="' . $icon_class . '">' . Astra_Icons::get_icons( 'menu-bars' ) . '</span>' . $filter_text . '</button>'; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped break; } } /** * Off Canvas applied filters. * * @return void */ public function off_canvas_applied_filters() { the_widget( 'WC_Widget_Layered_Nav_Filters' ); } /** * Single product customization. * * @return void */ public function single_product_customization() { if ( ! is_product() ) { return; } if ( ! astra_get_option( 'single-product-image-zoom-effect' ) ) { remove_theme_support( 'wc-product-gallery-zoom' ); } if ( 'disable' != astra_get_option( 'single-product-nav-style' ) ) { add_action( 'woocommerce_single_product_summary', array( $this, 'product_navigation_wrapper_start' ), 1, 0 ); add_action( 'woocommerce_single_product_summary', array( $this, 'next_previous_links' ), 1, 0 ); add_action( 'woocommerce_single_product_summary', array( $this, 'product_navigation_wrapper_end' ), 1, 0 ); } // Breadcrumb. if ( astra_get_option( 'single-product-breadcrumb-disable' ) ) { remove_action( 'woocommerce_single_product_summary', 'woocommerce_breadcrumb', 2 ); } // Remove Default actions. 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 ); remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_excerpt', 20 ); remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_meta', 40 ); remove_action( 'woocommerce_single_product_summary', 'woocommerce_template_single_add_to_cart', 30 ); /* Add single product content */ add_action( 'woocommerce_single_product_summary', array( $this, 'single_product_content_structure' ), 10 ); if ( ! astra_get_option( 'single-product-tabs-display' ) ) { remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_product_data_tabs', 10 ); } /* Display Related Products */ if ( ! astra_get_option( 'single-product-related-display' ) ) { remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_output_related_products', 20 ); } /* Display Up sell Products */ if ( ! astra_get_option( 'single-product-up-sells-display' ) ) { remove_action( 'woocommerce_after_single_product_summary', 'woocommerce_upsell_display', 15 ); } } /** * Show the product title in the product loop. * * @param string $product_type product type. */ public function astra_woo_woocommerce_template_product_title( $product_type ) { if ( 'quick-view' === $product_type ) { echo '<a href="' . esc_url( get_the_permalink() ) . '" class="ast-loop-product__link">'; } woocommerce_template_single_title(); if ( 'quick-view' === $product_type ) { echo '</a>'; } } /** * Show the product title in the product loop. By default this is an H2. * * @param string $product_type product type. */ public function single_product_content_structure( $product_type = '' ) { $single_structure = apply_filters( 'astra_woo_single_product_structure', astra_get_option( 'single-product-structure' ), $product_type ); if ( is_array( $single_structure ) && ! empty( $single_structure ) ) { foreach ( $single_structure as $value ) { switch ( $value ) { case 'title': /** * Add Product Title on single product page for all products. */ do_action( 'astra_woo_single_title_before' ); $this->astra_woo_woocommerce_template_product_title( $product_type ); do_action( 'astra_woo_single_title_after' ); break; case 'price': /** * Add Product Price on single product page for all products. */ do_action( 'astra_woo_single_price_before' ); woocommerce_template_single_price(); do_action( 'astra_woo_single_price_after' ); break; case 'ratings': /** * Add rating on single product page for all products. */ do_action( 'astra_woo_single_rating_before' ); woocommerce_template_single_rating(); do_action( 'astra_woo_single_rating_after' ); break; case 'short_desc': do_action( 'astra_woo_single_short_description_before' ); woocommerce_template_single_excerpt(); do_action( 'astra_woo_single_short_description_after' ); break; case 'add_cart': do_action( 'astra_woo_single_add_to_cart_before' ); woocommerce_template_single_add_to_cart(); do_action( 'astra_woo_single_add_to_cart_after' ); break; case 'meta': do_action( 'astra_woo_single_category_before' ); woocommerce_template_single_meta(); do_action( 'astra_woo_single_category_after' ); break; default: break; } } } } /** * Sale bubble flash * * @param mixed $markup HTML markup of the the sale bubble / flash. * @param string $post Post. * @param string $product Product. * @return string bubble markup. */ public function sale_flash( $markup, $post, $product ) { $sale_notification = astra_get_option( 'product-sale-notification', '', 'default' ); $sale_percent_value = ''; // If none then return! if ( 'none' === $sale_notification ) { return; } // Default text. $text = __( 'Sale!', 'astra-addon' ); $sale_percentage_data = array(); switch ( $sale_notification ) { // Display % instead of "Sale!". case 'sale-percentage': $sale_percent_value = astra_get_option( 'product-sale-percent-value' ); // if not variable product. if ( ! $product->is_type( 'variable' ) ) { $sale_price = $product->get_sale_price(); if ( $sale_price ) { $regular_price = $product->get_regular_price(); $percent_sale = round( ( ( ( $regular_price - $sale_price ) / $regular_price ) * 100 ), 0 ); $sale_percent_value = $sale_percent_value ? $sale_percent_value : '-[value]%'; $text = str_replace( '[value]', $percent_sale, $sale_percent_value ); } } else { // if variable product. foreach ( $product->get_children() as $child_id ) { $variation = wc_get_product( $child_id ); if ( $variation instanceof WC_Product ) { // Checking in case if the wc_get_product exists or is not false. $sale_price = $variation->get_sale_price(); if ( $sale_price ) { $regular_price = $variation->get_regular_price(); $percent_sale = round( ( ( ( $regular_price - $sale_price ) / $regular_price ) * 100 ), 0 ); $sale_percent_value = $sale_percent_value ? $sale_percent_value : '-[value]%'; $text = str_replace( '[value]', $percent_sale, $sale_percent_value ); $sale_percentage_data[ $child_id ] = $percent_sale; } } } } break; } // CSS classes. $classes = array(); $classes[] = 'onsale'; $classes[] = astra_get_option( 'product-sale-style' ); $classes = implode( ' ', $classes ); // Generate markup. return '<span ' . astra_attr( 'woo-sale-badge-container', array( 'class' => $classes, 'data-sale' => wp_json_encode( $sale_percentage_data ), 'data-notification' => $sale_notification, 'data-sale-per-text' => $sale_percent_value, ) ) . '>' . esc_html( $text ) . '</span>'; } /** * Add to cart button arguments * * @param array $defaults Default argument array. * @param array $product Add button style class. * * @return array; */ public function add_to_cart_args( $defaults, $product ) { $defaults['class'] = $defaults['class'] . ' ' . astra_get_option( 'shop-button-style' ); return $defaults; } /** * Related products arguments * * @param array $args Default argument array. * * @return array; */ public function related_products_args( $args ) { $columns = astra_get_option( 'single-product-related-upsell-grid' ); $args['posts_per_page'] = astra_get_option( 'single-product-related-upsell-per-page' ); // phpcs:ignore WordPress.WP.PostsPerPage.posts_per_page_posts_per_page $args['columns'] = $columns['desktop']; return $args; } /** * Body Class * * @param array $classes Default argument array. * * @return array; */ public function body_class( $classes ) { if ( is_shop() || is_product_taxonomy() ) { $shop_style = astra_get_option( 'shop-style' ); if ( 'shop-page-list-style' == $shop_style ) { $classes[] = 'ast-woocommerce-' . $shop_style; } $pagination_type = astra_get_option( 'shop-pagination' ); if ( 'infinite' === $pagination_type ) { $classes[] = 'ast-woocommerce-pagination-type-infinite'; } if ( 'number' === $pagination_type ) { $classes[] = 'ast-woocommerce-pagination-' . astra_get_option( 'shop-pagination-style' ); } } elseif ( is_product() ) { $related_upsell_style = astra_get_option( 'shop-style' ); if ( 'shop-page-list-style' == $related_upsell_style ) { $classes[] = 'ast-woocommerce-related-upsell-list-style'; } $rel_up_columns = astra_get_option( 'single-product-related-upsell-grid' ); $classes[] = 'rel-up-columns-' . $rel_up_columns['desktop']; $classes[] = 'tablet-rel-up-columns-' . $rel_up_columns['tablet']; $classes[] = 'mobile-rel-up-columns-' . $rel_up_columns['mobile']; } elseif ( is_checkout() ) { if ( astra_get_option( 'two-step-checkout' ) ) { $classes[] = 'ast-woo-two-step-checkout'; } if ( astra_get_option( 'checkout-labels-as-placeholders' ) ) { $classes[] = 'ast-checkout-labels-as-placeholders'; } if ( astra_get_option( 'checkout-distraction-free' ) ) { $classes[] = 'distraction-free'; } } return $classes; } /** * Post Class * * @param array $classes Default argument array. * * @return array; */ public function post_class( $classes ) { $wp_doing_ajax = wp_doing_ajax(); if ( is_shop() || is_product_taxonomy() || ( post_type_exists( 'product' ) && 'product' === get_post_type() ) || $wp_doing_ajax ) { // Single product normal & hover box shadow. $classes[] = astra_get_option( 'shop-product-align' ); $classes[] = 'box-shadow-' . astra_get_option( 'shop-product-shadow' ); $classes[] = 'box-shadow-' . astra_get_option( 'shop-product-shadow-hover' ) . '-hover'; // Single product gallery layout ( vertical / horizontal ). $classes[] = 'ast-product-gallery-layout-' . astra_get_option( 'single-product-gallery-layout' ); $image_gallery = get_post_meta( get_the_ID(), '_product_image_gallery', true ); if ( empty( $image_gallery ) ) { $classes[] = 'ast-product-gallery-with-no-image'; } // Single product tabs layout ( vertical / horizontal ). if ( astra_get_option( 'single-product-tabs-display' ) ) { $classes[] = 'ast-product-tabs-layout-' . astra_get_option( 'single-product-tabs-layout' ); } $qv_enable = astra_get_option( 'shop-quick-view-enable' ); if ( 'disabled' !== $qv_enable ) { $classes[] = 'ast-qv-' . $qv_enable; } // Add Product Hover class only for infinite scroll products. if ( $wp_doing_ajax ) { $hover_style = astra_get_option( 'shop-hover-style' ); if ( '' !== $hover_style ) { $classes[] = 'astra-woo-hover-' . $hover_style; } } } return $classes; } /** * Checkout page markup update using actions & filters only */ public function customization_checkout_page() { if ( ! is_checkout() ) { return; } // Display order notes. if ( ! astra_get_option( 'checkout-order-notes-display' ) ) { add_filter( 'woocommerce_enable_order_notes_field', '__return_false' ); } // Display coupon. if ( ! astra_get_option( 'checkout-coupon-display' ) ) { remove_action( 'woocommerce_before_checkout_form', 'woocommerce_checkout_coupon_form', 10 ); } /* * Two Step Checkout Page */ if ( astra_get_option( 'two-step-checkout' ) ) { add_action( 'woocommerce_checkout_before_customer_details', 'astra_two_step_checkout_form_wrapper_div', 1 ); add_action( 'woocommerce_checkout_before_customer_details', 'astra_two_step_checkout_form_ul_wrapper', 2 ); add_action( 'woocommerce_checkout_order_review', 'astra_woocommerce_div_wrapper_close', 30 ); add_action( 'woocommerce_checkout_order_review', 'astra_woocommerce_ul_close', 30 ); add_action( 'woocommerce_checkout_before_customer_details', 'astra_two_step_checkout_address_li_wrapper', 5 ); add_action( 'woocommerce_checkout_after_customer_details', 'astra_woocommerce_li_close' ); add_action( 'woocommerce_checkout_before_order_review', 'astra_two_step_checkout_order_review_wrap', 1 ); add_action( 'woocommerce_checkout_after_order_review', 'astra_woocommerce_li_close', 40 ); } if ( astra_get_option( 'checkout-distraction-free' ) ) { // HFB Support for distration free checkout. if ( true === astra_addon_builder_helper()->is_header_footer_builder_active ) { remove_action( 'astra_header', array( Astra_Builder_Header::get_instance(), 'prepare_header_builder_markup' ) ); remove_action( 'astra_footer', array( Astra_Builder_Footer::get_instance(), 'footer_markup' ), 10 ); } remove_action( 'astra_header', 'astra_header_markup' ); remove_action( 'astra_footer', 'astra_footer_markup' ); add_action( 'astra_header', array( $this, 'checkout_header_markup' ) ); add_action( 'astra_footer', array( $this, 'checkout_footer_markup' ) ); // Store Sidebar Layout. add_filter( 'astra_page_layout', array( $this, 'checkout_sidebar_layout' ), 99 ); } } /** * Cart page markup update using actions & filters only */ public function customization_cart_page() { if ( ! is_cart() ) { return; } // Disable cart page cross sell. if ( astra_get_option( 'cart-cross-sell-disable' ) ) { remove_action( 'woocommerce_cart_collaterals', 'woocommerce_cross_sell_display' ); } // Disable single checkout cross sell. if ( astra_get_option( 'cart-cross-sell-disable' ) ) { remove_action( 'woocommerce_cart_collaterals', 'woocommerce_cross_sell_display' ); } } /** * Header markup. */ public function checkout_header_markup() { astra_get_template( 'woocommerce/templates/checkout-header.php' ); } /** * Footer markup. */ public function checkout_footer_markup() { astra_get_template( 'woocommerce/templates/checkout-footer.php' ); } /** * Checkout sidebar layout. * * @param string $sidebar_layout Layout. * * @return string; */ public function checkout_sidebar_layout( $sidebar_layout ) { return 'no-sidebar'; } /** * Add Styles */ public function add_styles() { /*** Start Path Logic */ /* Define Variables */ $uri = ASTRA_EXT_WOOCOMMERCE_URI . 'assets/css/'; $path = ASTRA_EXT_WOOCOMMERCE_DIR . 'assets/css/'; $rtl = ''; if ( is_rtl() ) { $rtl = '-rtl'; } /* Directory and Extension */ $file_prefix = $rtl . '.min'; $dir_name = 'minified'; if ( SCRIPT_DEBUG ) { $file_prefix = $rtl; $dir_name = 'unminified'; } $css_uri = $uri . $dir_name . '/'; $css_dir = $path . $dir_name . '/'; if ( defined( 'ASTRA_THEME_HTTP2' ) && ASTRA_THEME_HTTP2 ) { $gen_path = $css_uri; } else { $gen_path = $css_dir; } /*** End Path Logic */ /* Add style.css */ $style = ( true === Astra_Addon_Builder_Helper::apply_flex_based_css() ) ? 'style-grid' : 'style'; Astra_Minify::add_css( $gen_path . $style . $file_prefix . '.css' ); // Shop page style. $shop_page_style = astra_get_option( 'shop-style' ); if ( 'shop-page-list-style' == $shop_page_style ) { $shop_page_style = Astra_Addon_Builder_Helper::apply_flex_based_css() ? $shop_page_style . '-grid' : $shop_page_style; Astra_Minify::add_css( $gen_path . $shop_page_style . $file_prefix . '.css' ); // Single Product related & upsell product style. $related_upsell_list_style = ( true === Astra_Addon_Builder_Helper::apply_flex_based_css() ) ? 'related-upsell-list-style-grid' : 'related-upsell-list-style'; Astra_Minify::add_css( $gen_path . $related_upsell_list_style . $file_prefix . '.css' ); } if ( astra_get_option( 'two-step-checkout' ) ) { Astra_Minify::add_css( $gen_path . 'two-steps-checkout' . $file_prefix . '.css' ); } if ( astra_get_option( 'checkout-labels-as-placeholders' ) ) { Astra_Minify::add_css( $gen_path . 'checkout-labels-as-placeholders' . $file_prefix . '.css' ); } if ( self::add_to_cart_quantity_btn_enabled() ) { Astra_Minify::add_css( $gen_path . 'add-to-cart-quantity-btn' . $file_prefix . '.css' ); } $quick_view = astra_get_option( 'shop-quick-view-enable' ); if ( $quick_view ) { Astra_Minify::add_css( $gen_path . 'quick-view' . $file_prefix . '.css' ); } } /** * Add Scripts */ public function add_scripts() { /*** Start Path Logic */ /* Define Variables */ $uri = ASTRA_EXT_WOOCOMMERCE_URI . 'assets/js/'; $path = ASTRA_EXT_WOOCOMMERCE_DIR . 'assets/js/'; /* Directory and Extension */ $file_prefix = '.min'; $dir_name = 'minified'; if ( SCRIPT_DEBUG ) { $file_prefix = ''; $dir_name = 'unminified'; } $js_uri = $uri . $dir_name . '/'; $js_dir = $path . $dir_name . '/'; if ( defined( 'ASTRA_THEME_HTTP2' ) && ASTRA_THEME_HTTP2 ) { $gen_path = $js_uri; } else { $gen_path = $js_dir; } /*** End Path Logic */ $quick_view = astra_get_option( 'shop-quick-view-enable' ); if ( $quick_view ) { Astra_Minify::add_js( $gen_path . 'quick-view' . $file_prefix . '.js' ); Astra_Minify::add_dependent_js( 'imagesloaded' ); } $product_gallery = astra_get_option( 'single-product-gallery-layout' ); if ( 'vertical' === $product_gallery ) { Astra_Minify::add_js( $gen_path . 'single-product-vertical-gallery' . $file_prefix . '.js' ); } Astra_Minify::add_js( $gen_path . 'single-product-vertical-gallery' . $file_prefix . '.js' ); if ( self::add_to_cart_quantity_btn_enabled() ) { Astra_Minify::add_js( $gen_path . 'add-to-cart-quantity-btn' . $file_prefix . '.js' ); } } /** * Init Quick View */ public function init_quick_view() { $qv_enable = astra_get_option( 'shop-quick-view-enable' ); if ( 'disabled' !== $qv_enable ) { add_filter( 'astra_theme_js_localize', array( $this, 'qv_js_localize' ) ); // add button. if ( 'after-summary' === $qv_enable ) { add_action( 'astra_woo_shop_summary_wrap_bottom', array( $this, 'add_quick_view_button' ) ); } elseif ( 'on-image' === $qv_enable ) { add_action( 'woocommerce_after_shop_loop_item', array( $this, 'add_quick_view_on_img' ), 7 ); } elseif ( 'on-image-click' === $qv_enable ) { add_action( 'woocommerce_after_shop_loop_item', array( $this, 'add_quick_view_on_img_click' ), 7 ); } // load modal template. add_action( 'wp_footer', array( $this, 'quick_view_html' ) ); } } /** * Quick view localize. * * @since 1.0 * @param array $localize JS localize variables. * @return array */ public function qv_js_localize( $localize ) { global $wp_query; if ( ! isset( $localize['ajax_url'] ) ) { $localize['ajax_url'] = admin_url( 'admin-ajax.php', 'relative' ); } return $localize; } /** * Quick view ajax */ public function ast_load_product_quick_view_ajax() { if ( ! isset( $_REQUEST['product_id'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Recommended die(); } $product_id = intval( $_REQUEST['product_id'] ); // phpcs:ignore WordPress.Security.NonceVerification.Recommended // set the main wp query for the product. wp( 'p=' . $product_id . '&post_type=product' ); // remove product thumbnails gallery. remove_action( 'woocommerce_product_thumbnails', 'woocommerce_show_product_thumbnails', 20 ); ob_start(); // load content template. astra_get_template( 'woocommerce/templates/quick-view-product.php' ); echo ob_get_clean(); // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped die(); } /** * Quick view actions */ public function quick_view_content_actions() { // Image. add_action( 'astra_woo_qv_product_image', 'woocommerce_show_product_sale_flash', 10 ); add_action( 'astra_woo_qv_product_image', array( $this, 'qv_product_images_markup' ), 20 ); // Summary. add_action( 'astra_woo_quick_view_product_summary', array( $this, 'single_product_content_structure' ), 10, 1 ); } /** * Footer markup. */ public function qv_product_images_markup() { astra_get_template( 'woocommerce/templates/quick-view-product-image.php' ); } /** * Quick view button */ public function add_quick_view_button() { global $product; $product_id = $product->get_id(); // Get label. $label = __( 'Quick View', 'astra-addon' ); $button = '<div class="ast-qv-button-wrap">'; $button .= '<a href="#" class="button ast-quick-view-button" data-product_id="' . $product_id . '">' . $label . '</a>'; $button .= '</div>'; $button = apply_filters( 'astra_woo_add_quick_view_button_html', $button, $label, $product ); echo $button; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } /** * Quick view on image */ public function add_quick_view_on_img() { global $product; $product_id = $product->get_id(); // Get label. $label = __( 'Quick View', 'astra-addon' ); $button = '<a href="#" class="ast-quick-view-text" data-product_id="' . $product_id . '">' . $label . '</a>'; $button = apply_filters( 'astra_woo_add_quick_view_text_html', $button, $label, $product ); echo $button; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } /** * Quick view on image */ public function add_quick_view_on_img_click() { global $product; $product_id = $product->get_id(); $button = '<div class="ast-quick-view-data" data-product_id="' . $product_id . '"></div>'; $button = apply_filters( 'astra_woo_add_quick_view_data_html', $button, $product ); echo $button; // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped } /** * Quick view html */ public function quick_view_html() { $this->quick_view_dependent_data(); astra_get_template( 'woocommerce/templates/quick-view-modal.php' ); } /** * Quick view dependent data */ public function quick_view_dependent_data() { wp_enqueue_script( 'wc-add-to-cart-variation' ); wp_enqueue_script( 'flexslider' ); } /** * Category featured image. * * @param string $bg_img Image background url. * @param boolean $is_override Override featured image. * @return string */ public function category_featured_image( $bg_img, $is_override ) { if ( $is_override ) { if ( is_product_category() ) { global $wp_query; $cat = $wp_query->get_queried_object(); $thumbnail_id = function_exists( 'get_term_meta' ) ? get_term_meta( $cat->term_id, 'thumbnail_id', true ) : get_woocommerce_term_meta( $cat->term_id, 'thumbnail_id', true ); $image = wp_get_attachment_url( $thumbnail_id ); if ( $image ) { $bg_img = $image; } } } return $bg_img; } /** * Shop Page Meta Options * * @return void */ public function addons_meta_options() { if ( is_shop() ) { $shop_page_id = get_option( 'woocommerce_shop_page_id' ); /* * Transparent Header for shop page meta. */ $enable_trans_header = astra_get_option( 'transparent-header-enable' ); $shop_transparent_header_meta = get_post_meta( $shop_page_id, 'theme-transparent-header-meta', true ); $show_trans_header = '__return_false'; if ( 'enabled' === $shop_transparent_header_meta ) { $enable_trans_header = true; } elseif ( 'disabled' === $shop_transparent_header_meta ) { $enable_trans_header = false; } if ( $enable_trans_header ) { $show_trans_header = '__return_true'; } add_filter( 'astra_is_transparent_header', $show_trans_header ); /* * Above Header for shop page meta. */ $above_header_meta = get_post_meta( $shop_page_id, 'ast-above-header-display', true ); $show_above_header = '__return_false'; if ( 'disabled' == $above_header_meta ) { $show_above_header = '__return_true'; } add_filter( 'astra_above_header_disable', $show_above_header ); /* * Below Header for shop page meta. */ $below_header_meta = get_post_meta( $shop_page_id, 'ast-below-header-display', true ); $show_below_header = '__return_false'; if ( 'disabled' == $below_header_meta ) { $show_below_header = '__return_true'; } add_filter( 'astra_below_header_disable', $show_below_header ); } } /** * Add Localize variables * * @param array $localize_vars Localize variables array. * @return array */ public function localize_variables_shop_page( $localize_vars ) { /** * Stick Header meta option for shop page */ if ( is_shop() ) { $shop_page_id = get_option( 'woocommerce_shop_page_id' ); $localize_vars['stick_header_meta'] = get_post_meta( $shop_page_id, 'stick-header-meta', true ); $localize_vars['header_main_stick_meta'] = get_post_meta( $shop_page_id, 'header-main-stick-meta', true ); $localize_vars['header_above_stick_meta'] = get_post_meta( $shop_page_id, 'header-above-stick-meta', true ); $localize_vars['header_below_stick_meta'] = get_post_meta( $shop_page_id, 'header-below-stick-meta', true ); } // Accessibility Text. $localize_vars['product_plus_minus_text'] = array( 'plus_qty' => __( 'Plus Quantity', 'astra-addon' ), 'minus_qty' => __( 'Minus Quantity', 'astra-addon' ), ); return $localize_vars; } /** * Function to disable the Add to Cart quantity buttons * * @return boolean * @since 2.1.3 */ public static function add_to_cart_quantity_btn_enabled() { return apply_filters( 'astra_add_to_cart_quantity_btn_enabled', true ); } }
Expand full source code Collapse full source code View on Trac
Methods
- __construct — Constructor
- add_cart_product_image — Add or remove cart product image.
- add_fonts — Add Font Family Callback
- add_member_login_link_text — Already a member? Login CTA adding at the end of registration form.
- add_modern_triggers_on_image — Modern shop page's triggers on product image.
- add_quick_view_button — Quick view button
- add_quick_view_on_img — Quick view on image
- add_quick_view_on_img_click — Quick view on image
- add_registration_link_text — Not a member? Register CTA adding at the end of registration form.
- add_scripts — Add Scripts
- add_styles — Add Styles
- add_to_cart_args — Add to cart button arguments
- add_to_cart_quantity_btn_enabled — Function to disable the Add to Cart quantity buttons
- add_two_step_closing_div — Add Startng & closing dev
- add_two_step_first_step_wrapper — Add first step opening dev
- add_two_step_nav_menu — Display Two Step Nav Menu.
- add_two_step_next_btn — Display Two Step Nav Next Button.
- add_two_step_second_step_order_wrapper — Add second step opening dev
- add_two_step_second_step_wrapper — Add second step opening dev
- add_updated_cart_price — Update cart total on button and order review mobile sction.
- add_views_layout_support — Adding list-grid view support for shop page products.
- additional_class_to_cart_item_classes — Woocommerce cart item add class checkout.
- addons_meta_options — Shop Page Meta Options
- ast_load_product_quick_view_ajax — Quick view ajax
- astra_add_cart_single_product_ajax — Single Product add to cart ajax request
- astra_add_cart_single_product_quantity — Single Product quantity update to cart ajax request
- astra_addon_add_offcanvas_quantity_fields — Offcanvas Cart Quantity fields.
- astra_addon_woo_account_orders — My Account > Orders WooCommerce template.
- astra_check_email_exist — Check email exist.
- astra_check_user_exist — Check user exist.
- astra_is_shop_page_modern_style — Checking whether shop page style is selected as modern layout.
- astra_mini_cart_featured_product — Featured product CTA
- astra_shop_pagination — Astra Shop Pagination
- astra_shop_pagination_infinite — Infinite Posts Show on scroll
- astra_woo_mini_cart_markup — Mini Cart shortcode `astra_woo_mini_cart` mrakup.
- astra_woo_slide_in_cart_markup — Slide in Cart feature shortcode for WooCommerce cart.
- astra_woo_woocommerce_template_product_title — Show the product title in the product loop.
- astra_woocommerce_login_user — Check email exist.
- back_to_cart_button_on_checkout — Back to cart button on checkout.
- before_shop_loop_starts_wrapper — Add wrapper for before shop loop.
- body_class — Body Class
- cart_js_localize — Cart localize
- category_featured_image — Category featured image.
- check_theme_builder_existance — Template Parts Support
- checkout_billing_email_field — Add Custom Email Field.
- checkout_collapsible_order_review — Customized order review section used to display in modern checkout responsive devices.
- checkout_column_layout_fields — Add custom class to the fields to change the UI to three column.
- checkout_footer_markup — Footer markup.
- checkout_form_fields_args_customization — Modify billing country & state placeholder.
- checkout_header_markup — Header markup.
- checkout_js_localize — Localize variables for checkout.
- checkout_place_order_button_text — Checkout Place Order Button.
- checkout_sidebar_layout — Checkout sidebar layout.
- common_actions — Common Actions.
- custom_woocommerce_layered_nav_term_html — Woocommerce layered nav term html.
- customization_cart_page — Cart page markup update using actions & filters only
- customization_checkout_page — Checkout page markup update using actions & filters only
- default_fields_customization — Modify billing address placeholder.
- define_cart_constant — Define cart constants.
- display_custom_payment_heading — Display Payment heading field after coupon code fields.
- enable_short_desc_modern_view — Add product short description in Shop Page structure for List View layout.
- enqueue_frontend_scripts — Frontend scripts.
- filter_list_to_buttons — Filter list to buttons.
- filter_single_product_carousel_options — Woocommerce single product flexslider options.
- get_checkout_form_note — Display Two Step note box.
- get_instance — Initiator
- get_off_canvas_sidebar — Get Off Canvas Sidebar
- get_sale_flash_markup — Astra Sale flash markup.
- get_shop_toolbar_option — Instead of every time of astra_get_option used static at once.
- get_toolbar_elements_processed_array — Get priority for shop toolbar elements.
- header_cart_icon_class — Header Cart Icon Class
- header_cart_icon_markup — Header Cart Extra Icons markup
- init_quick_view — Init Quick View
- is_ajax_pagination — Check if ajax pagination is calling.
- is_easy_view_switcher_enable — Checking whether easy list view setting is enable or not.
- is_shop_page_modern_style — Checking whether shop page style is selected as modern layout.
- label_fields_customization — Change order comments placeholder and label, and set billing phone number to not required.
- localize_variables_shop_page — Add Localize variables
- modern_cart — Modern cart Layout.
- modern_checkout — Modern Checkout.
- modern_my_account_template — Action to initiate my-account modernizing template.
- multistep_checkout — Multistep checkout.
- multistep_checkout_html_output — Multistep checkout html output.
- next_previous_links — Single product next and previous links.
- next_product_preview_image_insertion — Insert Post thumbnail into anchor.
- off_canvas_applied_filters — Off Canvas applied filters.
- off_canvas_button — Off Canvas Filters button.
- post_class — Post Class
- previous_product_preview_image_insertion — Insert Post thumbnail into anchor.
- product_navigation_wrapper_end — Breadcrumb wrapper End
- product_navigation_wrapper_start — Breadcrumb wrapper Start
- quick_view_content_actions — Quick view actions
- quick_view_dependent_data — Quick view dependent data
- quick_view_html — Quick view html
- qv_js_localize — Quick view localize.
- qv_product_images_markup — Footer markup.
- recently_viewed — Recently viewed.
- recently_viewed_html — Recently Viewed HTML
- related_products_args — Related products arguments
- render_checkout_customer_information_text — Render checkout customer information text for the selective refresh partial.
- render_checkout_hide_summary_text — Render checkout hide summary text for the selective refresh partial.
- render_checkout_payment_text — Render checkout payment text for the selective refresh partial.
- render_checkout_place_order_text — Render the checkout place order text for the selective refresh partial.
- render_checkout_show_summary_text — Render checkout show summary text for the selective refresh partial.
- render_checkout_step_one_sub_title — Render the checkout step one sub title for the selective refresh partial.
- render_checkout_step_one_title — Render the checkout step one title for the selective refresh partial.
- render_checkout_step_two_button_sub_text — Render the checkout step two button sub text for the selective refresh partial.
- render_checkout_step_two_button_text — Render the checkout step two button text for the selective refresh partial.
- render_checkout_step_two_sub_title — Render the checkout step two sub title for the selective refresh partial.
- render_checkout_step_two_title — Render the checkout step two title for the selective refresh partial.
- render_checkout_two_step_form_note — Render the checkout two step form note for the selective refresh partial.
- render_coupon_apply_text — Render coupon apply text for the selective refresh partial.
- render_coupon_text — Render coupon text for the selective refresh partial.
- render_modern_shop_view — Init Modern Shop view's items.
- sale_flash — Sale bubble flash
- shop_filter_markup — Collapsible filter markup.
- shop_filters_sidebar — Store widgets init.
- shop_js_localize — Infinite Products Show on scroll
- shop_page_styles — Shop page template.
- shop_pagination — Shop Pagination.
- shop_toolbar_aside_starts_wrapper — Add wrapper for before shop loop.
- shop_toolbar_elements_ends_wrapper — Add wrapper for after shop loop.
- single_product_category — Show the product catgories in the product loop.
- single_product_content_structure — Show the product title in the product loop. By default this is an H2.
- single_product_customization — Single product customization.
- single_product_extras — Show single product extras.
- single_product_gallery_js_localize — Cart localize
- single_product_product_variations_custom_output — Single Product Variation Output.
- single_product_quantity_ajax_cart — Single product Quantity Ajax Offcanvas markup.
- single_product_sticky_add_to_cart — Single product sticky add to cart.
- single_product_variations_custom_html — Single Product Select to Button Markup.
- sticky_content_wrapper_end — Adds closing div after product single summary section.
- sticky_content_wrapper_start — Adds opening div before product single gallery section.
- track_product_view_always — Track product if viewed.
- unset_fields_for_modern_checkout — Prefill the checkout fields if available in url.
- woo_account_downloads — My Account > Downloads WooCommerce template.
- woo_product_tabs_layout — Woocommerce single product tab styles.
- woo_product_tabs_layout_output — Woocommerce single product tab output.
- woo_single_product_gallery_output — Woocommerce single product gallery output.
- woo_single_product_layouts — Woocommece single product layouts.
- woo_single_product_sticky — Woocommerce single product sticky.
- woocommerce_account_navigation — Override my-account WooCommerce's defauilt my-account template.
- woocommerce_cart_non_sticky_end — Cart wrapper non sticky end.
- woocommerce_cart_wrapper_end — Cart wrapper end.
- woocommerce_cart_wrapper_start — Cart wrapper start.
- woocommerce_init — Woocommerce Init.
- woocommerce_modern_coupon_cart — Modern cart coupon markup.
- woocommerce_order_review_end — Woocommerce order review end.
- woocommerce_order_review_start — Woocommerce order review start.
- woocommerce_product_single_payments — Single Product Payments.