diff options
Diffstat (limited to 'plugins/jetpack/3rd-party/woocommerce.php')
-rw-r--r-- | plugins/jetpack/3rd-party/woocommerce.php | 105 |
1 files changed, 105 insertions, 0 deletions
diff --git a/plugins/jetpack/3rd-party/woocommerce.php b/plugins/jetpack/3rd-party/woocommerce.php new file mode 100644 index 00000000..78a307b6 --- /dev/null +++ b/plugins/jetpack/3rd-party/woocommerce.php @@ -0,0 +1,105 @@ +<?php +/** + * This file contains compatibility functions for WooCommerce to improve Jetpack feature support. + */ +add_action( 'woocommerce_init', 'jetpack_woocommerce_integration' ); + +function jetpack_woocommerce_integration() { + /** + * Double check WooCommerce exists - unlikely to fail due to the hook being used but better safe than sorry. + */ + if ( ! class_exists( 'WooCommerce' ) ) { + return; + } + + add_action( 'woocommerce_share', 'jetpack_woocommerce_social_share_icons', 10 ); + + /** + * Wrap in function exists check since this requires WooCommerce 3.3+. + */ + if ( function_exists( 'wc_get_default_products_per_row' ) ) { + add_filter( 'infinite_scroll_render_callbacks', 'jetpack_woocommerce_infinite_scroll_render_callback', 10 ); + add_action( 'wp_enqueue_scripts', 'jetpack_woocommerce_infinite_scroll_style', 10 ); + } +} + +/* + * Make sure the social sharing icons show up under the product's short description + */ +function jetpack_woocommerce_social_share_icons() { + if ( function_exists( 'sharing_display' ) ) { + remove_filter( 'the_content', 'sharing_display', 19 ); + remove_filter( 'the_excerpt', 'sharing_display', 19 ); + echo sharing_display(); + } +} + +/** + * Remove sharing display from account, cart, and checkout pages in WooCommerce. + */ +function jetpack_woocommerce_remove_share() { + /** + * Double check WooCommerce exists - unlikely to fail due to the hook being used but better safe than sorry. + */ + if ( ! class_exists( 'WooCommerce' ) ) { + return; + } + + if ( is_cart() || is_checkout() || is_account_page() ) { + remove_filter( 'the_content', 'sharing_display', 19 ); + if ( class_exists( 'Jetpack_Likes' ) ) { + remove_filter( 'the_content', array( Jetpack_Likes::init(), 'post_likes' ), 30, 1 ); + } + } +} +add_action( 'loop_start', 'jetpack_woocommerce_remove_share' ); + +/** + * Add a callback for WooCommerce product rendering in infinite scroll. + * + * @param array $callbacks + * @return array + */ +function jetpack_woocommerce_infinite_scroll_render_callback( $callbacks ) { + $callbacks[] = 'jetpack_woocommerce_infinite_scroll_render'; + return $callbacks; +} + +/** + * Add a default renderer for WooCommerce products within infinite scroll. + */ +function jetpack_woocommerce_infinite_scroll_render() { + if ( ! is_shop() && ! is_product_taxonomy() && ! is_product_category() && ! is_product_tag() ) { + return; + } + + woocommerce_product_loop_start(); + + while ( have_posts() ) { + the_post(); + wc_get_template_part( 'content', 'product' ); + } + + woocommerce_product_loop_end(); +} + +/** + * Basic styling when infinite scroll is active only. + */ +function jetpack_woocommerce_infinite_scroll_style() { + $custom_css = " + .infinite-scroll .woocommerce-pagination { + display: none; + }"; + wp_add_inline_style( 'woocommerce-layout', $custom_css ); +} + +function jetpack_woocommerce_lazy_images_compat() { + wp_add_inline_script( 'wc-cart-fragments', " + jQuery( 'body' ).bind( 'wc_fragments_refreshed', function() { + jQuery( 'body' ).trigger( 'jetpack-lazy-images-load' ); + } ); + " ); +} + +add_action( 'wp_enqueue_scripts', 'jetpack_woocommerce_lazy_images_compat', 11 ); |