Created
February 6, 2013 13:29
-
-
Save bainternet/4722496 to your computer and use it in GitHub Desktop.
Simple class to add custom taxonomy dropdown to a custom post type admin edit list
This file contains 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 | |
if (!class_exists('Tax_CTP_Filter')){ | |
/** | |
* Tax CTP Filter Class | |
* Simple class to add custom taxonomy dropdown to a custom post type admin edit list | |
* @author Ohad Raz <[email protected]> | |
* @version 0.1 | |
*/ | |
class Tax_CTP_Filter | |
{ | |
/** | |
* __construct | |
* @author Ohad Raz <[email protected]> | |
* @since 0.1 | |
* @param array $cpt [description] | |
*/ | |
function __construct($cpt = array()){ | |
$this->cpt = $cpt; | |
// Adding a Taxonomy Filter to Admin List for a Custom Post Type | |
add_action( 'restrict_manage_posts', array($this,'my_restrict_manage_posts' )); | |
} | |
/** | |
* my_restrict_manage_posts add the slelect dropdown per taxonomy | |
* @author Ohad Raz <[email protected]> | |
* @since 0.1 | |
* @return void | |
*/ | |
public function my_restrict_manage_posts() { | |
// only display these taxonomy filters on desired custom post_type listings | |
global $typenow; | |
$types = array_keys($this->cpt); | |
if (in_array($typenow, $types)) { | |
// create an array of taxonomy slugs you want to filter by - if you want to retrieve all taxonomies, could use get_taxonomies() to build the list | |
$filters = $this->cpt[$typenow]; | |
foreach ($filters as $tax_slug) { | |
// retrieve the taxonomy object | |
$tax_obj = get_taxonomy($tax_slug); | |
$tax_name = $tax_obj->labels->name; | |
// output html for taxonomy dropdown filter | |
echo "<select name='".strtolower($tax_slug)."' id='".strtolower($tax_slug)."' class='postform'>"; | |
echo "<option value=''>Show All $tax_name</option>"; | |
$this->generate_taxonomy_options($tax_slug,0,0,(isset($_GET[strtolower($tax_slug)])? $_GET[strtolower($tax_slug)] : null)); | |
echo "</select>"; | |
} | |
} | |
} | |
/** | |
* generate_taxonomy_options generate dropdown | |
* @author Ohad Raz <[email protected]> | |
* @since 0.1 | |
* @param string $tax_slug | |
* @param string $parent | |
* @param integer $level | |
* @param string $selected | |
* @return void | |
*/ | |
public function generate_taxonomy_options($tax_slug, $parent = '', $level = 0,$selected = null) { | |
$args = array('show_empty' => 1); | |
if(!is_null($parent)) { | |
$args = array('parent' => $parent); | |
} | |
$terms = get_terms($tax_slug,$args); | |
$tab=''; | |
for($i=0;$i<$level;$i++){ | |
$tab.='--'; | |
} | |
foreach ($terms as $term) { | |
// output each select option line, check against the last $_GET to show the current option selected | |
echo '<option value='. $term->slug, $selected == $term->slug ? ' selected="selected"' : '','>' .$tab. $term->name .' (' . $term->count .')</option>'; | |
$this->generate_taxonomy_options($tax_slug, $term->term_id, $level+1,$selected); | |
} | |
} | |
}//end class | |
}//end if | |
/* | |
//usage: | |
new Tax_CTP_Filter(array( | |
'CUSTOM_POST_TYPE_NAME' => array('CUSTOM_TAXONOMY_NAME2','CUSTOM_TAXONOMY_NAME2') | |
) | |
); | |
*/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment