ホテルのタイプ、キーワード、場所、価格に基づいてホテルを検索するサイトを構築しています。並べ替え以外はすべて正常に動作します。結果を表示する前に並べ替えることができます。ただし、それらが表示された後、それらを再ソートするために何もできません。
注: TEMPLATIC の REAL ESTATE WORDPRESS テーマを使用しています。
これは、データベースからレコードを取得し、$sort タイプの値に応じて、価格または日付でソートする php コードです。
<?php
$sort type=0; //0-sort by price ... 1-sort by date
...
if ($sort_type == 0) {
$srch_sql .= " order by abs(o.meta_value) asc limit $startlimit , $posts_per_page";
}
elseif ($sort_type == 1){
$srch_sql .= " order by p.id desc limit $startlimit , $posts_per_page";
}
?>
これには少なくとも1つの解決策があるはずです。今考えているのは、ラジオボタンを2つ持つことです。1 つは日付順、もう 1 つは価格順です。
<input type="radio" name="sort_type" value="Price">Price</input>
<input type="radio" name="sort_type" value="Date">Date</input>
ただし、これの問題は、選択があるラジオボタンから別のラジオボタンに変更されたときに変数 $sort_type に値 (1 と 0) を割り当て、変数 $sort_type をリセットせずにページをリロードする方法がわからないことです。ページがリロードされると 0。
何か案が!?
以下のコード全体
<?php get_header(); ?>
<?php if (is_paged()) $is_paged = true; ?>
<div class="wrapper" >
<div class="clearfix container_border">
<div class="breadcrumbs">
<p><?php if ( get_option( 'ptthemes_breadcrumbs' )) { yoast_breadcrumb('',''); } ?></p>
<span class="findproperties" onclick="show_hide_propertysearchoptions();"><a href="javascript:void(0);"><?php _e(FIND_PROPERTIES_TEXT);?></a></span>
</div>
</div>
<?php require_once (TEMPLATEPATH . '/library/includes/search.php'); ?>
<?php
//sort_type = 0 order by price
//sort_type = 1 order by date
$sort_type = 0; ?>
// this part of the code retrieves data from db
<?php
$is_search = 0;
global $wpdb;
$totalpost_count = 0;
$propertycategory = get_cat_id_from_name(get_option('ptthemes_propertycategory'));
$propertycategorys = get_sub_categories($propertycategory,'string');
$all_pids_arr = $wpdb->get_var("SELECT group_concat(ID) FROM $wpdb->posts where post_status='publish'");
$all_pids_arr = $wpdb->get_col("SELECT tr.object_id FROM $wpdb->term_taxonomy tt join $wpdb->term_relationships tr on tr.term_taxonomy_id=tt.term_taxonomy_id where tt.term_id in ($propertycategorys)");
if($_REQUEST['srch_location'])
{
$is_search = 1;
$srch_location = $_REQUEST['srch_location'];
$location_pids_arr = $wpdb->get_col("select post_id from $wpdb->postmeta where meta_key like 'add_location' and meta_value like \"$srch_location\"");
$all_pids_arr = array_intersect($all_pids_arr,$location_pids_arr);
}
if($_REQUEST['srch_price'])
{
$is_search = 1;
$srch_price = $_REQUEST['srch_price'];
if(strstr($srch_price,'-'))
{
$srch_price_str = str_replace('-',' and ',$srch_price);
$srch_price_arr = $wpdb->get_col("select post_id from $wpdb->postmeta where meta_key like 'price' and meta_value between $srch_price_str");
}
elseif(strstr($srch_price,'+'))
{
$srch_price_str = str_replace('+','',$srch_price);
$srch_price_arr = $wpdb->get_col("select post_id from $wpdb->postmeta where meta_key like 'price' and meta_value >= $srch_price_str");
}
$all_pids_arr = array_intersect($all_pids_arr,$srch_price_arr);
}
if($_REQUEST['srch_type'])
{
$is_search = 1;
$srch_type = $_REQUEST['srch_type'];
$type_pids_arr = $wpdb->get_col("select post_id from $wpdb->postmeta where meta_key like 'property_type' and meta_value = \"$srch_type\"");
$all_pids_arr = array_intersect($all_pids_arr,$type_pids_arr);
}
if($_REQUEST['srch_keyword'] && $_REQUEST['srch_keyword']!=CITY_STATE_ZIP_SRCH_TEXT)
{
$is_search = 1;
$srch_keyword = $_REQUEST['srch_keyword'];
$kw_pids_arr = $wpdb->get_col("select id from $wpdb->posts where post_title like \"%$srch_keyword%\"");
$all_pids_arr = array_intersect($all_pids_arr,$kw_pids_arr);
}
if($is_search && !$all_pids_arr)
{
$all_pids_arr[0] = 'nopost';
}
if($_REQUEST['srch_property_id'])
{
$post_ids_str = $_REQUEST['srch_property_id'];
$sub_cat_sql .= " and p.ID in ($post_ids_str) ";
}else
{
if($all_pids_arr)
{
$post_ids_str = implode(',',$all_pids_arr);
if($post_ids_str)
{
$sub_cat_sql .= " and p.ID in ($post_ids_str) ";
}
}
}
$featurecat = get_cat_id_from_name(get_option('ptthemes_featuredcategory'));
if($featurecat)
{
$srch_feature_pids = $wpdb->get_var("SELECT group_concat(tr.object_id) FROM $wpdb->term_taxonomy tt join $wpdb->term_relationships tr on tr.term_taxonomy_id=tt.term_taxonomy_id where tt.term_id in ($featurecat)");
$srch_feature_pids = '';
}
$blogcat = get_cat_id_from_name(get_option('ptthemes_blogcategory'));
$blogcatcatids = get_sub_categories($blogcat,'string');
if($blogcatcatids)
{
$srch_blog_pids = $wpdb->get_var("SELECT group_concat(tr.object_id) FROM $wpdb->term_taxonomy tt join $wpdb->term_relationships tr on tr.term_taxonomy_id=tt.term_taxonomy_id where tt.term_id in ($blogcatcatids)");
}
if($srch_blog_pids && $srch_feature_pids)
{
$sub_cat_sql .= " and p.ID not in ($srch_blog_pids,$srch_feature_pids) ";
}elseif($srch_blog_pids && $srch_feature_pids=='')
{
$sub_cat_sql .= " and p.ID not in ($srch_blog_pids) ";
}elseif($srch_blog_pids=='' && $srch_feature_pids)
{
$sub_cat_sql .= " and p.ID not in ($srch_feature_pids) ";
}
$srch_sql = "select p.* from $wpdb->posts p join $wpdb->postmeta o on p.ID=o.post_id $post_meta_join where p.post_status='publish' and p.post_type='post' and o.meta_key='price' $sub_cat_sql";
if($srch_feature_pids)
{
$feature_srch_sql = "select p.* from $wpdb->posts p join $wpdb->postmeta o on p.ID=o.post_id $post_meta_join where p.post_status='publish' and p.post_type='post' and o.meta_key='price' and p.ID in ($srch_feature_pids)";
$srch_sql = " select * from (($feature_srch_sql) union ($srch_sql))";
}
$totalpost_count = $wpdb->get_var("select count(p.ID) from $wpdb->posts p join $wpdb->postmeta o on p.ID=o.post_id $post_meta_join where p.post_status='publish' and p.post_type='post' and o.meta_key='price' $sub_cat_sql");
global $posts_per_page,$paged;
if($paged==''){$paged=1;}
$startlimit = $posts_per_page*($paged-1);
if ($sort_type == 0) {
$srch_sql .= " order by abs(o.meta_value) asc limit $startlimit , $posts_per_page";
}
elseif ($sort_type == 1){
$srch_sql .= " order by p.id desc limit $startlimit , $posts_per_page";
}
$post_info = $wpdb->get_results($srch_sql);
?><!-- contentarea #end -->
<script type="text/javascript" src="<?php bloginfo('template_directory'); ?>/library/js/jquery.js"></script>
<script type="text/javascript" src="<?php bloginfo('template_directory'); ?>/library/js/functions.js"></script>
<div class="contentarea">
<div class="content" >
<div class="latestproperties latestproperties_<?php echo stripslashes(get_option('ptthemes_sidebar_left')); ?>">
<p align="right">Order by:
<input type="radio" name="order" value="Price" />Price</input>
<input type="radio" name="order" value="Date" />Date</input></p>
<h5><span><a href="#" class="switch_thumb"><?php _e(SWITCH_THUMB_TEXT);?></a></span>
<?php
if($_REQUEST['s'] == 'shfleto te gjitha')
{
_e(LATEST_PROPERTIES_BYPRICE_TEXT);
}
elseif(is_category() && $_REQUEST['search']=='')
{
echo single_cat_title();
}else
{
echo get_search_param();
}
?></h5>
<?php if($post_info) { ?>
<ul class="display ">
<?php
$count=0;
foreach($post_info as $post_info_obj)
{
$count++;
$post = $post_info_obj;
get_property_info_li($post);
if($count%3==0)
{
?>
<li class="blank"></li>
<?php
}
}
?>
</ul>
<?php
}else
{
_e(NO_PROPERTY_AVAILABLE_MSG);
if($_POST['search']=='search')
{
echo get_search_param();
}
}
?>
<?php if($post_info) { ?>
<div class="pagination">
<?php if (function_exists('wp_pagenavi')) { ?><?php wp_pagenavi(); ?><?php } ?>
</div>
<?php }?>
</div>
<?php get_sidebar(); ?> <!-- sidebar #end -->
</div>
<?php get_footer(); ?>