如何使用表单转到标签存档

时间:2011-07-02 作者:kdev

我已经设置了一个名为“属性”的自定义帖子类型。这些帖子可以用“area”和“university”自定义分类法进行标记。

我想能够有一个表单,每个标签都有一个下拉列表。提交表单后,我想转到显示这些标签存档的URL。

有两个问题:

返回正确帖子的URL是什么如何用表单构造URL

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

要了解如何操作,首先需要知道url查询是如何工作的,或者更具体地说,需要什么查询变量,因此:

  • \'post_type\' - 按PostType筛选
  • \'area\' - 按区域分类法过滤
  • \'university\' - 按大学分类法筛选
因此您的url如下所示:

//   http://www.domain.com/?post_type=properties&area=area_term&university=university_term
现在我们知道了,我们使用所需的字段创建表单:

function display_area_university_filter_form(){
?>
<form method="post" action="">
    <p><label for="area_t">Area: </label> <select name="area_t"><option value="">Select Area:</option>
    <?php 
        $area_terms =  get_categories(\'taxonomy=area\'); 
        if (isset($_POST[\'area_t\'])){
            foreach ($area_terms as $term) {
                $option = \'<option value="\'.$term->slug.\'"\';
                if ($_POST[\'area_t\'] == $term->slug){
                    $option.= \' selected="selected"\';
                }
                $option .= \'>\'.$term->name;
                $option .= \'</option>\';
                echo $option;
            }
        }else{
            foreach ($area_terms as $term) {
                $option = \'<option value="\'.$term->slug.\'"\';
                $option .= \'>\'.$term->name;
                $option .= \'</option>\';
                echo $option;
            }
        }
    ?>
    </select>
    </p>
    <p><label for="area_t">University: </label> <select name="area_t"><option value="">Select University:</option>
    <?php 
        $uni_terms =  get_categories(\'taxonomy=university\'); 
        if (isset($_POST[\'univer\'])){
            foreach ($uni_terms as $term) {
                $option = \'<option value="\'.$term->slug.\'"\';
                if ($_POST[\'univer\'] == $term->slug){
                    $option.= \' selected="selected"\';
                }
                $option .= \'>\'.$term->name;
                $option .= \'</option>\';
                echo $option;
            }
        }else{
            foreach ($uni_terms as $term) {
                $option = \'<option value="\'.$term->slug.\'"\';
                $option .= \'>\'.$term->name;
                $option .= \'</option>\';
                echo $option;
            }
        }
    ?>
    </select>
    </p>
    <input type="hidden" name="custom_filter" value="area_uni">
    <p><input type="submit" name="submit" value="submit"></p>
</form>
<?php }
那么剩下的就是处理它:

if (isset($_POST[\'submit\']) && isset($_POST[\'custom_filter\']) && $_POST[\'custom_filter\'] == "area_uni"){
    $url =  get_bloginfo(\'url\');
    $area = $uni = \'\';
    if (isset($_POST[\'area_t\'])){
        $area = \'&area=\'.$_POST[\'area_t\'];
    }
    if (isset($_POST[\'univer\'])){
        $uni = \'&university=\'.$_POST[\'univer\'];
    }

    $url .= \'/?post_type=properties\'.$area.$uni;

    wp_redirect( $url );
    exit();
}

结束

相关推荐

高级集成-WordPress+YOURLS

我一直在使用自定义YOURLS 系统为我的博客网络创建我自己的URL缩写器。一切都很好,只有少数例外(bug已经报告给开发人员)。但我的目标是实现现有WordPress YOURLS插件中未包含的更复杂的功能。目前,当发布帖子时,WordPress会自动登录到您的LS,创建一个简短的URL,并将通知推送到Twitter。它运行良好,可以为我跟踪所有内容(短URL由WordPress记忆并插入适当的<meta> 标签)。我想做的是,我把我的博客帖子安排在太平洋时间上午8点。如果你早上8点在推特上