123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232 |
- <?php
- /**
- * WooCommerce Compatibility File
- *
- * @link https://woocommerce.com/
- *
- * @package Varia
- */
- /**
- * WooCommerce setup function.
- *
- * @link https://docs.woocommerce.com/document/third-party-custom-theme-compatibility/
- * @link https://github.com/woocommerce/woocommerce/wiki/Enabling-product-gallery-features-(zoom,-swipe,-lightbox)-in-3.0.0
- *
- * @return void
- */
- function varia_woocommerce_setup() {
- add_theme_support( 'woocommerce', apply_filters( 'varia_woocommerce_args', array(
- 'single_image_width' => 750,
- 'thumbnail_image_width' => 350,
- 'product_grid' => array(
- 'default_columns' => 3,
- 'default_rows' => 6,
- 'min_columns' => 1,
- 'max_columns' => 6,
- 'min_rows' => 1
- )
- ) ) );
- add_theme_support( 'wc-product-gallery-zoom' );
- add_theme_support( 'wc-product-gallery-lightbox' );
- add_theme_support( 'wc-product-gallery-slider' );
- }
- add_action( 'after_setup_theme', 'varia_woocommerce_setup' );
- /**
- * Add a custom wrapper for woocomerce content
- */
- function varia_wrapper_start() {
- echo '<article id="woocommerce-wrapper" class="responsive-max-width">';
- }
- add_action('woocommerce_before_main_content', 'varia_wrapper_start', 10);
- function varia_wrapper_end() {
- echo '</article>';
- }
- add_action('woocommerce_after_main_content', 'varia_wrapper_end', 10);
- /**
- * Display category image on category archive
- */
- function varia_category_image() {
- if ( is_product_category() ){
- global $wp_query;
- $cat = $wp_query->get_queried_object();
- $thumbnail_id = get_term_meta( $cat->term_id, 'thumbnail_id', true );
- $image = wp_get_attachment_url( $thumbnail_id );
- if ( $image ) {
- echo '<img src="' . $image . '" alt="' . $cat->name . '" />';
- }
- }
- }
- add_action( 'woocommerce_archive_description', 'varia_category_image', 2 );
- /**
- * Remove WooCommerce Sidebar
- */
- remove_action( 'woocommerce_sidebar', 'woocommerce_get_sidebar', 10 );
- /**
- * Enqueue scripts and styles.
- */
- function varia_woocommerce_scripts() {
- // WooCommerce styles
- wp_enqueue_style( 'varia-woocommerce-style', get_stylesheet_directory_uri() . '/style-woocommerce.css', array(), wp_get_theme()->get( 'Version' ) );
- // WooCommerce RTL styles
- wp_style_add_data( 'varia-woocommerce-style', 'rtl', 'replace' );
- }
- add_action( 'wp_enqueue_scripts', 'varia_woocommerce_scripts' );
- /**
- * Setup cart link for main menu
- */
- if ( ! function_exists( 'varia_cart_link' ) ) {
- /**
- * Cart Link
- * Display a link to the cart including the number of items present and the cart total
- *
- * @return void
- * @since 1.0.0
- */
- function varia_cart_link() {
- $link_output = sprintf(
- '<a class="woocommerce-cart-link" href="%1$s" title="%2$s">
- %3$s
- <span class="woocommerce-cart-subtotal">%4$s</span>
- <small class="woocommerce-cart-count">%5$s</small>
- </a>',
- esc_url( wc_get_cart_url() ),
- esc_attr__( 'View your shopping cart', 'varia' ),
- varia_get_icon_svg( 'shopping_cart', 16 ),
- wp_kses_post( WC()->cart->get_cart_subtotal() ),
- wp_kses_data( sprintf( _n( '%d item', '%d items', WC()->cart->get_cart_contents_count(), 'varia' ), WC()->cart->get_cart_contents_count() ) )
- );
- return $link_output;
- }
- }
- /**
- * Setup cart fragments
- */
- if ( ! function_exists( 'varia_cart_subtotal_fragment' ) ) {
- /**
- * Cart Subtotal Fragments
- * Ensure cart subtotal amount update when products are added to the cart via AJAX
- *
- * @param array $fragments Fragments to refresh via AJAX.
- * @return array Fragments to refresh via AJAX
- */
- function varia_cart_subtotal_fragment( $fragments ) {
- ob_start();
- echo '<span class="woocommerce-cart-subtotal">' . wp_kses_post( WC()->cart->get_cart_subtotal() ) . '</span>';
- $fragments['.woocommerce-cart-subtotal'] = ob_get_clean();
- return $fragments;
- }
- }
- if ( ! function_exists( 'varia_cart_count_fragment' ) ) {
- /**
- * Cart Count Fragments
- * Ensure cart item count update when products are added to the cart via AJAX
- *
- * @param array $fragments Fragments to refresh via AJAX.
- * @return array Fragments to refresh via AJAX
- */
- function varia_cart_count_fragment( $fragments ) {
- ob_start();
- echo '<small class="woocommerce-cart-count">' . wp_kses_data( sprintf( _n( '%d item', '%d items', WC()->cart->get_cart_contents_count(), 'varia' ), WC()->cart->get_cart_contents_count() ) ) . '</small>';
- $fragments['.woocommerce-cart-count'] = ob_get_clean();
- return $fragments;
- }
- }
- /**
- * Setup cart widget for mini-cart dropdown
- */
- if ( ! function_exists( 'varia_cart_widget' ) ) {
- /**
- * Cart Items List
- * Ensure cart contents update when products are added to the cart via AJAX
- *
- * @param array $fragments Fragments to refresh via AJAX.
- * @return array Fragments to refresh via AJAX
- */
- function varia_cart_widget() {
- ob_start();
- the_widget( 'WC_Widget_Cart', 'title=' );
- $widget_output = ob_get_contents();
- ob_end_clean();
- return $widget_output;
- }
- }
- /**
- * Add cart fragment filters
- *
- * @see varia_cart_subtotal_fragment() and varia_cart_count_fragment()
- */
- if ( defined( 'WC_VERSION' ) && version_compare( WC_VERSION, '2.3', '>=' ) ) {
- add_filter( 'woocommerce_add_to_cart_fragments', 'varia_cart_subtotal_fragment', 10, 1 );
- add_filter( 'woocommerce_add_to_cart_fragments', 'varia_cart_count_fragment', 10, 1 );
- } else {
- add_filter( 'add_to_cart_fragments', 'varia_cart_subtotal_fragment' );
- add_filter( 'add_to_cart_fragments', 'varia_cart_count_fragment' );
- }
- /**
- * Add WooCommerce mini-cart link to primary menu
- */
- function varia_add_cart_menu( $nav, $args ) {
- if ( $args->theme_location == 'menu-1' ) {
- update_option( 'varia_cart_icon', true );
- if ( empty( $nav ) ) {
- update_option( 'varia_cart_icon', false );
- }
-
- $has_cart_icon = get_option( 'varia_cart_icon' );
-
- if ( $has_cart_icon && ! empty( $nav ) ) {
- return sprintf(
- '%1$s
- </ul></div>
- <input type="checkbox" role="button" aria-haspopup="true" id="woocommerce-toggle" class="hide-visually">
- <label for="woocommerce-toggle" id="toggle-cart" class="button">%2$s %3$s
- <span class="dropdown-icon open">+</span>
- <span class="dropdown-icon close">×</span>
- <span class="hide-visually expanded-text">%4$s</span>
- <span class="hide-visually collapsed-text">%5$s</span>
- </label>
- <div class="woocommerce-menu-container">
- <ul id="woocommerce-menu" class="main-menu" aria-label="submenu">
- <li class="menu-item woocommerce-menu-item %10$s" title="%6$s">
- %8$s
- <ul class="sub-menu">
- <li class="woocommerce-cart-widget" title="%7$s">
- %9$s
- </li>
- </ul>
- </li>',
- $nav,
- varia_get_icon_svg( 'shopping_cart', 16 ),
- esc_html__( 'Cart', 'varia' ),
- esc_html__( 'expanded', 'varia' ),
- esc_html__( 'collapsed', 'varia' ),
- esc_attr__( 'View your shopping cart', 'varia' ),
- esc_attr__( 'View your shopping list', 'varia' ),
- varia_cart_link(),
- varia_cart_widget(),
- is_cart() ? 'current-menu-item' : ''
- );
- }
- }
- // Our primary menu isn't set, return the regular nav
- return $nav;
- }
- add_filter( 'wp_nav_menu_items', 'varia_add_cart_menu', 10, 2 );
|