Search – Server – Issue
-
Hi people,
I’m having some server issues with my website search, it is a big search that is hitting the AWS limits and I can’t figure out the best way to solve it. I decided to use $posts = get_posts($arg); but wondering if I use wp_query() would improve somehow? The search has tons of filters because it is a dealer website so people can filter by price, make, year, mileage, model, color, transmission etc…
I have the same query for the results and another one for the total of cars so I can build the pagination and I believe this is also one of the reasons why it takes down the server sometimes when a lot of people are searching for cars… Allow me to paste my code here and if anyone could help me to find a better solution I appreciate a lot:
$filter = array(); if($body != "" || $_GET["body"] != ""){ if($body != ""){ $bd = $body; } if(!empty($_GET["body"])){ $bd = explode(",", $_GET["body"]); } array_push($filter, array('key' => 'body', 'value' => $bd, 'compare' => 'IN')); } if(!empty($_GET["pre_owned"])){ array_push($filter, array('key' => 'pre_owned','value' => sanitize_text_field($_GET["pre_owned"]), 'compare' => '=')); } //price if(!empty($_GET["priceMin"])){ array_push($filter, array('key' => 'price', 'type' => 'NUMERIC', 'value' => sanitize_text_field(str_replace(",", "", $_GET["priceMin"])), 'compare' => '>=')); } if(!empty($_GET["priceMax"])){ array_push($filter, array('key' => 'price', 'type' => 'NUMERIC', 'value' => sanitize_text_field(str_replace(",", "", $_GET["priceMax"])), 'compare' => '<=')); } //end price //mileage if(!empty($_GET["odometerMin"])){ array_push($filter, array('key' => 'odometer', 'type' => 'NUMERIC', 'value' => sanitize_text_field(str_replace(",", "", $_GET["odometerMin"])), 'compare' => '>=')); } if(!empty($_GET["odometerMax"])){ array_push($filter, array('key' => 'odometer', 'type' => 'NUMERIC', 'value' => sanitize_text_field(str_replace(",", "", $_GET["odometerMax"])), 'compare' => '<=')); } //end mileage if(!empty($_GET["yearSearch"])){ array_push($filter, array('key' => 'year', 'type' => 'NUMERIC', 'value' => explode(",", $_GET["yearSearch"]), 'compare' => 'IN')); } if(!empty($_GET["features"])){ $bFeatures = explode(",", $_GET["features"]); for($f = 0; $f < count($bFeatures); $f++){ array_push($filter, array('key' => 'features', 'value' => $bFeatures[$f], 'compare' => 'LIKE')); } } if(!empty($_GET["fuel"])){ array_push($filter, array('key' => 'fuel', 'value' => explode(",", $_GET["fuel"]), 'compare' => 'IN')); } if(!empty($_GET["make"])){ array_push($filter, array('key' => 'make', 'value' => explode(",", $_GET["make"]), 'compare' => 'IN')); } if(!empty($_GET["model"])){ array_push($filter, array('key' => 'model', 'value' => explode(",", $_GET["model"]), 'compare' => 'IN')); } if(!empty($_GET["color"])){ array_push($filter, array('key' => 'color', 'value' => explode(",", $_GET["color"]), 'compare' => 'IN')); } if(!empty($_GET["transmission"])){ array_push($filter, array('key' => 'transmission', 'value' => explode(",", $_GET["transmission"]), 'compare' => 'IN')); } $totalVehicles = get_posts(array('posts_per_page' => -1, 's' => $_GET["global"], 'post_type' => 'inventory', 'meta_query' => array('relation' => 'AND', $filter), 'orderby' => 'ASC')); if(count($totalVehicles) == 0){ $totalVehicles = get_posts(array('posts_per_page' => -1, 'post_type' => 'inventory', 'meta_query' => array('relation' => 'AND', array('key' => 'stock', 'value' => $_GET["global"], 'compare' => 'LIKE'), $filter), 'orderby' => 'ASC')); } $paged = (get_query_var('paged')) ? get_query_var('paged') : 1; $post_count = count($totalVehicles); $posts_per_page = 9; $num_pages = ceil($post_count / $posts_per_page); if(!empty($_GET["sort"])){ $bSort = explode("|", $_GET["sort"]); $meta_key = $bSort[0]; $meta_value_text = "meta_value_num"; $meta_value = $bSort[1]; }else{ $meta_key = "price"; $meta_value_text = "meta_value_num"; $meta_value = "DESC"; } $arg = array('posts_per_page' => $posts_per_page, 'paged' => $paged, 's' => $_GET["global"], 'post_type' => 'inventory', 'meta_query' => array( 'relation' => 'AND', 'sort_general' => array( 'key' => 'has_photos', 'compare' => 'EXISTS' ), 'sort_filter' => array( 'key' => $meta_key, 'type' => 'NUMERIC', 'compare' => 'EXISTS' ), $filter), 'orderby' => array('sort_general' => 'DESC', 'sort_filter' => $meta_value)); $posts = get_posts($arg); if(count($posts) == 0){ //IF FIRST JOB DOESN'T RETURN ANYTHING, SEARCH BY STOCK # $arg = array('posts_per_page' => $posts_per_page, 'paged' => $paged, 'post_type' => 'inventory', 'meta_query' => array( 'relation' => 'AND', 'sort_general' => array( 'key' => 'has_photos', 'compare' => 'EXISTS' ), 'sort_filter' => array( 'key' => $meta_key, 'type' => 'NUMERIC', 'compare' => 'EXISTS' ), array('key' => 'stock', 'value' => $_GET["global"], 'compare' => 'LIKE'), $filter), 'orderby' => array('sort_general' => 'DESC', 'sort_filter' => $meta_value)); $posts = get_posts($arg); }
- The topic ‘Search – Server – Issue’ is closed to new replies.