Rows and cols

This commit is contained in:
Mike Jolley 2017-11-09 12:37:14 +00:00
parent 52c4d21d18
commit 23aa0277d2
4 changed files with 36 additions and 4 deletions

View File

@ -148,6 +148,34 @@ class WC_Settings_Products extends WC_Settings_Page {
'desc_tip' => true, 'desc_tip' => true,
), ),
array(
'title' => __( 'Products per row', 'woocommerce' ),
'desc' => __( 'How many products should be shown per row?', 'woocommerce' ),
'id' => 'woocommerce_catalog_columns',
'default' => '3',
'type' => 'number',
'css' => 'width: 50px;',
'custom_attributes' => array(
'min' => 0,
'step' => 1,
),
'desc_tip' => true,
),
array(
'title' => __( 'Rows per page', 'woocommerce' ),
'desc' => __( 'How many rows of products should be shown per page?', 'woocommerce' ),
'id' => 'woocommerce_catalog_rows',
'default' => '4',
'type' => 'number',
'css' => 'width: 50px;',
'custom_attributes' => array(
'min' => 0,
'step' => 1,
),
'desc_tip' => true,
),
array( array(
'title' => __( 'Add to cart behaviour', 'woocommerce' ), 'title' => __( 'Add to cart behaviour', 'woocommerce' ),
'desc' => __( 'Redirect to the cart page after successful addition', 'woocommerce' ), 'desc' => __( 'Redirect to the cart page after successful addition', 'woocommerce' ),

View File

@ -375,10 +375,14 @@ class WC_Query {
// Query vars that affect posts shown. // Query vars that affect posts shown.
$q->set( 'meta_query', $this->get_meta_query( $q->get( 'meta_query' ), true ) ); $q->set( 'meta_query', $this->get_meta_query( $q->get( 'meta_query' ), true ) );
$q->set( 'tax_query', $this->get_tax_query( $q->get( 'tax_query' ), true ) ); $q->set( 'tax_query', $this->get_tax_query( $q->get( 'tax_query' ), true ) );
$q->set( 'posts_per_page', $q->get( 'posts_per_page' ) ? $q->get( 'posts_per_page' ) : apply_filters( 'loop_shop_per_page', get_option( 'posts_per_page' ) ) );
$q->set( 'wc_query', 'product_query' ); $q->set( 'wc_query', 'product_query' );
$q->set( 'post__in', array_unique( (array) apply_filters( 'loop_shop_post_in', array() ) ) ); $q->set( 'post__in', array_unique( (array) apply_filters( 'loop_shop_post_in', array() ) ) );
// Work out how many products to query.
$products_per_row = absint( apply_filters( 'loop_shop_columns', get_option( 'woocommerce_catalog_columns', 3 ) ) );
$rows = absint( get_option( 'woocommerce_catalog_rows', 4 ) );
$q->set( 'posts_per_page', $q->get( 'posts_per_page' ) ? $q->get( 'posts_per_page' ) : apply_filters( 'loop_shop_per_page', $products_per_row * $rows ) );
// Store reference to this query. // Store reference to this query.
self::$product_query = $q; self::$product_query = $q;

View File

@ -49,8 +49,8 @@ class WC_Template_Loader {
private static function get_current_shop_view_args() { private static function get_current_shop_view_args() {
return (object) array( return (object) array(
'page' => absint( max( 1, absint( get_query_var( 'paged' ) ) ) ), 'page' => absint( max( 1, absint( get_query_var( 'paged' ) ) ) ),
'columns' => 3, 'columns' => get_option( 'woocommerce_catalog_columns', 3 ),
'rows' => 3, 'rows' => get_option( 'woocommerce_catalog_rows', 4 ),
); );
} }

View File

@ -290,7 +290,7 @@ function wc_get_loop_class() {
global $woocommerce_loop; global $woocommerce_loop;
$woocommerce_loop['loop'] = ! empty( $woocommerce_loop['loop'] ) ? $woocommerce_loop['loop'] + 1 : 1; $woocommerce_loop['loop'] = ! empty( $woocommerce_loop['loop'] ) ? $woocommerce_loop['loop'] + 1 : 1;
$woocommerce_loop['columns'] = max( 1, ! empty( $woocommerce_loop['columns'] ) ? $woocommerce_loop['columns'] : apply_filters( 'loop_shop_columns', 4 ) ); $woocommerce_loop['columns'] = max( 1, ! empty( $woocommerce_loop['columns'] ) ? $woocommerce_loop['columns'] : absint( apply_filters( 'loop_shop_columns', get_option( 'woocommerce_catalog_columns', 3 ) ) ) );
if ( 0 === ( $woocommerce_loop['loop'] - 1 ) % $woocommerce_loop['columns'] || 1 === $woocommerce_loop['columns'] ) { if ( 0 === ( $woocommerce_loop['loop'] - 1 ) % $woocommerce_loop['columns'] || 1 === $woocommerce_loop['columns'] ) {
return 'first'; return 'first';