-
-
Save hameedullah/997350 to your computer and use it in GitHub Desktop.
<?php | |
/* | |
Plugin Name: Custom Taxonomy DropDown | |
Author: Hameedullah Khan | |
Aurhot URI: http://hameedullah.com | |
*/ | |
// change this to your taxonomy | |
$brand_taxonomy = 'category'; | |
$taxonomy_name = 'Brands'; | |
/* registering taxonomy */ | |
/* disabled assuming you already have regsitered taxonomy */ | |
/* | |
add_action('init', 'my_taxonomy'); | |
function my_taxonomy() { | |
global $brand_taxonomy, $taxonomy_name; | |
register_taxonomy($brand_taxonomy,array('post'),array('labels'=>array('name'=>$taxonomy_name),'public'=>true,'hierarchical'=>true)); | |
}*/ | |
add_action('add_meta_boxes', 'my_custom_metabox'); | |
function my_custom_metabox() { | |
add_meta_box('custom-taxonomy-dropdown','Brands','taxonomy_dropdowns_box','post','side','high'); | |
} | |
function taxonomy_dropdowns_box( $post ) { | |
global $brand_taxonomy, $taxonomy_name; | |
wp_nonce_field('custom-dropdown', 'dropdown-nonce'); | |
$terms = get_terms( $brand_taxonomy, 'hide_empty=0'); | |
if ( is_a( $terms, 'WP_Error' ) ) { | |
$terms = array(); | |
} | |
$object_terms = wp_get_object_terms( $post->ID, $brand_taxonomy, array('fields'=>'ids')); | |
if ( is_a( $object_terms, 'WP_Error' ) ) { | |
$object_terms = array(); | |
} | |
// you can move the below java script to admin_head | |
?> | |
<script type="text/javascript"> | |
jQuery(document).ready(function() { | |
jQuery('#custombrandoptions').change(function() { | |
var custombrand = jQuery('#custombrandoptions').val(); | |
if ( custombrand == '0') { | |
jQuery('#custommodeloptions').html(''); | |
jQuery('#modelcontainer').css('display', 'none'); | |
} else { | |
jQuery('#ctd-custom-taxonomy-terms-loading').css('display', 'inline'); | |
jQuery('#modelcontainer').css('display', 'none'); | |
var data = { | |
'action':'get_brand_models', | |
'custombrand':custombrand, | |
'dropdown-nonce': jQuery('#dropdown-nonce').val() | |
}; | |
jQuery.post(ajaxurl, data, function(response){ | |
jQuery('#custommodeloptions').html(response); | |
jQuery('#ctd-custom-taxonomy-terms-loading').css('display', 'none'); | |
jQuery('#modelcontainer').css('display', 'inline'); | |
}); | |
} | |
}); | |
}); | |
</script> | |
<?php | |
echo "Brand:"; | |
echo "<select id='custombrandoptions' name='custombrands[]'>"; | |
echo "<option value='0'>None</option>"; | |
foreach ( $terms as $term ) { | |
if ( $term->parent == 0) { | |
if ( in_array($term->term_id, $object_terms) ) { | |
$parent_id = $term->term_id; | |
echo "<option value='{$term->term_id}' selected='selected'>{$term->name}</option>"; | |
} else { | |
echo "<option value='{$term->term_id}'>{$term->name}</option>"; | |
} | |
} | |
} | |
echo "</select><br />"; | |
echo "<div id='ctd-custom-taxonomy-terms-loading' style='display:none;'>Loading...</div>"; | |
echo "<div id='modelcontainer'"; | |
if ( !isset( $parent_id)) echo " style='display: none;'"; | |
echo ">"; | |
echo "Models:"; | |
echo "<select id='custommodeloptions' name='custombrands[]'>"; | |
if ( isset( $parent_id)) { | |
$models = get_terms( $brand_taxonomy, 'hide_empty=0&child_of='.$parent_id); | |
foreach ( $models as $model ) { | |
if ( in_array($model->term_id, $object_terms) ) { | |
echo "<option value='{$model->term_id}' selected='selected'>{$model->name}</option>"; | |
} else { | |
echo "<option value='{$model->term_id}'>{$model->name}</option>"; | |
} | |
} | |
} | |
echo "</select>"; | |
echo "</div>"; | |
} | |
add_action('save_post','save_my_custom_taxonomy'); | |
function save_my_custom_taxonomy( $post_id ) { | |
global $brand_taxonomy, $taxonomy_name; | |
if ( define('DOING_AUTOSAVE') && DOING_AUTOSAVE ) | |
return; | |
if ( !wp_verify_nonce($_POST['dropdown-nonce'], 'custom-dropdown')) | |
return; | |
$brands = array_map('intval', $_POST['custombrands']); | |
wp_set_object_terms($post_id, $brands, $brand_taxonomy); | |
} | |
add_action('wp_ajax_get_brand_models', 'get_brand_models'); | |
function get_brand_models() { | |
global $brand_taxonomy, $taxonomy_name; | |
check_ajax_referer('custom-dropdown', 'dropdown-nonce'); | |
if (isset($_POST['custombrand'])) { | |
$models = get_terms( $brand_taxonomy, 'hide_empty=0&child_of='. $_POST['custombrand']); | |
echo "<option value='0'>Select one</option>"; | |
foreach ($models as $model) { | |
echo "<option value='{$model->term_id}'>{$model->name}</option>"; | |
} | |
} | |
die(); | |
} | |
?> |
Good Idea, I will try to add that tonight.
Not to be annoying, but did you have any chance to look at it?
Sorry.. wasn't feeling well so couldn't add the loading indicator earlier. But just added the loading indicator to it, you can check.
Works great. Thanks hameedullah :)
Here is full moded version of this plugin. Mod make wp_drop_down categories with sublevels and paddings. Mod fix update and save functions.
Here is full moded functions code.
http://paste.php.lv/dc8786ed7b99038807c7f9741b30794a?lang=php
For output and custom query use: ID, 'cat_include', true) ?>
@foxsk8 Looks like non-PHP parts (JS and HTML) got dropped from your code?
js and html has droped, and drop fuction has change on standart wordpress core drop downs and update save, update fuctions. This mod also put meta box in database without serialize data.
How to use this code in the front end?
Can you show how to make it working with 3 dropdowns? (3 taxonomy levels)
Hello! It is i need! Thanks! But do you know how i can add a third level? 3 dropdowns?
Hi hameedullah, is this the code of a drop-down list that get only checked taxonomy of a post in the wp-admin and displayed by query in a page(created by category).
mamouneyya could you show how you managed to work this with three levels taxonomy?
you really really helped me!!!
tks a lot man!!!!
Thank you!
This is still really useful!
This works great! @hameedullah or @mamouneyya could either of you help me turn this into a three-level taxonomy dropdown? My primary use case is for Country, State, City. Any help would be appreciated, thank you so much!
Does this go in functions.php ?
mamouneyya potresti mostrare come sei riuscito a farlo con una tassonomia a tre livelli?
Hello! It is i need! Thanks! But do you know how i can add a third level? 3 dropdowns?
Enter in My profile for this!!
Thank you so much, your code works like a charm! I even could to modify it to work with three levels taxonomy tree (3 drop-downs). I just miss a simple loading indicator beside the field when retrieving the drop-down values, which improves the user experience. Could that be easily added? I would appreciate if you guided me.