Formulário e carga do primeiro select (Marca):
<?php
$categories = get_categories();
?>
<form action="" method="get" id="searchform" name="s">
<select name="marca" size="1" class="clamarca" id="marca">
<option value="0" >Qual Marca?</option>
<?php foreach ($categories as $cat) { ?>
<option value="<?php echo $cat->term_id; ?>"><?php echo $cat->name; ?></option>
<?php
}
?>
</select>
<select name="modelo" class="clamodelo" id="modelo">
<option value="0">Qual Modelo?</option>
</select>
</form>
Javascript com o uso da biblioteca jQuery para popular o segundo select:
<script type="text/javascript">
jQuery(document).ready(function($){
jQuery("select#marca").change(function(){
if ($(this).val() == 0) return;
jQuery.getJSON("<?php bloginfo('template_directory'); ?>/modelo.php", {id: $(this).val()}, function(j){
var options = '';
for (var i = 0; i < j.length; i++) {
options += '<option value="' + j[i].id + '">' + j[i].nome + '</option>';
}
jQuery("select#modelo").html(options);
})
})
})
</script>
Programa modelo.php chamado via Ajax:
<?php
if (!function_exists('add_action')) {
$wp_root = '../../..';
if (file_exists($wp_root.'/wp-load.php')) {
require_once($wp_root.'/wp-load.php');
} else {
require_once($wp_root.'/wp-config.php');
}
}
$id = $_GET['id'];
$categories = get_term_children( $id, 'category' );
$retorno = '[ ';
foreach ($categories as $cat) {
$category = get_category($cat);
$retorno .= '{id: \''.$category->term_id.'\', nome: \''.$category->name.'\'}, ';
}
$retorno .= ' ]';
echo $retorno;
?>