Forum Replies Created

Viewing 3 replies - 1 through 3 (of 3 total)
  • Thread Starter beenker

    (@beenker)

    If someone wants to know how i did it:

    past this in function.php of your theme:

    /**
    	 * List all (or limited) product categories.
    	 *
    	 * @param array $atts
    	 * @return string
    	 */
    	function rand_product_categories( $atts ) {
    		global $woocommerce_loop;
    
    		$atts = shortcode_atts( array(
    			'number'     => null,
    			'orderby'    => 'name',
    			'order'      => 'ASC',
    			'columns'    => '4',
    			'hide_empty' => 1,
    			'parent'     => '',
    			'ids'        => ''
    		), $atts );
    
    		if ( isset( $atts['ids'] ) ) {
    			$ids = explode( ',', $atts['ids'] );
    			$ids = array_map( 'trim', $ids );
    		} else {
    			$ids = array();
    		}
    
    		$hide_empty = ( $atts['hide_empty'] == true || $atts['hide_empty'] == 1 ) ? 1 : 0;
    
    		// get terms and workaround WP bug with parents/pad counts
    		$args = array(
    			'orderby'    => $atts['orderby'],
    			'order'      => $atts['order'],
    			'hide_empty' => $hide_empty,
    			'include'    => $ids,
    			'pad_counts' => true,
    			'child_of'   => $atts['parent']
    		);
    
    		$rand_product_categories = get_terms( 'product_cat', $args );
    
    		if ( '' !== $atts['parent'] ) {
    			$rand_product_categories = wp_list_filter( $rand_product_categories, array( 'parent' => $atts['parent'] ) );
    		}
    
    		if ( $hide_empty ) {
    			foreach ( $rand_product_categories as $key => $category ) {
    				if ( $category->count == 0 ) {
    					unset( $rand_product_categories[ $key ] );
    				}
    			}
    		}
    
    		if ( $atts['number'] ) {
    			$rand_product_categories = array_slice( $rand_product_categories, 0, $atts['number'] );
    		}
    
    		$columns = absint( $atts['columns'] );
    		$woocommerce_loop['columns'] = $columns;
    
    		ob_start();
    
    		// Reset loop/columns globals when starting a new loop
    		$woocommerce_loop['loop'] = $woocommerce_loop['column'] = '';
    
    		if ( shuffle($rand_product_categories) ) {
    			woocommerce_product_loop_start();
    
    			foreach ( $rand_product_categories as $category ) {
    				wc_get_template( 'content-product_cat.php', array(
    					'category' => $category
    				) );
    			}
    
    			woocommerce_product_loop_end();
    		}
    
    		woocommerce_reset_loop();
    
    		return '<div class="woocommerce columns-' . $columns . '">' . ob_get_clean() . '</div>';
    	}
    	add_shortcode( 'rand_prod_cat', 'rand_product_categories' );
    	?>

    your new shuffeld categories shortcode is:
    [rand_prod_cat number="4" parent="0"]

    Thread Starter beenker

    (@beenker)

    Is there any possibility to randomize displayed categories?

    Thread Starter beenker

    (@beenker)

    Thanks for your fast reply, then this is a bit confusing.
    Aren’t you telling me there i can use rand with ‘orderby’?

    Sorting Products by Custom Meta Fields

    In many shortcodes like:

    [recent_products]
    [featured_products]
    [products]
    [product_category]
    [sale_products]
    [top_rated_products]
    [product_attribute]
    [related_products]

    you can choose to order products by the following values

    • menu_order
    • title
    • date
    • rand
    • id

    using the “orderby” attribute, for example:

    [products skus=”foo, bar, baz” orderby=”date” order=”desc”].

    https://docs.woothemes.com/document/woocommerce-shortcodes/

    Is there any possibility to randomize my categories?

Viewing 3 replies - 1 through 3 (of 3 total)