Custom Pretty URL in WordPress

This tutorial will help to create a pretty customized URL for wordpress post. ‘generate_rewrite_rules’ action is used to create a new URL format and ‘WP_Rewrite’ is WordPress class for managing the rewrite rules that allow you to use Pretty Permalinks feature.

Generate Pretty URL

add_action('admin_init', 'flush_rewrite_rules');
add_action('generate_rewrite_rules', 'custom_pretty_url_rewrite_rules');

function custom_pretty_url_rewrite_rules( $wp_rewrite )
	$new_rules = array(
		/** tag1, tag2 search **/		
		'find/(.+)/(.+)' => 'index.php?tag=' . $wp_rewrite->preg_index(2) . '&tag2=' .$wp_rewrite->preg_index(1),
		/** post_type, city taxonomy search **/
		'find/(.+)/(.+)' => 'index.php?post_type=' . $wp_rewrite->preg_index(2) . '&city=' .$wp_rewrite->preg_index(1),

		/** city location and tag using --in--keyword **/
		'find/(.+)/(.+)--in--(.+)' => 'index.php?tag=' . $wp_rewrite->preg_index(2) . '&city=' .$wp_rewrite->preg_index(1). '&location=' .$wp_rewrite->preg_index(3)
	// Merge URL Rules
	$wp_rewrite->rules = $new_rules + $wp_rewrite->rules;

Sample URL

//tag1, tag2 search
//post_type, city taxonomy search
//city location and tag using --in-- keyword

Retrieving the Value of a Pretty URL

We can now retrieve the value of rewritten query string variables using WordPress’s $wp_query variable.
Use the follow format to get the variable values

add_filter( 'query_vars','my_insert_query_vars' );
function my_insert_query_vars( $vars )
    array_push($vars, 'tag2');
    array_push($vars, 'city');
    array_push($vars, 'location');
    return $vars;
'$_GET' will not work to get the variable values for pretty URL.