Упорядочивание результатов поиска по DESC и ASC - PullRequest
3 голосов
/ 26 февраля 2011

В 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 Ответ

1 голос
/ 28 февраля 2011

Насколько я понимаю, проблема в том, что когда вы выбираете один из вариантов заказа на странице результатов поиска, порядок работает, но на странице отображаются все записи, а не только результаты исходного поиска. .

Это происходит потому, что ваша форма "formorder" (в опубликованном файле searchresults.php) не передает ни один из параметров поиска при отправке. Когда пользователь выбирает параметр в поле выбора «Результаты заказа», отправляется форма «Форма заказа». Но эта форма предоставляет только один фрагмент данных, порядок сортировки. Таким образом, скрипт search_query.php не получает никаких данных $ _POST или $ _GET, содержащих информацию о первоначальном поиске. Это означает, что последнее условие "elseif ($ alllistings) {" в search_query.php достигнуто. Другими словами, при отправке формы «resultsorder» исходные данные поиска теряются, и ваш скрипт в search_query.php работает так, как будто у него есть запрос на отображение всех списков.

Что вам нужно сделать, это включить исходные параметры поиска в качестве скрытых тегов в форму «Результаты заказа». HTML-код для скрытых полей выглядит следующим образом:

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

Скрытые поля позволяют передавать данные в сценарии при отправке формы, при этом пользователь не видит данные, отображаемые на вашей странице. Это позволяет вашей форме «Результаты заказа» передавать текущие параметры поиска вместе с выбранным порядком сортировки. Таким образом, ваш сценарий, когда он применяет порядок сортировки, также будет иметь данные, чтобы ограничить его результаты тем, что было первоначально отображено.

Так что внутри "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>

И так далее, с любым количеством скрытых полей, вам необходимо включить все параметры поиска.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...