rewrite rules and querystring

When I go to the url mysite.com/photos/120 I’m wanting to get the 120 out.

In the PHP I want to be able to grab these “parameters” like the url was mysite.com?page=photos&id=120 or even just mysite.com/photos?id=120

Can I leverage rewrite rules? Or do I need to do regex in php to get what I want?

**** EDIT 1 ****

For the life of me I can’t get this to work. Based on the answers given here is what I have so far:

add_action( 'init', 'rewrite_photo_url' );
function rewrite_photo_url() {
    add_rewrite_rule( '^photos/([^/]*)/?','index.php?page=photos&photo_id=$matches[1]', 'top' );
}

add_rewrite_tag('%id%','([0-9]+)');

print(get_query_var('photo_id'));

I suspect I’m missing a concept somewhere?

**** EDIT 2 ****

I’m starting to see that perhaps this needs to be in functions.php so I now have:

function rewrite_photo_url() {
    add_rewrite_rule( '^photos/([^/]*)/?','index.php?page=photos&photo_id=$matches[1]', 'top' );
}
function register_custom_query_vars( $vars ) {
    array_push( $vars, 'photo_id' );
    return $vars;
}

add_action( 'init', 'rewrite_photo_url');
add_filter( 'query_vars', 'register_custom_query_vars', 1 );

Now I just need to know how to get my desired var in my page template. I’ve tried

print(get_query_var('photo_id'));

But that’s not doing the trick.

5 s
5

You can add your own rewrite rule which will let you tweak the query via URL parameters:

add_action( 'init', 'rewrite_photo_url' );
function rewrite_photo_url() {
    add_rewrite_rule( 'photos/([^/]+)/?$','index.php?page=photos&photo_id=$matches[1]', 'top' );
}

If you need to use a custom variable, i.e. ‘photo_id’, you have to register the variable so it will be recognized by the query:

add_filter( 'query_vars', 'register_custom_query_vars', 1 );
function register_custom_query_vars( $vars ) {
    array_push( $vars, 'photo_id' );
    return $vars;
}

Leave a Comment