0

I am new to get terms and wanted to know if someone can help me.

How can I get this to show my categories in order or id that I want?

I want to show a number of categories in a specific order from a drop down.

Thanks!

<div class="event_filter_item">
        <?php
            $categories = get_terms( 'event-category' );

            $dropdown_options = array(
                "theme" => "dropdown_base",
                "label" => "Events by Category",
                'orderby' => 'ID',
'include' => '155',
                "links" => true
            );
        ?>
        <label class="event_filter_label" for="event_filter_category">Events by Category</label>
        <select class="js-dropdown event_filter_select event_filter_category" id="event_filter_category" name="event_filter_category" data-dropdown-options="<?php my_json_attribute( $dropdown_options ); ?>">
            <option value="<?php my_page_link( 'calendar' ); ?>">All Categories</option>
            <?php
                foreach ( $categories as $category ) :
                    $link = get_term_link( $category->term_id );
                    $attr = ( strpos( $my_page_url, $link ) > -1 ) ? 'selected="selected"' : '';
            ?>
            <option value="<?php echo $link; ?>" <?php echo $attr; ?>><?php echo $category->name; ?></option>
            <?php
                endforeach;
            ?>
        </select>
    </div>
0

wp_dropdown_categories() will list by id by default. It utilizes get_terms() as well, and provides a hook to toward the end if you wish to filter the html of $output further than the parameters allow. (I've added the source below).

It has the following parameters:

  • 'show_option_all' (string) Text to display for showing all categories.
    • 'show_option_none' (string) Text to display for showing no categories.
    • 'option_none_value' (string) Value to use when no category is selected.
    • 'orderby' (string) Which column to use for ordering categories. See get_terms() for a list of accepted values. Default 'id' (term_id).
    • 'order' (string) Whether to order terms in ascending or descending order. Accepts 'ASC' or 'DESC'. Default 'ASC'.
    • 'pad_counts' (bool) See get_terms() for an argument description. Default false.
    • 'show_count' (bool|int) Whether to include post counts. Accepts 0, 1, or their bool equivalents. Default 0.
    • 'hide_empty' (bool|int) Whether to hide categories that don't have any posts. Accepts 0, 1, or their bool equivalents. Default 1.
    • 'child_of' (int) Term ID to retrieve child terms of. See get_terms(). Default 0.
    • 'exclude' (array|string) Array or comma/space-separated string of term ids to exclude. If $include is non-empty, $exclude is ignored. Default empty array.
    • 'echo' (bool|int) Whether to echo or return the generated markup. Accepts 0, 1, or their bool equivalents. Default 1.
    • 'hierarchical' (bool|int) Whether to traverse the taxonomy hierarchy. Accepts 0, 1, or their bool equivalents. Default 0.
    • 'depth' (int) Maximum depth. Default 0.
    • 'tab_index' (int) Tab index for the select element. Default 0 (no tabindex).
    • 'name' (string) Value for the 'name' attribute of the select element. Default 'cat'.
    • 'id' (string) Value for the 'id' attribute of the select element. Defaults to the value of $name.
    • 'class' (string) Value for the 'class' attribute of the select element. Default 'postform'.
    • 'selected' (int|string) Value of the option that should be selected. Default 0.
    • 'value_field' (string) Term field that should be used to populate the 'value' attribute of the option elements. Accepts any valid term field: 'term_id', 'name', 'slug', 'term_group', - 'term_taxonomy_id', 'taxonomy', 'description', 'parent', 'count'. Default 'term_id'.
    • 'taxonomy' (string|array) Name of the category or categories to retrieve. Default 'category'.
    • 'hide_if_empty' (bool) True to skip generating markup if no categories are found. Default false (create select element even if no categories are found).
    • 'required' (bool) Whether the element should have the HTML5 'required' attribute. Default false.

function wp_dropdown_categories( $args = '' ) {
    $defaults = array(
        'show_option_all'   => '',
        'show_option_none'  => '',
        'orderby'           => 'id',
        'order'             => 'ASC',
        'show_count'        => 0,
        'hide_empty'        => 1,
        'child_of'          => 0,
        'exclude'           => '',
        'echo'              => 1,
        'selected'          => 0,
        'hierarchical'      => 0,
        'name'              => 'cat',
        'id'                => '',
        'class'             => 'postform',
        'depth'             => 0,
        'tab_index'         => 0,
        'taxonomy'          => 'category',
        'hide_if_empty'     => false,
        'option_none_value' => -1,
        'value_field'       => 'term_id',
        'required'          => false,
    );

    $defaults['selected'] = ( is_category() ) ? get_query_var( 'cat' ) : 0;

    // Back compat.
    if ( isset( $args['type'] ) && 'link' == $args['type'] ) {
        _deprecated_argument( __FUNCTION__, '3.0.0',
            /* translators: 1: "type => link", 2: "taxonomy => link_category" */
            sprintf( __( '%1$s is deprecated. Use %2$s instead.' ),
                '<code>type => link</code>',
                '<code>taxonomy => link_category</code>'
            )
        );
        $args['taxonomy'] = 'link_category';
    }

    $r = wp_parse_args( $args, $defaults );
    $option_none_value = $r['option_none_value'];

    if ( ! isset( $r['pad_counts'] ) && $r['show_count'] && $r['hierarchical'] ) {
        $r['pad_counts'] = true;
    }

    $tab_index = $r['tab_index'];

    $tab_index_attribute = '';
    if ( (int) $tab_index > 0 ) {
        $tab_index_attribute = " tabindex=\"$tab_index\"";
    }

    // Avoid clashes with the 'name' param of get_terms().
    $get_terms_args = $r;
    unset( $get_terms_args['name'] );
    $categories = get_terms( $r['taxonomy'], $get_terms_args );

    $name = esc_attr( $r['name'] );
    $class = esc_attr( $r['class'] );
    $id = $r['id'] ? esc_attr( $r['id'] ) : $name;
    $required = $r['required'] ? 'required' : '';

    if ( ! $r['hide_if_empty'] || ! empty( $categories ) ) {
        $output = "<select $required name='$name' id='$id' class='$class' $tab_index_attribute>\n";
    } else {
        $output = '';
    }
    if ( empty( $categories ) && ! $r['hide_if_empty'] && ! empty( $r['show_option_none'] ) ) {

        /**
         * Filters a taxonomy drop-down display element.
         *
         * A variety of taxonomy drop-down display elements can be modified
         * just prior to display via this filter. Filterable arguments include
         * 'show_option_none', 'show_option_all', and various forms of the
         * term name.
         *
         * @since 1.2.0
         *
         * @see wp_dropdown_categories()
         *
         * @param string $element Taxonomy element to list.
         */
        $show_option_none = apply_filters( 'list_cats', $r['show_option_none'] );
        $output .= "\t<option value='" . esc_attr( $option_none_value ) . "' selected='selected'>$show_option_none</option>\n";
    }

    if ( ! empty( $categories ) ) {

        if ( $r['show_option_all'] ) {

            /** This filter is documented in wp-includes/category-template.php */
            $show_option_all = apply_filters( 'list_cats', $r['show_option_all'] );
            $selected = ( '0' === strval($r['selected']) ) ? " selected='selected'" : '';
            $output .= "\t<option value='0'$selected>$show_option_all</option>\n";
        }

        if ( $r['show_option_none'] ) {

            /** This filter is documented in wp-includes/category-template.php */
            $show_option_none = apply_filters( 'list_cats', $r['show_option_none'] );
            $selected = selected( $option_none_value, $r['selected'], false );
            $output .= "\t<option value='" . esc_attr( $option_none_value ) . "'$selected>$show_option_none</option>\n";
        }

        if ( $r['hierarchical'] ) {
            $depth = $r['depth'];  // Walk the full depth.
        } else {
            $depth = -1; // Flat.
        }
        $output .= walk_category_dropdown_tree( $categories, $depth, $r );
    }

    if ( ! $r['hide_if_empty'] || ! empty( $categories ) ) {
        $output .= "</select>\n";
    }
    /**
     * Filters the taxonomy drop-down output.
     *
     * @since 2.1.0
     *
     * @param string $output HTML output.
     * @param array  $r      Arguments used to build the drop-down.
     */
    $output = apply_filters( 'wp_dropdown_cats', $output, $r );

    if ( $r['echo'] ) {
        echo $output;
    }
    return $output;
}

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.