Created
December 26, 2013 13:00
-
-
Save anonymous/8133566 to your computer and use it in GitHub Desktop.
This is the walker class that builds the proper checkbox list. It needs to be an include.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <?php | |
| // | |
| // Category Checklists | |
| // | |
| /** | |
| * {@internal Missing Short Description}} | |
| * | |
| * @since 2.5.1 | |
| */ | |
| if(!class_exists('MAE_Walker_Category_Checklist')){ | |
| class autoinc { | |
| static $cnt=0; | |
| static function increment() { | |
| return self::$cnt++; | |
| } | |
| static function reset() { | |
| self::$cnt=0; | |
| } | |
| } | |
| class MAE_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) { | |
| $indent = str_repeat("\t", $depth); | |
| $output .= "$indent<ul class='children'>\n"; | |
| //$output .= "$indent\n"; | |
| } | |
| function end_lvl(&$output, $depth, $args) { | |
| $indent = str_repeat("\t", $depth); | |
| $output .= "$indent</ul>\n"; | |
| //$output .= "$indent\n"; | |
| } | |
| function start_el(&$output, $category, $depth, $args) { | |
| extract($args); | |
| if ( empty($taxonomy) ) | |
| $taxonomy = 'category'; | |
| if ( $taxonomy == 'category' ) | |
| $name = 'post_category'; | |
| else | |
| $name = $taxonomy; | |
| //$name = 'tax_input['.$taxonomy.']'; | |
| $index = autoinc::increment(); | |
| // d($args); | |
| $class = in_array( $category->term_id, $popular_cats ) ? ' class="popular-category"' : ''; | |
| //$output .= "\n<li id='{$taxonomy}-{$category->term_id}'$class>" . '<label class="selectit"><input value="' . $category->term_id . '" type="checkbox" name="'.$name.'[]" id="in-'.$taxonomy.'-' . $category->term_id . '"' . checked( in_array( $category->term_id, $selected_cats ), true, false ) . disabled( empty( $args['disabled'] ), false, false ) . ' /> ' . esc_html( apply_filters('the_category', $category->name )) . '</label>'; | |
| $output .= "\n<li id='{$taxonomy}-{$category->term_id}'$class>" . '<label class="piklist-field-list-item '.(isset($args['attclass']) ? implode(' ', $args['attclass']) : '').'"><input value="' . $category->term_id . '" type="checkbox" name="'.piklist_form::get_field_name($args['pl_field'], $args['pl_scope'], $index, $args['pl_prefix']).'" id="'.piklist_form::get_field_id($args['pl_field'], $args['pl_scope'], $index, $args['pl_prefix']).'"' . checked( in_array( $category->term_id, $selected_cats ), true, false ) . disabled( empty( $args['disabled'] ), false, false ) . ' /> ' . esc_html( apply_filters('the_category', $category->name )) . '</label>'; | |
| //$output .= '<label class="fullsize customcheckboxl" for="'.esc_html( apply_filters('the_category', $category->name )).$category->term_id.'"><input type="checkbox" id="'.esc_html( apply_filters('the_category', $category->name )).$category->term_id.'" class="customcheckbox" name="'.$name.'[]" '.checked( in_array( $category->term_id, $selected_cats ), true, false ).' value="'.$category->term_id.'" /> '.esc_html( apply_filters('the_category', $category->name )).'</label>'; | |
| //'<label class="fullsize customcheckboxl" for="'.$language_list->cat_name.$language_list->cat_ID.'"><input type="checkbox" id="'.$language_list->cat_name.$language_list->cat_ID.'" class="customcheckbox" name="language[]" '.$check.' value="'.$language_list->cat_ID.'" /> '.$language_list->cat_name.'</label>'; | |
| } | |
| function end_el(&$output, $category, $depth, $args) { | |
| $output .= "</li>\n"; | |
| //$output .= "\n"; | |
| } | |
| } | |
| } | |
| /** | |
| * {@internal Missing Short Description}} | |
| * | |
| * @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 | |
| */ | |
| if(!function_exists('mae_category_checklist')){ | |
| function mae_category_checklist( $post_id = 0, $descendants_and_self = 0, $selected_cats = false, $popular_cats = false, $walker = null, $checked_ontop = true ) { | |
| mae_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 | |
| )); | |
| } | |
| } | |
| /** | |
| * Taxonomy independent version of mae_category_checklist | |
| * | |
| * @since 3.0.0 | |
| * | |
| * @param int $post_id | |
| * @param array $args | |
| */ | |
| if(!function_exists('mae_terms_checklist')){ | |
| function mae_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' => false | |
| ); | |
| extract( wp_parse_args($args, $defaults), EXTR_SKIP ); | |
| if ( empty($walker) || !is_a($walker, 'Walker') ) | |
| $walker = new MAE_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')); | |
| } | |
| $args['pl_field']=$pl_field; | |
| $args['pl_scope']=$pl_scope; | |
| $args['pl_prefix']=$pl_prefix; | |
| $args['attclass']=$attclass; | |
| 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)); | |
| autoinc::reset(); | |
| } | |
| } | |
| // | |
| // Category RadioLists | |
| // | |
| /* USAGE: | |
| <ul class="nonbulletlist"> | |
| <?php | |
| wp_terms_radiolist($postid, array( 'taxonomy' => 'category') ); | |
| ?> | |
| </ul> | |
| */ | |
| /** | |
| * {@internal Missing Short Description}} | |
| * | |
| * @since 2.5.1 | |
| */ | |
| if(!class_exists('Walker_Category_Radiolist')){ | |
| class Walker_Category_Radiolist extends Walker { | |
| var $tree_type = 'category'; | |
| var $db_fields = array ('parent' => 'parent', 'id' => 'term_id'); //TODO: decouple this | |
| function start_lvl(&$output, $depth, $args) { | |
| $indent = str_repeat("\t", $depth); | |
| $output .= "$indent<ul class='children'>\n"; | |
| //$output .= "$indent\n"; | |
| } | |
| function end_lvl(&$output, $depth, $args) { | |
| $indent = str_repeat("\t", $depth); | |
| $output .= "$indent</ul>\n"; | |
| //$output .= "$indent\n"; | |
| } | |
| function start_el(&$output, $category, $depth, $args) { | |
| extract($args); | |
| if ( empty($taxonomy) ) | |
| $taxonomy = 'category'; | |
| if ( $taxonomy == 'category' ) | |
| $name = 'post_category'; | |
| else | |
| $name = $taxonomy; | |
| //$name = 'tax_input['.$taxonomy.']'; | |
| $class = in_array( $category->term_id, $popular_cats ) ? ' class="popular-category"' : ''; | |
| //$output .= "\n<li id='{$taxonomy}-{$category->term_id}'$class>" . '<label class="selectit"><input value="' . $category->term_id . '" type="checkbox" name="'.$name.'[]" id="in-'.$taxonomy.'-' . $category->term_id . '"' . checked( in_array( $category->term_id, $selected_cats ), true, false ) . disabled( empty( $args['disabled'] ), false, false ) . ' /> ' . esc_html( apply_filters('the_category', $category->name )) . '</label>'; | |
| $output .= "\n<li id='{$taxonomy}-{$category->term_id}'$class>" . '<label class="selectit"><input value="' . $category->term_id . '" type="radio" name="'.$name.'[]" id="in-'.$taxonomy.'-' . $category->term_id . '"' . checked( in_array( $category->term_id, $selected_cats ), true, false ) . disabled( empty( $args['disabled'] ), false, false ) . ' /> ' . esc_html( apply_filters('the_category', $category->name )) . '</label>'; | |
| //$output .= '<label class="fullsize customcheckboxl" for="'.esc_html( apply_filters('the_category', $category->name )).$category->term_id.'"><input type="checkbox" id="'.esc_html( apply_filters('the_category', $category->name )).$category->term_id.'" class="customcheckbox" name="'.$name.'[]" '.checked( in_array( $category->term_id, $selected_cats ), true, false ).' value="'.$category->term_id.'" /> '.esc_html( apply_filters('the_category', $category->name )).'</label>'; | |
| //'<label class="fullsize customcheckboxl" for="'.$language_list->cat_name.$language_list->cat_ID.'"><input type="checkbox" id="'.$language_list->cat_name.$language_list->cat_ID.'" class="customcheckbox" name="language[]" '.$check.' value="'.$language_list->cat_ID.'" /> '.$language_list->cat_name.'</label>'; | |
| } | |
| function end_el(&$output, $category, $depth, $args) { | |
| $output .= "</li>\n"; | |
| //$output .= "\n"; | |
| } | |
| } | |
| } | |
| /** | |
| * {@internal Missing Short Description}} | |
| * | |
| * @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 | |
| */ | |
| if(!function_exists('wp_category_radiolist')){ | |
| function wp_category_radiolist( $post_id = 0, $descendants_and_self = 0, $selected_cats = false, $popular_cats = false, $walker = null, $checked_ontop = true ) { | |
| wp_terms_radiolist($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 | |
| )); | |
| } | |
| } | |
| /** | |
| * Taxonomy independent version of mae_category_checklist | |
| * | |
| * @since 3.0.0 | |
| * | |
| * @param int $post_id | |
| * @param array $args | |
| */ | |
| if(!function_exists('wp_terms_radiolist')){ | |
| function wp_terms_radiolist($post_id = 0, $args = array()) { | |
| $defaults = array( | |
| 'descendants_and_self' => 0, | |
| 'selected_cats' => false, | |
| 'popular_cats' => false, | |
| 'walker' => null, | |
| 'taxonomy' => 'category', | |
| 'checked_ontop' => false | |
| ); | |
| extract( wp_parse_args($args, $defaults), EXTR_SKIP ); | |
| if ( empty($walker) || !is_a($walker, 'Walker') ) | |
| $walker = new Walker_Category_Radiolist; | |
| $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)); | |
| } | |
| } | |
| ?> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment