How to get wordpress link to fully evaluate when coming from facebook

The short version:

Any link from Facebook to a page stops evaluating at the “hardcoded page” in the wordpress press install, ignoring the remaining parts of the URL. It doesn’t allow the shortcode I wrote, that autogenerates the content on a page for any realestate listing in an external table, to evaluate.

Read More

The Long Version

I’ve created a wordpress plugin that displays the content (real estate listings) from an external database, which works as intended. I use a shortcode to show any of the individual listings on a single page ie: http://www.lbjrealestate.com/property/Horseshoe-Bay/Horseshoe-Bay-P/1104-unit-3-The-Cape/119526/

This all works spectacularly, until you try to post a link to the property from facebook. FB evaluates the above link only up till the page that exists in wordpress (http://www.lbjrealestate.com/property/) which then renders the title to be “No properties match that mls number”, and as you might expect, this is a problem. (aside: google+ handles the link just fine)

Other potentially relevant info: I’m not using a custom post type, rather, I’ve created a page that has a shortcode on it.

Here is the initialization portion of the plugin, what am I missing?

class property_search {
        static $add_script;

        static function init() {
            add_action( 'wp_loaded', array(__CLASS__, 'ps_flush_rules' ));
            add_filter( 'rewrite_rules_array', array(__CLASS__, 'ps_insert_rewrite_rules' ));
            add_filter( 'query_vars', array(__CLASS__, 'ps_insert_query_vars' ));

            add_filter( 'the_title', 'do_shortcode' );
            add_filter( 'wp_title', 'do_shortcode' );

            add_shortcode('show_property', array(__CLASS__, 'property_shortcode'));
            add_shortcode('property_title', array(__CLASS__, 'property_title_shortcode'));
        }

        static function ps_flush_rules() {
            $rules = get_option( 'rewrite_rules' );

            if ( ! isset( $rules['(property)/(.+)$'] ) || ! isset( $rules['(properties)/(.+)$'] ) ) {
                global $wp_rewrite;
                $wp_rewrite->flush_rules();
            }
        }

        static function ps_insert_rewrite_rules( $rules ) {
            $newrules = array();
            $newrules['(property)/(.+)$'] = 'index.php?pagename=$matches[1]&property=$matches[2]';
            $newrules['(properties)/(.+)$'] = 'index.php?pagename=$matches[1]&geolocation=$matches[2]';
            return $newrules + $rules;
        }

        static function ps_insert_query_vars( $vars ) {
            array_push($vars, 'property');
            array_push($vars, 'geolocation');
            return $vars;
        }

        ...

}

Related posts

Leave a Reply

1 comment