php - 按 DESC 和 ASC 对搜索结果进行排序

标签 php javascript mysql wordpress

在searchresults.php中

当我选择“Price Ascending”时,它可以正常工作,但会将所有属性加载到页面上。例如,当我搜索亚利桑那州然后从选择中选择“价格递增”时,它不会在亚利桑那州订购属性,它会在页面上加载所有属性,然后按“价格递增”排序。

谢谢

你可以在 sedefemlak.com 上看到直播

搜索结果.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);

最佳答案

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

发生这种情况是因为您的“formorder”表单(在发布的 searchresults.php 文件中)在提交时没有传递任何搜索参数。当用户从“resultsorder”选择框中选择一个选项时,将提交“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>

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

关于php - 按 DESC 和 ASC 对搜索结果进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5124323/

相关文章:

php - 如何在 Varnish 中发送清除请求

php - 为什么 PHP pear 即使使用正确的包含路径也不能工作?

javascript - React Native 适配文本组件

javascript - 在 SPA 和 Angular JS 中加载部分 View 的最佳方式是什么

mysql - 结合MySQL数据库

javascript - 使用选择选项更改语言 (URL)

php - 在数据库中存储 Paypal 详细信息

php - 不存储 POST 数据 (json)

php - 从 HTML 读取 Base64 图像到 android picasso 适配器

php - 通过 php 向数据库提供信息