WC_Shortcodes::product_categories()public staticWC 1.0

List all (or limited) product categories.

Method of the class: WC_Shortcodes{}

Hooks from the method

Return

String.

Usage

$result = WC_Shortcodes::product_categories( $atts );
$atts(array) (required)
Attributes.

WC_Shortcodes::product_categories() code WC 8.6.1

public static function product_categories( $atts ) {
	if ( isset( $atts['number'] ) ) {
		$atts['limit'] = $atts['number'];
	}

	$atts = shortcode_atts(
		array(
			'limit'      => '-1',
			'orderby'    => 'name',
			'order'      => 'ASC',
			'columns'    => '4',
			'hide_empty' => 1,
			'parent'     => '',
			'ids'        => '',
		),
		$atts,
		'product_categories'
	);

	$ids        = array_filter( array_map( 'trim', explode( ',', $atts['ids'] ) ) );
	$hide_empty = ( true === $atts['hide_empty'] || 'true' === $atts['hide_empty'] || 1 === $atts['hide_empty'] || '1' === $atts['hide_empty'] ) ? 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'],
	);

	$product_categories = apply_filters(
		'woocommerce_product_categories',
		get_terms( 'product_cat', $args )
	);

	if ( '' !== $atts['parent'] ) {
		$product_categories = wp_list_filter(
			$product_categories,
			array(
				'parent' => $atts['parent'],
			)
		);
	}

	if ( $hide_empty ) {
		foreach ( $product_categories as $key => $category ) {
			if ( 0 === $category->count ) {
				unset( $product_categories[ $key ] );
			}
		}
	}

	$atts['limit'] = '-1' === $atts['limit'] ? null : intval( $atts['limit'] );
	if ( $atts['limit'] ) {
		$product_categories = array_slice( $product_categories, 0, $atts['limit'] );
	}

	$columns = absint( $atts['columns'] );

	wc_set_loop_prop( 'columns', $columns );
	wc_set_loop_prop( 'is_shortcode', true );

	ob_start();

	if ( $product_categories ) {
		woocommerce_product_loop_start();

		foreach ( $product_categories as $category ) {
			wc_get_template(
				'content-product_cat.php',
				array(
					'category' => $category,
				)
			);
		}

		woocommerce_product_loop_end();
	}

	wc_reset_loop();

	return '<div class="woocommerce columns-' . $columns . '">' . ob_get_clean() . '</div>';
}