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.
You can add your own rewrite rule which will let you tweak the query via URL parameters:
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:
You can use
add_rewrite_tag
to register your custom query variable (‘id’ in question):(The regex tells it only to accepts digits). Then to create your rewrite rule you can use
add_rewrite_rule
(both of these should be hooked onto
init
).where 1234 is the ID of your ‘photos’ page. You will need to flush rewrite rules once after adding these (go to the Permalink settings page). Then as @DanielBachhuber says, you can use out
get_query_var( 'id' )
to get the ID.Note, while the regex in the
add_rewrite_tag
means this will only accept digits – you should probably still sanitize withintval
(in any case it may be a string representation of a digit).Depending on how the rules are being generated, you can use the get_query_var() function to get the value of the ‘photo’ query var. If it’s done properly, ‘photo’ should be an available query var. You’ll need to sanitize the value with intval() or similar of course.
After many days of doing research on this, the answer was this simple:
wrap that in an
intval
and viola.Hi Guys this is what worked for me:
The base value is what really works the magic. No need to make any changes to the base value. I was pointed in the right direction by reading this post: https://wordpress.org/support/topic/plugin-simple-pagination-page2-and-_get-parameters