通过DESC和ASC订购搜索结果

时间:2011-02-26 00:56:05

标签: php javascript mysql wordpress

在searchresults.php中

当我选择“价格升序”时,它会将所有属性加载到页面上。例如,当我搜索亚利桑那州,然后选择“价格升序”从选择它在亚利桑那州的订购属性,它在页面上加载所有属性,然后按“价格升序”排序。

由于

你可以在sedefemlak.com看到现场直播

searchresults.php

                    <div id="resultsorder" style="">
        <form name="formorder" method="POST" action="<?php bloginfo('url'); ?>/?page_id=<?php echo $wp_searchpageid; ?>">
        <select name="resultsorder" onChange="formorder.submit();">
                        <option>Order</option>
                        <option>Date Descending</option>
                        <option>Date Ascending</option>
                        <option>Price Descending</option>
                        <option>Price Ascending</option>
                        <option>Random</option>
                    </select>
        </form>
        </div>

    search_query.php

            if($resultsorder) {
    //get value from order dropdown on search results page
    $resultsorder = $resultsorder;
    } else {
    $resultsorder = get_option('wp_searchorder');
}

    switch ($resultsorder) {
        case "Price Descending":
            $metakey = 'price_value';
            $order = 'DESC';
            $orderby = 'meta_value_num';
            break;
        case "Price Ascending":
            $metakey = 'price_value';
            $order = 'ASC';
            $orderby = 'meta_value_num';
            break;
        case "Date Descending":
            $metakey = '';
            $order = 'DESC';
            $orderby = 'date';
            break;
        case "Date Ascending":
            $metakey = '';
            $order = 'ASC';
            $orderby = 'date';
            break;
        case "Random":
            $metakey = '';
            $order = '';
            $orderby = 'rand';
            break;
    }


if (!empty($_ids) && !$alllistings) {

    $wpq = array ('post_type' => 'listing', 'meta_key' => $metakey, 'orderby' => $orderby, 'order' => $order, 'post__in' => $_ids,  'post_status' => 'publish', 'paged' => $paged, 'posts_per_page' => 9999 );

} elseif (empty($_ids) && !$alllistings) {

    // $_ids array is empty because search got no results
    // $_ids array will be empty if page is an "All Listings" page. Don't run this code if is All Listings because All Listings will show all listings. This code will display "no results found"
    $wpq = array ('post_type' =>'listing', 'meta_key' => $metakey, 'orderby' => $orderby, 'order' => $order, 'post__in' => array('0'),'post_status' => 'publish', 'paged' => $paged, 'posts_per_page' => 9999);
} elseif ($alllistings) {
    // This is an All Listings page, so show all results
    $wpq = array ('post_type' =>'listing', 'paged' => $paged, 'meta_key' => $metakey, 'orderby' => $orderby, 'order' => $order, 'post_status' => 'publish', 'posts_per_page' => 9999);
}

$listing = new WP_Query($wpq);

1 个答案:

答案 0 :(得分:1)

据我了解,您遇到的问题是,当您从搜索结果页面中选择其中一个订购选项时,订购有效但页面会显示所有记录,而不是仅限于原始搜索的结果

这种情况正在发生,因为您的“formorder”表单(在发布的searchresults.php文件中)在提交时不会传递任何搜索参数。当用户从“结果订单”选择框中选择一个选项时,将提交“formorder”表单。但是该表单只提交了一个数据,即排序顺序。所以脚本search_query.php没有收到包含原始搜索内容信息的任何$ _POST或$ _GET数据。这意味着达到了search_query.php中的最终“elseif($ alllistings){”子句。换句话说,随着“resultsorder”表单的提交,原始搜索数据将丢失,并且您在search_query.php中的脚本继续进行,就好像它有一个显示所有列表的请求一样。

您需要做的是将原始搜索参数作为隐藏标记包含在“resultsorder”表单中。隐藏字段的HTML如下所示:

<input type="hidden" id="searchLocation" name="searchLocation" value="California" />

隐藏字段允许您在提交表单时将数据传递到脚本,而无需用户查看页面上显示的数据。这使您的“resultsorder”表单可以传递当前搜索参数以及所选的排序顺序。这样,您的脚本在应用排序顺序时,也会有数据将结果限制为最初显示的结果。

所以在“searchresults.php”里面你应该有这样的东西:

<form name="formorder" method="POST" [ETC]>
    <select name="resultsorder" onChange="formorder.submit();">
        [OPTIONS]
    </select>
    <input type="hidden" name="location_level1" id="location_level1" 
        value="<?php echo $location_level1; ?>" />
    <input type="hidden" name="beds" id="beds" value="<?php echo $beds; ?>" />
</form>

依此类推,无论多少隐藏字段,您都需要包含所有搜索参数。