• Skip to primary navigation
  • Skip to main content
  • Skip to primary sidebar

WP Bitz

A curated collection of code snippets for WordPress

  • Home
  • About
  • Blog
  • Code Snippets
You are here: Home / Code Snippets / Shortcode to display list of categories

Shortcode to display list of categories

June 18, 2020

This post brought to you by RocketGeek, ButlerBlog, and the following:

 

/**
 * This creates the [my_cat_list] shortcode.
 * 
 * The shortcode will display a list of categories.
 * 
 * @link https://wpbitz.com/?post_type=code-snippets&p=118&preview=true
 * @see  https://wordpress.stackexchange.com/questions/182812/create-a-category-list-page/182813#182813
 */
add_shortcode( 'my_cat_list', 'my_list_categories_shortcode' );
function my_list_categories_shortcode( $atts, $content, $tag ) {
    /**
     * List of possible values for arguments.
     *
     * Shortcode attributes are always evaluated as strings. Make sure that
     * comma separated values are passed as strings, not arrays. For booleans,
     * you can pass string "true"|"false" values or 0|1 values and the function
     * will adjust it to a true boolean.
     *
     * The "echo" argument is always set as false. Shortcodes should never
     * echo their output - only return it.
     *
     * For more information on possible arguments, see the following:
     * @see https://developer.wordpress.org/reference/functions/wp_list_categories/
     * 
     * 'exclude'            (string)   Comma/space-separated string of term IDs to exclude. If $hierarchical is true, descendants of $exclude terms will also be excluded; see $exclude_tree. See get_terms().
     * 'exclude_tree'       (string)   Comma/space-separated string of term IDs to exclude, along with their descendants. See get_terms().
     * 'feed'               (string)   Text to use for the feed link. Default 'Feed for all posts filed under [cat name]'.
     * 'feed_image'         (string)   URL of an image to use for the feed link.
     * 'feed_type'          (string)   Feed type. Used to build feed link. See get_term_feed_link(). Default empty string (default feed).
     * 'separator'          (string)   Separator between links. Default <br />.
     * 'show_option_all'    (string)   Text to display for showing all categories.
     * 'show_option_none'   (string)   Text to display for the 'no categories' option. Default 'No categories'.
     * 'style'              (string)   The style used to display the categories list. If 'list', categories will be output as an unordered list. If left empty or another value, categories will be output separated by <br> tags. Default 'list'.
     * 'title_li'           (string)   Text to use for the list title <li> element. Pass an empty string to disable. Default 'Categories'.
     * 
     * 'current_category'   (int)      ID of category, or comma separated IDs of categories, that should get the 'current-cat' class. Default 0.
     * 'depth'              (int)      Category depth. Used for tab indentation. Default 0.
     * 
     * 'show_count'         (bool|int) Whether to include post counts. Accepts 0, 1, or their bool equivalents. Default 0.
     * 'use_desc_for_title' (bool|int) Whether to use the category description as the title attribute. Accepts 0, 1, or their bool equivalents. Default 1.
     * 'hide_title_if_empty'(bool)     Whether to hide the $title_li element if there are no terms in the list. Default false (title will always be shown).
     */
    
    $bool_fix = array( 'show_count', 'use_desc_for_title', 'hide_title_if_empty' );
    if ( is_array( $atts ) ) {
        foreach ( $atts as $key => $value ) {
            if ( in_array( $key, $bool_fix ) ) {
                $atts[ $key ] = ( 'true' == $value || 1 == $value ) ? true : false;
            }
            $args[ $key ] = $atts[ $key ];
        }
    }
    // 'echo' must always be false.
    $args['echo'] = false;
    
    return wp_list_categories( $args ); 
}

Chad Butler

Primary Sidebar

Join for free!

Get free code snippets, WordPress best practices, and practical Content Marketing advice from seasoned WordPress expert Chad Butler (butlerblog):

Recent Posts

  • Notice: Function WP_Block_Patterns_Registry::register was called incorrectly
  • Use WP-CLI to back up your site
  • Bitnami WordPress Autoptimize cannot write to the cache directory
  • Create and delete WordPress sites in XAMPP with a batch file
  • How to fix “Error: MySQL Shutdown Unexpectedly” in XAMPP control panel

Copyright © 2025 · Maker Pro on Genesis Framework · WordPress · Log in