ソースを参照

Radcliffe 2: Fixes Jetpack Infinite Scroll WC issues.

Jeffrey Pearce 7 年 前
コミット
c16280b361
3 ファイル変更55 行追加6 行削除
  1. 12 1
      radcliffe-2/inc/jetpack.php
  2. 41 3
      radcliffe-2/inc/woocommerce.php
  3. 2 2
      radcliffe-2/woocommerce.css

+ 12 - 1
radcliffe-2/inc/jetpack.php

@@ -19,7 +19,7 @@ function radcliffe_2_jetpack_setup() {
 		'container'      => 'main',
 		'render'         => 'radcliffe_2_infinite_scroll_render',
 		'footer'         => 'page',
-		'wrapper'        => false,
+		'wrapper'         => false,
 		'footer_widgets' => array( 'sidebar-1', 'sidebar-2', 'sidebar-3' ),
 	) );
 
@@ -56,14 +56,25 @@ add_action( 'after_setup_theme', 'radcliffe_2_jetpack_setup' );
  * Custom render function for Infinite Scroll.
  */
 function radcliffe_2_infinite_scroll_render() {
+	if ( class_exists( 'WooCommerce' ) && ( is_shop() || is_product_taxonomy() || is_product_category() || is_product_tag() ) ) {
+		radcliffe_2_woocommerce_product_columns_wrapper();
+		woocommerce_product_loop_start();
+	}
 	while ( have_posts() ) {
 		the_post();
 		if ( is_search() ) :
 			get_template_part( 'template-parts/content', 'search' );
+		elseif ( class_exists( 'WooCommerce' ) && ( is_shop() || is_product_taxonomy() || is_product_category() || is_product_tag() ) ) :
+			wc_get_template_part( 'content', 'product' );
 		else :
 			get_template_part( 'template-parts/content', get_post_format() );
 		endif;
 	}
+
+	if ( class_exists( 'WooCommerce' ) && ( is_shop() || is_product_taxonomy() || is_product_category() || is_product_tag() ) ) {
+		woocommerce_product_loop_end();
+		radcliffe_2_woocommerce_product_columns_wrapper_close();
+	}
 }
 
 /**

+ 41 - 3
radcliffe-2/inc/woocommerce.php

@@ -72,9 +72,9 @@ add_filter( 'body_class', 'radcliffe_2_woocommerce_active_body_class' );
 function radcliffe_2_woocommerce_products_per_page() {
 	return absint( apply_filters( 'radcliffe_2_woocommerce_products_per_page', 12 ) );
 }
-
-add_filter( 'loop_shop_per_page', 'radcliffe_2_woocommerce_products_per_page' );
-
+if ( defined( 'WC_VERSION' ) && version_compare( WC_VERSION, '3.3', '<' ) ) {
+	add_filter( 'loop_shop_per_page', 'radcliffe_2_woocommerce_products_per_page' );
+}
 /**
  * Product gallery thumnbail columns
  *
@@ -285,3 +285,41 @@ remove_action( 'woocommerce_before_main_content', 'woocommerce_breadcrumb', 20 )
  * let's add the breadcrumbs before that, at priority 5
  */
 add_action( 'woocommerce_before_shop_loop', 'woocommerce_breadcrumb', 5 );
+
+/**
+ * Override number of products per page in Jetpack infinite scroll.
+ *
+ * @param  array $args infinite scroll args.
+ * @return array       infinite scroll args.
+ */
+function radcliffe_2_woocommerce_jetpack_products_per_page( $args ) {
+	if ( is_array( $args ) && ( radcliffe_2_woocommerce_is_shop_page() || is_product_taxonomy() || is_product_category() || is_product_tag() ) ) {
+		$args['posts_per_page'] = radcliffe_2_woocommerce_products_per_page();
+	}
+
+	return $args;
+}
+add_filter( 'infinite_scroll_settings', 'radcliffe_2_woocommerce_jetpack_products_per_page' );
+
+/**
+ * Workaround to prevent is_shop() from failing due to WordPress core issue
+ *
+ * @link https://core.trac.wordpress.org/ticket/21790
+ * @param  array $args infinite scroll args.
+ * @return array       infinite scroll args.
+ */
+function radcliffe_2_woocommerce_is_shop_page() {
+	global $wp_query;
+
+	$front_page_id        = get_option( 'page_on_front' );
+	$current_page_id      = $wp_query->get( 'page_id' );
+	$is_static_front_page = 'page' === get_option( 'show_on_front' );
+
+	if ( $is_static_front_page && $front_page_id === $current_page_id  ) {
+		$is_shop_page = ( $current_page_id === wc_get_page_id( 'shop' ) ) ? true : false;
+	} else {
+		$is_shop_page = is_shop();
+	}
+
+	return $is_shop_page;
+}

+ 2 - 2
radcliffe-2/woocommerce.css

@@ -298,8 +298,8 @@ ul.products li.product .button {
 	text-align: center;
 }
 
-.woocommerce-page #infinite-handle {
-	display: none;
+.infinite-scroll .woocommerce-pagination {
+    display: none;
 }
 
 @media screen and (min-width: 768px) {