Title: Walker_Category_Checklist
Published: April 25, 2014
Last modified: April 28, 2025

---

# class Walker_Category_Checklist {}

## In this article

 * [Description](https://developer.wordpress.org/reference/classes/walker_category_checklist/?output_format=md#description)
    - [See also](https://developer.wordpress.org/reference/classes/walker_category_checklist/?output_format=md#see-also)
 * [Methods](https://developer.wordpress.org/reference/classes/walker_category_checklist/?output_format=md#methods)
 * [Source](https://developer.wordpress.org/reference/classes/walker_category_checklist/?output_format=md#source)
 * [Related](https://developer.wordpress.org/reference/classes/walker_category_checklist/?output_format=md#related)
 * [Changelog](https://developer.wordpress.org/reference/classes/walker_category_checklist/?output_format=md#changelog)

[ Back to top](https://developer.wordpress.org/reference/classes/walker_category_checklist/?output_format=md#wp--skip-link--target)

Core walker class to output an unordered list of category checkbox input elements.

## 󠀁[Description](https://developer.wordpress.org/reference/classes/walker_category_checklist/?output_format=md#description)󠁿

### 󠀁[See also](https://developer.wordpress.org/reference/classes/walker_category_checklist/?output_format=md#see-also)󠁿

 * [Walker](https://developer.wordpress.org/reference/classes/walker/)
 * [wp_category_checklist()](https://developer.wordpress.org/reference/functions/wp_category_checklist/)
 * [wp_terms_checklist()](https://developer.wordpress.org/reference/functions/wp_terms_checklist/)

## 󠀁[Methods](https://developer.wordpress.org/reference/classes/walker_category_checklist/?output_format=md#methods)󠁿

| Name | Description | 
| [Walker_Category_Checklist::end_el](https://developer.wordpress.org/reference/classes/walker_category_checklist/end_el/) | Ends the element output, if needed. | 
| [Walker_Category_Checklist::end_lvl](https://developer.wordpress.org/reference/classes/walker_category_checklist/end_lvl/) | Ends the list of after the elements are added. | 
| [Walker_Category_Checklist::start_el](https://developer.wordpress.org/reference/classes/walker_category_checklist/start_el/) | Start the element output. | 
| [Walker_Category_Checklist::start_lvl](https://developer.wordpress.org/reference/classes/walker_category_checklist/start_lvl/) | Starts the list before the elements are added. |

## 󠀁[Source](https://developer.wordpress.org/reference/classes/walker_category_checklist/?output_format=md#source)󠁿

    ```php
    class Walker_Category_Checklist extends Walker {
    	public $tree_type = 'category';
    	public $db_fields = array(
    		'parent' => 'parent',
    		'id'     => 'term_id',
    	); // TODO: Decouple this.

    	/**
    	 * Starts the list before the elements are added.
    	 *
    	 * @see Walker:start_lvl()
    	 *
    	 * @since 2.5.1
    	 *
    	 * @param string $output Used to append additional content (passed by reference).
    	 * @param int    $depth  Depth of category. Used for tab indentation.
    	 * @param array  $args   An array of arguments. See wp_terms_checklist().
    	 */
    	public function start_lvl( &$output, $depth = 0, $args = array() ) {
    		$indent  = str_repeat( "\t", $depth );
    		$output .= "$indent<ul class='children'>\n";
    	}

    	/**
    	 * Ends the list of after the elements are added.
    	 *
    	 * @see Walker::end_lvl()
    	 *
    	 * @since 2.5.1
    	 *
    	 * @param string $output Used to append additional content (passed by reference).
    	 * @param int    $depth  Depth of category. Used for tab indentation.
    	 * @param array  $args   An array of arguments. See wp_terms_checklist().
    	 */
    	public function end_lvl( &$output, $depth = 0, $args = array() ) {
    		$indent  = str_repeat( "\t", $depth );
    		$output .= "$indent</ul>\n";
    	}

    	/**
    	 * Start the element output.
    	 *
    	 * @see Walker::start_el()
    	 *
    	 * @since 2.5.1
    	 * @since 5.9.0 Renamed `$category` to `$data_object` and `$id` to `$current_object_id`
    	 *              to match parent class for PHP 8 named parameter support.
    	 *
    	 * @param string  $output            Used to append additional content (passed by reference).
    	 * @param WP_Term $data_object       The current term object.
    	 * @param int     $depth             Depth of the term in reference to parents. Default 0.
    	 * @param array   $args              An array of arguments. See wp_terms_checklist().
    	 * @param int     $current_object_id Optional. ID of the current term. Default 0.
    	 */
    	public function start_el( &$output, $data_object, $depth = 0, $args = array(), $current_object_id = 0 ) {
    		// Restores the more descriptive, specific name for use within this method.
    		$category = $data_object;

    		if ( empty( $args['taxonomy'] ) ) {
    			$taxonomy = 'category';
    		} else {
    			$taxonomy = $args['taxonomy'];
    		}

    		if ( 'category' === $taxonomy ) {
    			$name = 'post_category';
    		} else {
    			$name = 'tax_input[' . $taxonomy . ']';
    		}

    		$args['popular_cats'] = ! empty( $args['popular_cats'] ) ? array_map( 'intval', $args['popular_cats'] ) : array();

    		$class = in_array( $category->term_id, $args['popular_cats'], true ) ? ' class="popular-category"' : '';

    		$args['selected_cats'] = ! empty( $args['selected_cats'] ) ? array_map( 'intval', $args['selected_cats'] ) : array();

    		if ( ! empty( $args['list_only'] ) ) {
    			$aria_checked = 'false';
    			$inner_class  = 'category';

    			if ( in_array( $category->term_id, $args['selected_cats'], true ) ) {
    				$inner_class .= ' selected';
    				$aria_checked = 'true';
    			}

    			$output .= "\n" . '<li' . $class . '>' .
    				'<div class="' . $inner_class . '" data-term-id=' . $category->term_id .
    				' tabindex="0" role="checkbox" aria-checked="' . $aria_checked . '">' .
    				/** This filter is documented in wp-includes/category-template.php */
    				esc_html( apply_filters( 'the_category', $category->name, '', '' ) ) . '</div>';
    		} else {
    			$is_selected         = in_array( $category->term_id, $args['selected_cats'], true );
    			$is_disabled         = ! empty( $args['disabled'] );
    			$li_element_id       = wp_unique_prefixed_id( "in-{$taxonomy}-{$category->term_id}-" );
    			$checkbox_element_id = wp_unique_prefixed_id( "in-{$taxonomy}-{$category->term_id}-" );

    			$output .= "\n<li id='" . esc_attr( $li_element_id ) . "'$class>" .
    				'<label class="selectit"><input value="' . $category->term_id . '" type="checkbox" name="' . $name . '[]" id="' . esc_attr( $checkbox_element_id ) . '"' .
    				checked( $is_selected, true, false ) .
    				disabled( $is_disabled, true, false ) . ' /> ' .
    				/** This filter is documented in wp-includes/category-template.php */
    				esc_html( apply_filters( 'the_category', $category->name, '', '' ) ) . '</label>';
    		}
    	}

    	/**
    	 * Ends the element output, if needed.
    	 *
    	 * @see Walker::end_el()
    	 *
    	 * @since 2.5.1
    	 * @since 5.9.0 Renamed `$category` to `$data_object` to match parent class for PHP 8 named parameter support.
    	 *
    	 * @param string  $output      Used to append additional content (passed by reference).
    	 * @param WP_Term $data_object The current term object.
    	 * @param int     $depth       Depth of the term in reference to parents. Default 0.
    	 * @param array   $args        An array of arguments. See wp_terms_checklist().
    	 */
    	public function end_el( &$output, $data_object, $depth = 0, $args = array() ) {
    		$output .= "</li>\n";
    	}
    }
    ```

[View all references](https://developer.wordpress.org/reference/files/wp-admin/includes/class-walker-category-checklist.php/)
[View on Trac](https://core.trac.wordpress.org/browser/tags/6.9.4/src/wp-admin/includes/class-walker-category-checklist.php#L19)
[View on GitHub](https://github.com/WordPress/wordpress-develop/blob/6.9.4/src/wp-admin/includes/class-walker-category-checklist.php#L19-L140)

## 󠀁[Related](https://developer.wordpress.org/reference/classes/walker_category_checklist/?output_format=md#related)󠁿

| Uses | Description | 
| [Walker](https://developer.wordpress.org/reference/classes/walker/)`wp-includes/class-wp-walker.php` |

A class for displaying various tree-like structures.

  |

## 󠀁[Changelog](https://developer.wordpress.org/reference/classes/walker_category_checklist/?output_format=md#changelog)󠁿

| Version | Description | 
| [2.5.1](https://developer.wordpress.org/reference/since/2.5.1/) | Introduced. |

## User Contributed Notes

You must [log in](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fclasses%2Fwalker_category_checklist%2F)
before being able to contribute a note or feedback.