Used to loop through faceted menus for a product category.

shopp('collection', 'facet-menus', 'options')

@param string $object the object or object.tag combination, if object.tag is used, the tag parameter can be omitted
@param string $tag the tag, can be hyphenated or not. Prefix with 'get' as shorthand for the return=true option
@param mixed $options associative array, or url-style name=value pairs separated by ampersands (&). Each pair is passed to the theme api tag as an option.
@returns boolean true while looping through category facets, false when at the end of the loop.

Alternative Forms

shopp('collection.facet-menus', 'options');


Used to loop through faceted menus for a product category.

It is good practice to check to see if the current collection is a ProductCategory and that it has faceted menus enabled when looping through the faceted menus.

Universal Options

All Theme API calls have these options.

  • return: when set to true, 1, or on, this option forces the tag to return the value instead of displaying/echoing the value to the page. Alternatively, prefix the tag parameter with get to get the same effect. All theme api tags that return a boolean value will return by default.
  • echo: when set to false, 0, or off, this option forces the tag to display the value to the page. This is the default for all non-boolean tags.
  • is: when set to true, 1, or on, this option will evaluate the return of the theme api call as a boolean true or false value. See how values are converted to boolean.




while ( shopp('collection.facet-menus') ) {}

Check the collection type and that faceted menus are enabled.

<?php if ( is_a(ShoppCollection(),'ProductCategory') && shopp('collection.has-faceted-menu') ) : 
    while ( shopp('collection.facet-menus') ) {}
endif; ?>

Loop through menus and check if the current menu has any filter options

<?php if ( is_a(ShoppCollection(),'ProductCategory') && shopp('collection.has-faceted-menu') ) : 
    // the facet menus loop
    while ( shopp('collection.facet-menus') ) :
        if ( shopp('collection.facet-menu-has-options') ) :
            // loop through faceted menu filter options for this facet
            while ( shopp('collection.facet-options') ) {}
    endwhile; // end facet menus loop
endif; ?>

Loop through menus and display toggle links

<?php if ( is_a(ShoppCollection(),'ProductCategory') && shopp('collection.has-faceted-menu') ) : ?>

<ul class="faceted-menu">
        // Loop through faceted menus
        while(shopp('collection.facet-menus')) :

        // Skip active filters and menus with no options
        if ( shopp('collection.facet-filtered') ) continue;
        if ( ! shopp('collection.facet-menu-has-options')) continue;
        // current facet filter name
        shopp('collection.facet-name'); ?></h4>
        <ul class="facet-option <?php
            // current facet filter slug
            shopp('collection.facet-slug'); ?>">
            // Loop through filter options for this faceted menu
            while(shopp('collection.facet-options')) : ?>
                    <a href="<?php
                        // toggle url for current filter option
                        esc_url(shopp('collection.facet-option-link')); ?>"><?php
                        // the full label of the facet filter option
                        shopp('collection.facet-option-label'); ?></a>&nbsp;
                    <span class="count"><?php
                    // the number of products sharing this facet
                    shopp('collection.facet-option-count'); ?></span>
            <?php endwhile; ?>
    <?php endwhile; ?>

<?php endif; ?>

See Also

You must be logged in to post a comment.

© Ingenesis Limited. Shopp™ is a registered trademark of Ingenesis Limited.