Read more on custom rewrite rules and the rewrite API: https://codex.wordpress.org/Rewrite_API/add_rewrite_rule
I needed to render a page with various url parameters to set the og/meta tags properly. So for example: http://url.com/share/?content_id=188&share_id=abc1234&img_count=3. Facebook will ignore everything after ‘share/’, effectively breaking my shit. So using the following, I can make a prettier url to render that content and facebook/twitter should scrape it just fine:
// needed a function to get a page ID based on the page slug (in this case 'share') because the ID will not be consistent across environments function get_id_by_slug($page_slug) { $page = get_page_by_path($page_slug); if ($page) { return $page->ID; } else { return null; } } function custom_rewrite_tag() { add_rewrite_tag('%content_id%', '([^&]+)'); add_rewrite_tag('%share_id%', '([^&]+)'); add_rewrite_tag('%img_count%', '([^&]+)'); } add_action('init', 'custom_rewrite_tag', 10, 0); function share_rewrite() { $share_page_id = get_id_by_slug('share'); add_rewrite_rule('^share/([^/]*)/([^/]*)/([^/]*)/?','index.php?page_id='.$share_page_id.'&content_id=$matches[1]&share_id=$matches[2]&img_count=$matches[3]','top'); add_rewrite_rule('^share/([^/]*)/([^/]*)/?','index.php?page_id='.$share_page_id.'&content_id=$matches[1]&share_id=$matches[2]','top'); } add_action('init', 'share_rewrite', 10, 0);