WordPress.org

Forums

I'm stuck with a search filter (dynamic) (4 posts)

  1. noah2003
    Member
    Posted 1 year ago #

    Hi guys,

    This is my first wordpress site and i am stuck with the php code.

    Here is the problem. I installed ACF and created a taxonomy with the state and city. So if i submit a listing and select a state you get to see only the cities in that state. So far so good.

    On the main site i have a advanced search bar with the different select fields in them. So far so good.

    The problem is i want to have the same option on the front end. So if somebody chooses a state they should only see the city from that state. I do not know what sort of code i should use for that. I guess it should be something like.. if state x then city x and then the options below.

    I hope that somebody can help me with this. Below are 2 php files which are used for the search bar.

    Advanced search.php

    <?php

    function query_set_only_author( $wp_query ) {
    global $current_user;
    if ( is_admin() && !current_user_can('manage_options') ) {
    $wp_query->set( 'author', $current_user->ID );
    }
    }
    add_action('pre_get_posts', 'query_set_only_author' );

    global $ct_options;
    $layout = $ct_options['ct_homepage_adv_search']['enabled'];

    ?>

    <h3 class="marT0 marB0"><?php _e('Find your new home', 'contempo'); ?></h3>
    <p class="marB0"><?php $count_posts = wp_count_posts('listings'); $published_listings = $count_posts->publish; ?><?php echo $published_listings ?> <?php _e('Real Estate Listings, Homes for Sale & Rental Properties.', 'contempo'); ?></p>

    <form id="advanced_search" name="search-listings" action="<?php echo home_url(); ?>">

    <?php

    if ($layout) :

    foreach ($layout as $key=>$value) {

    switch($key) {

    // City
    case 'city' : ?>
    <div class="left">
    <label for="ct_city"><?php _e('City', 'contempo'); ?></label>
    <?php ct_search_form_select('city'); ?>
    </div>
    <?php
    break;

    // State
    case 'state' : ?>
    <div class="left">
    <label for="ct_state"><?php _e('State', 'contempo'); ?></label>
    <?php ct_search_form_select('state'); ?>
    </div>
    <?php
    break;

    // Zipcode
    case 'zipcode' : ?>
    <div class="left">
    <label for="ct_zipcode"><?php _e('Zipcode', 'contempo'); ?></label>
    <?php ct_search_form_select('zipcode'); ?>
    </div>
    <?php
    break;

    // Beds
    case 'beds' : ?>
    <div class="left">
    <label for="ct_beds"><?php _e('Slaapkamers', 'contempo'); ?></label>
    <?php ct_search_form_select('field_532ab786c3410'); ?>
    </div>
    <?php
    break;

    // Baths
    case 'baths' : ?>
    <div class="left">
    <label for="ct_baths"><?php _e('Baths', 'contempo'); ?></label>
    <?php ct_search_form_select('baths'); ?>
    </div>
    <?php
    break;

    // Status
    case 'status' : ?>
    <div class="left">
    <label for="ct_status"><?php _e('Status', 'contempo'); ?></label>
    <?php ct_search_form_select('ct_status'); ?>
    </div>
    <?php
    break;

    // Additional Features
    case 'additional_features' : ?>
    <div class="left">
    <label for="ct_additional_features"><?php _e('Addtional Features', 'contempo'); ?></label>
    <?php ct_search_form_select('additional_features'); ?>
    </div>
    <?php
    break;

    // Price From
    case 'price_from' : ?>
    <div class="left">
    <label for="ct_price_from"><?php _e('Price From', 'contempo'); ?> (<?php currency(); ?>)</label>
    <input type="text" id="ct_price_from" class="number" name="ct_price_from" size="8" />
    </div>
    <?php
    break;

    // Price To
    case 'price_to' : ?>
    <div class="left">
    <label for="ct_price_to"><?php _e('Price To', 'contempo'); ?> (<?php currency(); ?>)</label>
    <input type="text" id="ct_price_to" class="number" name="ct_price_to" size="8" />
    </div>
    <?php
    break;

    // MLS
    case 'mls' : ?>
    <div class="left">
    <label for="ct_mls"><?php _e('MLS #', 'contempo'); ?></label>
    <input type="text" id="ct_mls" name="ct_mls" size="12" />
    </div>
    <?php
    break;

    }

    }

    ?>

    <div class="left">
    <label for="provincie"><?php _e('State', 'contempo'); ?></label>
    <select name="provincie">
    <option value=''>Maak een keuze</option>
    <option value='drenthe'>Drenthe</option>
    <option value='flevoland'>Flevoland</option>
    <option value='friesland'>Friesland</option>
    <option value='gelderland'>Gelderland</option>
    <option value='groningen'>Groningen</option>
    <option value='limburg'>Limburg</option>
    <option value='noord-brabant'>Noord Brabant</option>
    <option value='overijssel'>Overijssel</option>
    <option value='utrecht'>Utrecht</option>
    <option value='zeeland'>Zeeland</option>
    <option value='zuid-holland'>Zuid Holland</option>
    </select>
    </div>

    <?php
    ?>

    <div class="left">
    <label for="city"><?php _e('City', 'contempo'); ?></label>
    <select name="woonplaatsen_drenthe">
    <option value=''>Maak een keuze</option>
    <option value='alteveer'>Alteveer</option>
    <option value='flevoland'>Flevoland</option>
    <option value='friesland'>Friesland</option>
    <option value='gelderland'>Gelderland</option>
    <option value='groningen'>Groningen</option>
    <option value='limburg'>Limburg</option>
    <option value='noord-brabant'>Noord Brabant</option>
    <option value='overijssel'>Overijssel</option>
    <option value='utrecht'>Utrecht</option>
    <option value='zeeland'>Zeeland</option>
    <option value='zuid-holland'>Zuid Holland</option>
    </select>
    </div>

    <?php

    ?>

    <div class="left">
    <label for="type_woning"><?php _e('Type Woning', 'contempo'); ?></label>
    <select name="type_woning">
    <option value=''>Maak een keuze</option>
    <option value='eengezinswoning'>Eengezinswoning</option>
    <option value='grachtenpand'>Grachtenpand</option>
    <option value='herenhuis'>Herenhuis</option>
    <option value='tussenwoning'>Tussenwoning</option>
    <option value='woning'>Woning</option>
    <option value='twee-onder-een-kap'>Twee onder één kap</option>
    <option value='hoekwoning'>Hoekwoning</option>
    <option value='vrijstaande_woning'>Vrijstaande woning</option>
    <option value='bungalow'>Bungalow</option>
    <option value='landhuis'>Landhuis</option>
    <option value='villa'>Villa</option>
    <option value='woonboerderij'>Woonboerderij</option>
    <option value='appartement'>Appartement</option>
    <option value='kamer'>Kamer</option>
    <option value='penthouse'>Penthouse</option>
    <option value='serviceflat'>Serviceflat</option>
    <option value='studio'>Studio</option>
    <option value='recreatiewoning'>Recreatiewoning</option>
    </select>
    </div>

    <?php endif; ?>

    <input type="hidden" name="search-listings" value="true" />
    <input id="submit" class="btn left" type="submit" value="<?php _e('Search', 'contempo'); ?>" />

    <div class="clear"></div>

    </form>

    2. Search listing.php

    <?php

    global $ct_options;
    $layout = $ct_options['ct_layout'];

    /*-----------------------------------------------------------------------------------*/
    /* Query multiple taxonomies */
    /*-----------------------------------------------------------------------------------*/

    $taxonomies_to_search = array(
    'beds' => 'Beds',
    'baths' => 'Bathrooms',
    'property_type' => 'Property Type',
    'ct_status' => 'Status',
    'state' => 'State',
    'zipcode' => 'Zipcode',
    'city' => 'City',
    'additional_features' => 'Additional Features'
    );

    $search_values = array();

    foreach ($taxonomies_to_search as $t => $l) {
    $var_name = 'ct_'. $t;

    if (!empty($_GET[$var_name])) {
    $search_values[$t] = utf8_encode($_GET[$var_name]);
    }
    }

    $search_values['post_type'] = 'listings';
    $search_values['paged'] = (get_query_var('paged')) ? get_query_var('paged') : 1;

    $search_num = $ct_options['ct_listing_search_num'];
    $search_values['showposts'] = $search_num;

    $mode = 'search';

    // Check Price From/To
    if (!empty($_GET['ct_price_from']) && !empty($_GET['ct_price_to'])) {
    $ct_price_from = str_replace(',', '', $_GET['ct_price_from']);
    $ct_price_to = str_replace(',', '', $_GET['ct_price_to']);
    $search_values['meta_query'] = array(
    array(
    'key' => '_ct_price',
    'value' => array( $ct_price_from, $ct_price_to ),
    'type' => 'numeric',
    'compare' => 'BETWEEN'
    )
    );
    }
    else if (!empty($_GET['ct_price_from'])) {
    $ct_price_from = str_replace(',', '', $_GET['ct_price_from']);
    $search_values['meta_query'] = array(
    array(
    'key' => '_ct_price',
    'value' => $ct_price_from,
    'type' => 'numeric',
    'compare' => '>='
    )
    );
    }
    else if (!empty($_GET['ct_price_to'])) {
    $ct_price_to = str_replace(',', '', $_GET['ct_price_to']);
    $search_values['meta_query'] = array(
    array(
    'key' => '_ct_price',
    'value' => $ct_price_to,
    'type' => 'numeric',
    'compare' => '<='
    )
    );
    }

    if(!empty($_GET['type_woning']))
    $search_values['meta_query'][]=array(
    'key' => 'type_woning',
    'compare' => '==',
    'value' => $_GET['type_woning'],
    );

    if(!empty($_GET['kamers']))
    $search_values['meta_query'][]=array(
    'key' => 'kamers',
    'compare' => '==',
    'value' => $_GET['kamers'],
    );

    if(!empty($_GET['provincie']))
    $search_values['meta_query'][]=array(
    'key' => 'provincie',
    'compare' => '==',
    'value' => $_GET['provincie'],
    );

    if(!empty($_GET['woonplaatsen_drenthe']))
    $search_values['meta_query'][]=array(
    'key' => 'woonplaatsen_drenthe',
    'compare' => '==',
    'value' => $_GET['woonplaatsen_drenthe'],
    );
    /*-----------------------------------------------------------------------------------*/
    /* Check to see if reference number matches */
    /*-----------------------------------------------------------------------------------*/

    if (!empty($_GET['ct_mls'])) {
    $ct_mls = $_GET['ct_mls'];
    $search_values['meta_query'] = array(
    array(
    'key' => '_ct_mls',
    'value' => $ct_mls,
    'type' => 'numeric',
    'compare' => '='
    )
    );
    }

    global $wp_query;

    /*-----------------------------------------------------------------------------------*/
    /* Save the existing query */
    /*-----------------------------------------------------------------------------------*/

    $existing_query_obj = $wp_query;

    $wp_query = new WP_Query( $search_values );
    $total_results = $wp_query->found_posts;
    unset($search_values['post_type']);
    unset($search_values['paged']);
    unset($search_values['showposts']);

    /*-----------------------------------------------------------------------------------*/
    /* Prepare the title string by looping through
    all the values we're going to query and put them together */
    /*-----------------------------------------------------------------------------------*/

    $search_params = '';
    $loop = 0;
    foreach ($search_values as $t => $s) {
    if ($loop == 1) {
    $search_params .= ', ';
    } else {
    $loop = 1;
    }

    $term = get_term_by('slug',$s,$t);
    $name = $term->name;

    $search_params .= $name;
    }

    get_header();

    echo '<header id="archive-header" class="marB40">';
    echo '<div class="container">';
    echo '<h2 class="marT0 marB0 left">';
    echo $total_results;
    echo ' ';
    if($total_results != '1') { _e('listings found', 'contempo'); } else { _e('listing found', 'contempo'); }
    echo '</h2>';
    echo ct_breadcrumbs();
    echo '<div class="clear"></div>';
    echo '</div>';
    echo '</header>';

    echo '<div class="container">';

    echo '<div class="searching-on">';
    echo '<span class="searching">' . __('Searching:', 'contempo') . '</span>';
    if($search_params !="") {
    echo '<span class="search-params">' . $search_params . '</span>';
    } else {
    echo '<span class="search-params">' . __('All listings', 'contempo') . '</span>';
    }
    echo '</div>';

    // Start Search Results Map
    if($ct_options['ct_disable_google_maps'] == 'No') {
    echo '<div id="map-wrap">';

    wp_reset_postdata();

    $search_values['post_type'] = 'listings';
    $search_values['paged'] = (get_query_var('paged')) ? get_query_var('paged') : 1;
    $search_values['showposts'] = $search_num;
    $wp_query = new wp_query( $search_values );

    search_results_map();

    // End Search Results Map
    echo '</div>';
    }

    // Left Sidebar
    if($layout == 'left-sidebar') {
    echo '<div id="sidebar" class="col span_3 first">';
    if (function_exists('dynamic_sidebar') && dynamic_sidebar('Listings Search Left') ) :else: endif;
    echo '</div>';
    } ?>

    <div id="listings-results" class="col span_9 <?php if($ct_options['ct_listings_layout'] == 'Grid') { echo 'grid'; } else { echo 'list'; } ?> <?php if($ct_options['ct_layout'] == 'right-sidebar') { echo 'first'; } ?>">

    <?php

    // Reset Query for Listings
    wp_reset_query();
    wp_reset_postdata();

    $search_values['post_type'] = 'listings';
    $search_values['paged'] = (get_query_var('paged')) ? get_query_var('paged') : 1;
    $search_values['showposts'] = $search_num;
    $wp_query = new wp_query( $search_values );

    if($ct_options['ct_listings_layout'] == 'Grid') {
    get_template_part( 'layouts/grid');
    } else {
    get_template_part( 'layouts/list');
    }

    // End Search Results Map
    echo '</div>';

    // Restore WP_Query object
    $wp_query = $existing_query_obj;

    // Right Sidebar
    if($layout == 'right-sidebar') {
    echo '<div id="sidebar" class="col span_3">';
    if (function_exists('dynamic_sidebar') && dynamic_sidebar('Listings Search Right') ) :else: endif;
    echo '</div>';
    }

    echo '</div>';

    get_footer(); ?>

  2. noah2003
    Member
    Posted 1 year ago #

    up

  3. noah2003
    Member
    Posted 1 year ago #

    Anybody?

  4. kljzs
    Member
    Posted 11 months ago #

    I have the same problem. Have you a solution?

Topic Closed

This topic has been closed to new replies.

About this Topic