Take the 2-minute tour ×
WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. It's 100% free, no registration required.

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.

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;
        }

        ...

}
share|improve this question
add comment

1 Answer

up vote 2 down vote accepted

The problem is that the canonical url on all of those pages is http://www.lbjrealestate.com/property/. You either need to generate a custom canonical link for your pages, or provide an og:url tag for Facebook to read. Enter your url in the debugger to see what Facebook sees.

share|improve this answer
    
I removed the canonical url from the header and everything works as expected. Thanks! –  miah Jul 31 '12 at 3:07
add comment

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.