wp_terms_checklist() – Output an unordered list of checkbox input elements labelled with term names.

You appear to be a bot. Output may be restricted

Description

Outputs an unordered list of checkbox input elements labelled with term names.

Taxonomy-independent version of wp_category_checklist().

Usage

$string = wp_terms_checklist( $post_id, $args );

Parameters

$post_id
( int ) optional – Optional. Post ID. Default 0.
$args
( array|string ) optional – { Optional. Array or string of arguments for generating a terms checklist. Default empty array.
$descendants_and_self
( int ) optional – ID of the category to output along with its descendants. Default 0.
$selected_cats
( int[] ) optional – Array of category IDs to mark as checked. Default false.
$popular_cats
( int[] ) optional – Array of category IDs to receive the "popular-category" class. Default false.
$walker
( Walker ) optional – Walker object to use to build the output. Default empty which results in a Walker_Category_Checklist instance being used.
$taxonomy
( string ) optional – Taxonomy to generate the checklist for. Default 'category'.
$checked_ontop
( bool ) optional – Whether to move checked items out of the hierarchy and to the top of the list. Default true.
$echo
( bool ) optional – Whether to echo the generated markup. False to return the markup instead of echoing it. Default true. }

Returns

string HTML list of input elements.

Source

File name: wordpress/wp-admin/includes/template.php
Lines:

1 to 100 of 111
function wp_terms_checklist( $post_id = 0, $args = array() ) {
  $defaults = array(
    'descendants_and_self' => 0,
    'selected_cats'        => false,
    'popular_cats'         => false,
    'walker'               => null,
    'taxonomy'             => 'category',
    'checked_ontop'        => true,
    'echo'                 => true,
  );

  
/**
 * Filters the taxonomy terms checklist arguments.
 *
 * @since 3.4.0
 *
 * @see wp_terms_checklist()
 *
 * @param array|string $args    An array or string of arguments.
 * @param int          $post_id The post ID.
 */
  $params = apply_filters( 'wp_terms_checklist_args', $args, $post_id );

  $parsed_args = wp_parse_args( $params, $defaults );

  if ( empty( $parsed_args['walker'] ) || ! ( $parsed_args['walker'] instanceof Walker ) ) {
    $walker = new Walker_Category_Checklist;
  } else {
    $walker = $parsed_args['walker'];
  }

  $taxonomy             = $parsed_args['taxonomy'];
  $descendants_and_self = (int) $parsed_args['descendants_and_self'];

  $args = array( 'taxonomy' => $taxonomy );

  $tax              = get_taxonomy( $taxonomy );
  $args['disabled'] = ! current_user_can( $tax->cap->assign_terms );

  $args['list_only'] = ! empty( $parsed_args['list_only'] );

  if ( is_array( $parsed_args['selected_cats'] ) ) {
    $args['selected_cats'] = array_map( 'intval', $parsed_args['selected_cats'] );
  } elseif ( $post_id ) {
    $args['selected_cats'] = wp_get_object_terms( $post_id, $taxonomy, array_merge( $args, array( 'fields' => 'ids' ) ) );
  } else {
    $args['selected_cats'] = array();
  }

  if ( is_array( $parsed_args['popular_cats'] ) ) {
    $args['popular_cats'] = array_map( 'intval', $parsed_args['popular_cats'] );
  } else {
    $args['popular_cats'] = get_terms(
      array(
        'taxonomy'     => $taxonomy,
        'fields'       => 'ids',
        'orderby'      => 'count',
        'order'        => 'DESC',
        'number'       => 10,
        'hierarchical' => false,
      )
    );
  }

  if ( $descendants_and_self ) {
    $categories = (array) get_terms(
      array(
        'taxonomy'     => $taxonomy,
        'child_of'     => $descendants_and_self,
        'hierarchical' => 0,
        'hide_empty'   => 0,
      )
    );
    $self       = get_term( $descendants_and_self, $taxonomy );
    array_unshift( $categories, $self );
  } else {
    $categories = (array) get_terms(
      array(
        'taxonomy' => $taxonomy,
        'get'      => 'all',
      )
    );
  }

  $output = '';

  if ( $parsed_args['checked_ontop'] ) {
    // Post-process $categories rather than adding an exclude to the get_terms() query
    // to keep the query the same across all posts (for any query cache).
    $checked_categories = array();
    $keys               = array_keys( $categories );

    foreach ( $keys as $k ) {
      if ( in_array( $categories[ $k ]->term_id, $args['selected_cats'], true ) ) {
        $checked_categories[] = $categories[ $k ];
        unset( $categories[ $k ] );
      }
    }

    // Put checked categories on top.
 

 View on GitHub View on Trac