最终,我使用的解决方案是这样的。更改下拉列表A后,我有一个ajax函数请求,它使用基于下拉列表A中的选择的过滤选项重新填充下拉列表B。
请参阅ajax jquery脚本。。。
countryFilter = function () {
var countryClass = \'.dealer-country select\',
dealerClass = \'.dealer-name select\';
$(countryClass).change(function(){
var countrySelect = $(this),
country = countrySelect.val(),
dealerSelect = countrySelect.parents(\'form\').find(dealerClass);
if(country != "default") {
$.ajax({
type: \'POST\',
url: \'<?php echo admin_url(\'admin-ajax.php\'); ?>\',
data: { dealerCountry : country, action: \'get_dealer_name\' },
success: function(data){
dealerSelect.empty();
var options = $.parseJSON(data);
for(i=0;i<options.length;i++){
dealerSelect.append(\'<option value="\'+options[i].value+\'">\'+options[i].text+\'</option>\');
}
dealerSelect.removeAttr(\'disabled\');
}
});
}
});
}
我用。。。
$(document).ready(function () {
countryFilter();
});
$(document).bind(\'gform_post_render\', function(event, form_id){
if(form_id == 3) {
countryFilter();
}
});
然后我将原来的函数修剪为。。。
// Dropdown A - Dealer Country
add_filter("gform_pre_render", "dropdown_dealer_country");
add_filter("gform_admin_pre_render", "dropdown_dealer_country");
function dropdown_dealer_country($form){
if($form["id"] != 3)
return $form;
$terms = get_terms("dealer-country");
$items = array();
$items[] = array( "text" => __(\'Select country...\',\'theme\'), "value" => \'default\' );
foreach($terms as $term)
$items[] = array( "text" => $term->name, "value" => $term->slug );
foreach($form["fields"] as &$field){
if($field["id"] == 6 ){
$field["cssClass"] = \'dealer-country\';
$field["choices"] = $items;
}
}
return $form;
}
// Dropdown B - Dealer Name
add_filter("gform_pre_render", "dropdown_dealer_name");
add_filter("gform_admin_pre_render", "dropdown_dealer_name");
function dropdown_dealer_name($form){
if($form["id"] != 3)
return $form;
$items = array();
$items[] = array( "text" => __(\'Select dealer...\',\'theme\'), "value" => \'default\' );
foreach($form["fields"] as &$field){
if($field["id"] == 7){
$field["cssClass"] = \'dealer-name\';
$field["choices"] = $items;
}
}
return $form;
}
最后的点睛之笔是功能,它也包含在功能中。php-这是由ajax请求调用的。。。
function get_dealer_name_fn(){
$dealerCountry = $_POST[\'dealerCountry\'];
$dealers = get_posts(array(
"post_type" => "dealer",
"dealer-country" => $dealerCountry,
"post_status" => "publish",
"orderby" => "title",
"order" => "ASC",
"posts_per_page" => -1
));
$items = array();
$items[] = array( "text" => __(\'Select dealer...\',\'theme\'), "value" => \'default\' );
foreach($dealers as $dealer){
$items[] = array( "text" => $dealer->post_title, "value" => $dealer->post_title );
}
echo json_encode($items);
die;
}
add_action(\'wp_ajax_get_dealer_name\', \'get_dealer_name_fn\');
add_action(\'wp_ajax_nopriv_get_dealer_name\', \'get_dealer_name_fn\');