重定向至:在用户选择分类下拉列表时按分类发布列表?

时间:2010-12-04 作者:Niraj Chauhan

(Moderator\'s note: 最初的标题是“下拉分类法”)

我想添加一个下拉框,其中填充我的自定义分类法,这样当有人选择任何值时,它会重定向到相应的页面。我试过这个代码

<?php wp_dropdown_categories( array( \'taxonomy\' => \'name of taxonomy\' ) ); ?>

问题是我希望页面重定向,而用户无需按下任何按钮。我该怎么做?

这个问题已经解决了,但我想进一步修改,我想添加一个快捷码,这样我也可以在我的帖子中调用下拉列表,我尝试了这个,但没有成功add_shortcode(\'drop\',\'the_taxonomy_dropdown\');

但是当我在我的帖子里提到这个的时候[drop="location"] 它不工作了,有什么问题吗?

2 个回复
最合适的回答,由SO网友:MikeSchinkel 整理而成

你好@ntechi:

这是我写的一个函数,我把它命名为the_taxonomy_dropdown() 给你我认为你在寻找的东西。

function the_taxonomy_dropdown($taxonomy) {
  $id = "{$taxonomy}-dropdown";
  $js =<<<SCRIPT
<script type="text/javascript">
 jQuery(document).ready(function($){
  $("select#{$id}").change(function(){
    window.location.href = $(this).val();
  });
 });
</script>
SCRIPT;
  echo $js;
  $terms = get_terms($taxonomy);
  echo "<select name=\\"{$id}\\" id=\\"{$id}\\">";
  foreach($terms as $term) {
    echo \'<option value="\';
    echo get_term_link(intval($term->term_id),$taxonomy);
    echo \'">\' . "{$term->name}</option>";
  }
  echo "</select>";
}
你可以把the_taxonomy_dropdown() 在您的主题中functions.php 文件并从主题的模板文件中调用,如下所示:

<?php the_taxonomy_dropdown(\'name of taxonomy\'); ?>
注意我没有使用wp_dropdown_categories() 因为它设置了<option>\'s值到term_id 而不是术语的永久链接。您需要永久链接才能设置window.location.href 在客户端。我们曾经wp_dropdown_categories() 这会增加更多的复杂性;需要发出HTTP GET请求term_id 到服务器上的页面,然后重定向到术语的永久链接。但是只构建HTML要容易得多<select> 我们自己,就像我做的那样(而且它更容易响应,因为它不需要额外的HTTP请求。)

当然,一定要记住wp_enqueue_script() 中的jQuery\'init\' 钩子,也在你的主题中functions.php 文件:

add_action(\'init\',\'jquery_init\');
function jquery_init() {
  wp_enqueue_script(\'jquery\');
}

SO网友:t31os

我今天再次研究了这个问题,即返回的下拉元素wp_dropdown_categories() 将选项值设置为术语的ID。。

现在,虽然这使得下拉菜单对于过滤器下拉菜单或跳转菜单有点无用,但实际上可以重新调整使用的JS,使其“按原样”工作。。。

下面是一个基本示例,它基于上面发布的代码。

function the_taxonomy_dropdown( $taxonomy = \'\', $query_var = \'\' ) {

    if( empty( $taxonomy ) )
        return;

    if( empty( $query_var ) )
        $query_var = $taxonomy;

    $select_id = "{$taxonomy}-dropdown";
    $url_base = get_bloginfo(\'url\') . "/$query_var/";
    ?>

    <script type="text/javascript">
    jQuery(document).ready(function($){
        $("select#<?php echo $select_id; ?>").change(function(){
            var term = this.options[this.selectedIndex].text;
            window.location.href = "<?php echo $url_base; ?>" + term;
        });
    });
    </script>

    <?php
    wp_dropdown_categories( array( \'taxonomy\' => $taxonomy, \'id\' => $select_id ) );
}
NOTE: 这个示例JS假设您使用的是非常永久的链接。

如果分类法使用的查询变量与传递到函数中的分类法slug不同,只需添加查询变量作为第二个参数。。

the_taxonomy_dropdown( \'post_tag\', \'tag\' );
请注意,这只是一个示例,向您展示了如何解决此问题wp_dropdown_categories 并通过对JS进行更改来定制分类法。

同样作为参考,这里有一张应付补丁的罚单。http://core.trac.wordpress.org/ticket/13258

结束

相关推荐