• Resolved melon503

    (@melon503)


    I have managed to alter the events-manager queries so that I can search for a zip code within a certain radius, and that information is now being output in the query as an alias called HowFar. The problem I’m having is figuring out how to display that output on the page. From what I gather, I need to create a placeholder, but I have not been able to figure out how to do that. Seems like it would be the easiest part.

    Any suggestions are much appreciated.

    http://wordpress.org/extend/plugins/events-manager/

Viewing 12 replies - 1 through 12 (of 12 total)
  • a working sample snippet

    add_filter('em_location_output_placeholder','my_em_location_longitude_placeholders',1,3);
    function my_em_location_longitude_placeholders($replacement, $EM_Location, $result){
        global $wp_query, $wp_rewrite;
        switch( $result ){
    	case '#_LOCATIONLONGITUDE':
    		$replacement = $EM_Location->location_longitude;
    		break;
    	} 
    
        return $replacement;
    }

    For more info:
    http://wp-events-plugin.com/tutorials/create-a-custom-placeholder-for-event-formatting/

    Thread Starter melon503

    (@melon503)

    Very helpful agelonwl – thanks a ton for taking the time to post this.

    Would you share this with us, melon503?
    I would like to add the same option to my events manager.

    How did you alter the queries so that you can search for a zip code within a certain radius??

    Hey melon503, I know this is from 2 months ago, but this is exactly what I need to implement in my site. Would you mind sharing how you implemented the zipcode radius search?

    Thread Starter melon503

    (@melon503)

    Hey All,

    I’m not claiming that this is a clean way to do this, but basically I used the existing postcode field and then added the following to line 231 of em-events.php :

    // this filter adds the logic to the SQL query to take the postcode and compare it to the lat / lng of the location.
    add_filter( 'em_events_build_sql_conditions', 'my_em_scope_conditions',1,2);
    function my_em_scope_conditions($conditions, $args){
    	if( !empty($args['postcode']) ){
    
    	$base_url = "http://maps.google.com/maps/geo?output=xml&key=[your google key here]";
    
        $request_url = $base_url . "&q=" . urlencode($args['postcode']);
        $xml = simplexml_load_file($request_url);
    
        $status = $xml->Response->Status->code;
        if (strcmp($status, "200") == 0) {
          // Successful geocode
          $geocode_pending = false;
          $coordinates = $xml->Response->Placemark->Point->coordinates;
          $coordinatesSplit = split(",", $coordinates);
          // Format: Longitude, Latitude, Altitude
          $lat = $coordinatesSplit[1];
          $lng = $coordinatesSplit[0];
          $radius=$input_radius;
    	}
    	$conditions['scope'] = " (3956 * 2 * ASIN(SQRT(POWER(SIN(('".$lat."' - abs(location_latitude))*pi()/180/2),2) + COS('".$lat."' * pi()/180) * COS(abs(location_latitude) * pi()/180) * POWER(SIN(('".$lng."' - location_longitude) * pi()/180/2),2))) < '".$radius."')";	
    
    	}
    	return $conditions;
    }

    [Moderator Note: Please post code or markup snippets between backticks or use the code button.]

    Plugin Author Marcus (aka @msykes)

    (@netweblogic)

    That’s along the lines of how I imagined that going (maybe better?)

    Thanks for contributing, I’ll test that out and integrate!

    I’m a complete beginner at PHP and am stuck.

    I’ve loaded em-events.php into a php editor, found line 231, added the code above (with a change to match Google Maps API 3 as below) immediately after it, but no postcode box shows on the Events page where all the search parameters are.

    My revised API line is:
    $base_url = "http://maps.googleapis.com/maps/api/geocode/xml?address";

    Could someone please let me know what I’m doing wrong?

    I’m expecting to see an input box for postcode and radius – is that right please?

    It would also help me if someone who has it working could post the actual line 231 referenced, just in case the editor I’ve used is doing something different.

    Thanks in advance!

    adzay

    (@adzay)

    Hi Marcus,

    I want to implement this into the Events-Search form.
    Which document in Events manager website will tell me how to use filters for searching?

    adzay

    (@adzay)

    Never mind I found it 🙂

    http://wp-events-plugin.com/tutorials/create-your-own-event-scope/

    Alan604 ..I think you make it into a scope ( the link above) and then add it to the EM_EVENTS::output.

    Then you need to create form fields.. one with the name “postcode”. I haven’t figured out where you put in the radius yet though.

    ( It may not work though. I’m not good at php I only learn through trial and error lol)

    Marcus, was you able to try this out. Are there any caveats that I should worry about. I’m at work at the moment but eager to try it out when I get home.

    adzay

    (@adzay)

    I just had a thought about this. Does the original code that Melon made mean that whenever you enter in your postcode, it will ALWAYS give you results within a predefined radius?

    Plugin Author Marcus (aka @msykes)

    (@netweblogic)

    We’ve been looking into this, and it turns out that the code above doesn’t work, because it uses a defunct Google API. The new API requires payments, so we’re looking into a JS alternative so there’s no request limits. Also, $input_radius isn’t defined (it = miles)

    That said, once you have the correct long/lat the second part of the snippet should work.

    I think the code was altered from here – http://jebaird.com/blog/calculating-distance-miles-latitude-and-longitude

    Chances are using geonames would also work. The tricky part is actually finding the lng/lat values of the location the user is searching

    inula

    (@janetb)

    Hired a php-programmer who made a postcode-distance check for me in Events-Manager. This doesn’t work anymore and now I understand why: he used the Google API.

    Anyway, all the adjustments generate a lot of work with every update. So I hope the zipcode check will be in Events-manager soon.

Viewing 12 replies - 1 through 12 (of 12 total)
  • The topic ‘[Plugin: Events Manager] add simple placeholder for zip code distance’ is closed to new replies.