wp_terms_checklist

Definition:
function wp_terms_checklist($post_id = 0, $args = array() {}

Taxonomy independent version of wp_category_checklist

Parameters

  • int $post_id
  • array $args

Source code

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

	);

	extract( wp_parse_args($args, $defaults), EXTR_SKIP );



	if ( empty($walker) || !is_a($walker, 'Walker') )

		$walker = new Walker_Category_Checklist;



	$descendants_and_self = (int) $descendants_and_self;



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



	$tax = get_taxonomy($taxonomy);

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



	if ( is_array( $selected_cats ) )

		$args['selected_cats'] = $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( $popular_cats ) )

		$args['popular_cats'] = $popular_cats;

	else

		$args['popular_cats'] = get_terms( $taxonomy, array( 'fields' => 'ids', 'orderby' => 'count', 'order' => 'DESC', 'number' => 10, 'hierarchical' => false ) );



	if ( $descendants_and_self ) {

		$categories = (array) get_terms($taxonomy, array( '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($taxonomy, array('get' => 'all'));

	}



	if ( $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'] ) ) {

				$checked_categories[] = $categories[$k];

				unset( $categories[$k] );

			}

		}



		// Put checked cats on top

		echo call_user_func_array(array(&$walker, 'walk'), array($checked_categories, 0, $args));

	}

	// Then the rest of them

	echo call_user_func_array(array(&$walker, 'walk'), array($categories, 0, $args));

}

4161

No comments yet... Be the first to leave a reply!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: