';
-
- return $output;
-}
-
-/**
- * Outputs the html checked attribute.
- *
- * Compares the first two arguments and if identical marks as checked
- *
- * @since 1.0
- *
- * @param any $checked One of the values to compare
- * @param any $current (true) The other value to compare if not just true
- * @param bool $echo Whether or not to echo or just return the string
- */
-function checked( $checked, $current = true, $echo = true) {
- return __checked_selected_helper( $checked, $current, $echo, 'checked' );
-}
-
-/**
- * Outputs the html selected attribute.
- *
- * Compares the first two arguments and if identical marks as selected
- *
- * @since 1.0
- *
- * @param any selected One of the values to compare
- * @param any $current (true) The other value to compare if not just true
- * @param bool $echo Whether or not to echo or just return the string
- */
-function selected( $selected, $current = true, $echo = true) {
- return __checked_selected_helper( $selected, $current, $echo, 'selected' );
-}
-
-/**
- * Private helper function for checked and selected.
- *
- * Compares the first two arguments and if identical marks as $type
- *
- * @since 2.8
- * @access private
- *
- * @param any $helper One of the values to compare
- * @param any $current (true) The other value to compare if not just true
- * @param bool $echo Whether or not to echo or just return the string
- * @param string $type The type of checked|selected we are doing.
- */
-function __checked_selected_helper( $helper, $current, $echo, $type) {
- if ( (string) $helper === (string) $current)
- $result = " $type='$type'";
- else
- $result = '';
-
- if ($echo)
- echo $result;
-
- return $result;
-}
-
//
// Category Checklists
//
/**
- * {@internal Missing Short Description}}
- *
- * @since unknown
- * @deprecated Use {@link wp_link_category_checklist()}
- * @see wp_link_category_checklist()
- *
- * @param unknown_type $default
- * @param unknown_type $parent
- * @param unknown_type $popular_ids
- */
-function dropdown_categories( $default = 0, $parent = 0, $popular_ids = array() ) {
- global $post_ID;
- wp_category_checklist($post_ID);
-}
-
-/**
- * {@internal Missing Short Description}}
+ * Walker to output an unordered list of category checkbox elements.
*
- * @since unknown
+ * @see Walker
+ * @see wp_category_checklist()
+ * @see wp_terms_checklist()
+ * @since 2.5.1
*/
class Walker_Category_Checklist extends Walker {
var $tree_type = 'category';
var $db_fields = array ('parent' => 'parent', 'id' => 'term_id'); //TODO: decouple this
- function start_lvl(&$output, $depth, $args) {
+ /**
+ * Starts the list before the elements are added.
+ *
+ * @see Walker:start_lvl()
+ *
+ * @since 2.5.1
+ *
+ * @param string $output Passed by reference. Used to append additional content.
+ * @param int $depth Depth of category. Used for tab indentation.
+ * @param array $args An array of arguments. @see wp_terms_checklist()
+ */
+ function start_lvl( &$output, $depth = 0, $args = array() ) {
$indent = str_repeat("\t", $depth);
$output .= "$indent
\n";
}
- function end_lvl(&$output, $depth, $args) {
+ /**
+ * Ends the list of after the elements are added.
+ *
+ * @see Walker::end_lvl()
+ *
+ * @since 2.5.1
+ *
+ * @param string $output Passed by reference. Used to append additional content.
+ * @param int $depth Depth of category. Used for tab indentation.
+ * @param array $args An array of arguments. @see wp_terms_checklist()
+ */
+ function end_lvl( &$output, $depth = 0, $args = array() ) {
$indent = str_repeat("\t", $depth);
$output .= "$indent
\n";
}
- function start_el(&$output, $category, $depth, $args) {
+ /**
+ * Start the element output.
+ *
+ * @see Walker::start_el()
+ *
+ * @since 2.5.1
+ *
+ * @param string $output Passed by reference. Used to append additional content.
+ * @param object $category 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 $id ID of the current term.
+ */
+ function start_el( &$output, $category, $depth = 0, $args = array(), $id = 0 ) {
extract($args);
+ if ( empty($taxonomy) )
+ $taxonomy = 'category';
+
+ if ( $taxonomy == 'category' )
+ $name = 'post_category';
+ else
+ $name = 'tax_input['.$taxonomy.']';
$class = in_array( $category->term_id, $popular_cats ) ? ' class="popular-category"' : '';
- $output .= "\n
" . '';
- }
- function end_el(&$output, $category, $depth, $args) {
+ /** This filter is documented in wp-includes/category-template.php */
+ $output .= "\n
" . '';
+ }
+
+ /**
+ * Ends the element output, if needed.
+ *
+ * @see Walker::end_el()
+ *
+ * @since 2.5.1
+ *
+ * @param string $output Passed by reference. Used to append additional content.
+ * @param object $category 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()
+ */
+ function end_el( &$output, $category, $depth = 0, $args = array() ) {
$output .= "
\n";
}
}
/**
- * {@internal Missing Short Description}}
+ * Output an unordered list of checkbox elements labelled
+ * with category names.
*
- * @since unknown
+ * @see wp_terms_checklist()
+ * @since 2.5.1
*
- * @param unknown_type $post_id
- * @param unknown_type $descendants_and_self
- * @param unknown_type $selected_cats
- * @param unknown_type $popular_cats
+ * @param int $post_id Mark categories associated with this post as checked. $selected_cats must not be an array.
+ * @param int $descendants_and_self ID of the category to output along with its descendents.
+ * @param bool|array $selected_cats List of categories to mark as checked.
+ * @param bool|array $popular_cats Override the list of categories that receive the "popular-category" class.
+ * @param object $walker Walker object to use to build the output.
+ * @param bool $checked_ontop Move checked items out of the hierarchy and to the top of the list.
*/
function wp_category_checklist( $post_id = 0, $descendants_and_self = 0, $selected_cats = false, $popular_cats = false, $walker = null, $checked_ontop = true ) {
+ wp_terms_checklist( $post_id, array(
+ 'taxonomy' => 'category',
+ 'descendants_and_self' => $descendants_and_self,
+ 'selected_cats' => $selected_cats,
+ 'popular_cats' => $popular_cats,
+ 'walker' => $walker,
+ 'checked_ontop' => $checked_ontop
+ ) );
+}
+
+/**
+ * Output an unordered list of checkbox elements labelled
+ * with term names. Taxonomy independent version of wp_category_checklist().
+ *
+ * @since 3.0.0
+ *
+ * @param int $post_id
+ * @param array $args
+ */
+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
+ );
+
+ /**
+ * Filter the taxonomy terms checklist arguments.
+ *
+ * @since 3.4.0
+ *
+ * @see wp_terms_checklist()
+ *
+ * @param array $args An array of arguments.
+ * @param int $post_id The post ID.
+ */
+ $args = apply_filters( 'wp_terms_checklist_args', $args, $post_id );
+
+ 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();
+ $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_post_categories($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( 'category', array( 'fields' => 'ids', 'orderby' => 'count', 'order' => 'DESC', 'number' => 10, 'hierarchical' => false ) );
+ $args['popular_cats'] = get_terms( $taxonomy, array( 'fields' => 'ids', 'orderby' => 'count', 'order' => 'DESC', 'number' => 10, 'hierarchical' => false ) );
if ( $descendants_and_self ) {
- $categories = get_categories( "child_of=$descendants_and_self&hierarchical=0&hide_empty=0" );
- $self = get_category( $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 = get_categories('get=all');
+ $categories = (array) get_terms($taxonomy, array('get' => 'all'));
}
if ( $checked_ontop ) {
@@ -535,39 +210,49 @@ function wp_category_checklist( $post_id = 0, $descendants_and_self = 0, $select
}
/**
- * {@internal Missing Short Description}}
+ * Retrieve a list of the most popular terms from the specified taxonomy.
*
- * @since unknown
+ * If the $echo argument is true then the elements for a list of checkbox
+ * elements labelled with the names of the selected terms is output.
+ * If the $post_ID global isn't empty then the terms associated with that
+ * post will be marked as checked.
*
- * @param unknown_type $taxonomy
- * @param unknown_type $default
- * @param unknown_type $number
- * @param unknown_type $echo
- * @return unknown
+ * @since 2.5.0
+ *
+ * @param string $taxonomy Taxonomy to retrieve terms from.
+ * @param int $default Unused.
+ * @param int $number Number of terms to retrieve. Defaults to 10.
+ * @param bool $echo Optionally output the list as well. Defaults to true.
+ * @return array List of popular term IDs.
*/
function wp_popular_terms_checklist( $taxonomy, $default = 0, $number = 10, $echo = true ) {
- global $post_ID;
+ $post = get_post();
- if ( $post_ID )
- $checked_categories = wp_get_post_categories($post_ID);
+ if ( $post && $post->ID )
+ $checked_terms = wp_get_object_terms($post->ID, $taxonomy, array('fields'=>'ids'));
else
- $checked_categories = array();
+ $checked_terms = array();
+
+ $terms = get_terms( $taxonomy, array( 'orderby' => 'count', 'order' => 'DESC', 'number' => $number, 'hierarchical' => false ) );
- $categories = get_terms( $taxonomy, array( 'orderby' => 'count', 'order' => 'DESC', 'number' => $number, 'hierarchical' => false ) );
+ $tax = get_taxonomy($taxonomy);
$popular_ids = array();
- foreach ( (array) $categories as $category ) {
- $popular_ids[] = $category->term_id;
+ foreach ( (array) $terms as $term ) {
+ $popular_ids[] = $term->term_id;
if ( !$echo ) // hack for AJAX use
continue;
- $id = "popular-category-$category->term_id";
- $checked = in_array( $category->term_id, $checked_categories ) ? 'checked="checked"' : '';
+ $id = "popular-$taxonomy-$term->term_id";
+ $checked = in_array( $term->term_id, $checked_terms ) ? 'checked="checked"' : '';
?>