带有子级和层次结构的Wordpress自定义分类法下拉列表

时间:2012-08-12 14:36:12

标签: wordpress drop-down-menu

我正在为基于场地的项目使用wordpress的属性主题。在那里我有一个基于自定义分类的搜索,我需要帮助的是位置。

最初我有乡村和城市 - 但在发现我似乎无法根据用户为国家选择的城市填充城市(AJAX我虽然但我无法弄清楚如何做到这一点甚至在网上冲浪后用了几个小时)。我看到一篇文章说要把它变成一个我称之为位置的分类法,现在这是一个分层次的分类学,它有一个城市作为孩子

我遇到的问题是,对于搜索我现在有一个下拉列表,显示城市但没有层次结构!

所以看起来像(例如)

巴西
佛罗伦萨
意大利
墨西哥
美国

它应该显示为

巴西
意大利
- 佛罗伦萨
墨西哥
美国

下拉列表都被称为

<div class="left">
    <label for="ct_state"><?php _e('Location', 'contempo'); ?></label>
    <?php ct_search_form_select('country'); ?>
</div>

调用的函数是

function ct_search_form_select($name, $taxonomy_name = null) {
    global $search_values;

    if (!$taxonomy_name) {
        $taxonomy_name = $name;
    }
    ?>
    <select id="ct_<?php echo $name; ?>" name="ct_<?php echo $name; ?>">
        <option value="0"><?php _e('Any', 'contempo'); ?></option>
        <?php foreach( get_terms($taxonomy_name, 'hide_empty=0') as $t ) : ?>
            <?php if ($search_values[$name] == $t->slug) { $selected = 'selected="selected" '; } else { $selected = ''; } ?>
            <option <?php echo $selected; ?>value="<?php echo $t->slug; ?>"><?php echo $t->name; ?></option>
        <?php endforeach; ?>
    </select>
    <?php
}

正如您所看到的,它还会提取一个名为$ search_values的变量,这就是我将所有选择编译成搜索查询的方式。这个地方有快速解决方法吗?我尝试过不同的功能,我只是无法得到任何工作:(请有人帮助我

非常感谢 nickey

1 个答案:

答案 0 :(得分:0)

有朋友帮我解决这个问题 - 如果其他人有这个问题,只为这些下拉菜单创建一个新功能

function ct_location_form_select($name, $tax_name = null, $parent = null) {
    global $search_values;

    if (!$tax_name) {
        $tax_name = $name;
    }

    $tax_array['hide_empty'] = 0;
    $tax_array['parent'] = ( $parent ) ? $parent : 0;
    $tax_terms = get_terms( $tax_name, $tax_array );

    if ($parent) {
        foreach( $tax_terms as $t ) {
            if ( $search_values[$name] == $t->slug ) { $selected = 'selected="selected"'; } else { $selected = ''; }
            ?>
            <option value="<?php echo $t->slug; ?>" <?php echo $selected; ?>><?php echo get_option_spaces( $tax_name, $t->term_id ) . $t->name; ?></option>
            <?php
            if ( get_term_children( $t->term_id, $tax_name ) ) {
                ct_location_form_select( $name, $tax_name, $t->term_id );
            }
        }
    } else {
    ?>
    <select id='ct_<?php echo $name; ?>' name='ct_<?php echo $name; ?>'>
    <option value="0"><?php _e('Any', 'contempo'); ?></option>
    <?php foreach( $tax_terms as $t ) { ?>
    <?php if ( $search_values[$name] == $t->slug ) { $selected = 'selected="selected" '; } else { $selected = ''; } ?>
    <option <?php echo $selected; ?>value="<?php echo $t->slug; ?>"><?php echo $t->name; ?></option>
    <?php
            if ( get_term_children( $t->term_id, $tax_name ) ) {
                ct_location_form_select( $name, $tax_name, $t->term_id );
            }
        }
    ?>
    </select>
    <?php
    }
}

干杯!