Scott Fell
asked on
Adding Multiple Custom urls in Wordpress
Currently the way I am adding custom urls in wordpress is
functions.php
If I want to have multiple custom urls, I find I have to do the same thing twice like
functions.php
That works, how can I do this in just one function for adding custom urls
I have tried different combinations and can't seem to make this fully functional.
functions.php
function custom_rewrite_rule() {
add_rewrite_rule('^custompage/([^/]*)/([^/]*)/?','index.php?page_id=1933¶m1=$matches[1]¶m2=$matches[2]','top');
}
add_action('init', 'custom_rewrite_rule', 10, 0);
add_filter('query_vars', function($vars) {
$vars[] = "param1";
$vars[] = "param2";
return $vars;
});
If I want to have multiple custom urls, I find I have to do the same thing twice like
functions.php
function custom_rewrite_rule() {
add_rewrite_rule('^custompage/([^/]*)/([^/]*)/?','index.php?page_id=1933¶m1=$matches[1]¶m2=$matches[2]','top');
}
add_action('init', 'custom_rewrite_rule', 10, 0);
add_filter('query_vars', function($vars) {
$vars[] = "param1";
$vars[] = "param2";
return $vars;
});
// short code to generate data for mysite.com/custompage/
function custom_rewrite_rule_two() {
add_rewrite_rule('^new_custompage/([^/]*)/?','index.php?page_id=2034¶m1=$matches[1]','top');
}
add_action('init', 'custom_rewrite_rule_two', 10, 0);
add_filter('query_vars', function($vars) {
$vars[] = "param1";
return $vars;
});
// short code to generate data for mysite.com/new_custompage/
That works, how can I do this in just one function for adding custom urls
function custom_rewrite_rule() {
add_rewrite_rule('^custompage/([^/]*)/([^/]*)/?','index.php?page_id=1933¶m1=$matches[1]¶m2=$matches[2]','top');
add_rewrite_rule('^new_custompage/([^/]*)/?','index.php?page_id=2034¶m3=$matches[3]','top');
}
add_action('init', 'custom_rewrite_rule', 10, 0);
add_filter('query_vars', function($vars) {
$vars[] = "param1";
$vars[] = "param2";
$vars[] = "param3";
return $vars;
});
I have tried different combinations and can't seem to make this fully functional.
ASKER
Julian,
I have to integrate dynamic data/html into an already established theme where the dynamic data is coming from a data source not associated with the WP DB.
What I am doing is creating a page in the current theme and throwing in a shortcode in the body. In WP, I have a page called custompage that contains the shortcode. Using mysite.com/custompage/para m1/param2 I am using the two parameters to filter data.
The shortcode function is
I have to integrate dynamic data/html into an already established theme where the dynamic data is coming from a data source not associated with the WP DB.
What I am doing is creating a page in the current theme and throwing in a shortcode in the body. In WP, I have a page called custompage that contains the shortcode. Using mysite.com/custompage/para
The shortcode function is
add_shortcode( 'short_code', 'short_code_func' );
short_code_func{
$param1= get_query_var( 'param1' );
$param2= get_query_var( 'param2' );
return $param1.' '.$param2;
}
add_shortcode( 'other_short_code', 'other_short_code_func' );
other_short_code_func{
$param3= get_query_var( 'param3' );
return $param3;
}
Ok, but I am confused as to how that is tying into the add_rewrite_rule()
I had no problem with this
I had no problem with this
function custom_rewrite_rule() {
add_rewrite_rule('^abc/([0-9]+)/?', 'index.php?page_id=$matches[1]', 'top');
add_rewrite_rule('^def/([0-9]+)/?', 'index.php?page_id=$matches[1]', 'top');
}
add_action('init', 'custom_rewrite_rule', 10, 0);
However, I did have to go to settings => permalinks [SAVE] before the above would work.
ASKER
Yes, every time you make an update to the rewrite rule you need to save the permalinks which runs flush_rewrite_rules();.
The issue I am having that I did not make clear is getting the parameters.
If I have
Then on the shortcode function for each of custompage and new_custompage, accessing the parameters is where I am having trouble. If I run as separate functions it works, but it seems all of these can be in one function. Actually the first rule for custompage I can access param1 and param2. But it does not work for new_custompage. The parameter is null.
I have also tried
Note that I am using index.php?page_id=1933 as the filter so each is specific to a page.
The issue I am having that I did not make clear is getting the parameters.
If I have
function custom_rewrite_rule() {
add_rewrite_rule('^custompage/([^/]*)/([^/]*)/?','index.php?page_id=1933¶m1=$matches[1]¶m2=$matches[2]','top');
add_rewrite_rule('^new_custompage/([^/]*)/?','index.php?page_id=2034¶m3=$matches[3]','top');
}
add_action('init', 'custom_rewrite_rule', 10, 0);
add_filter('query_vars', function($vars) {
$vars[] = "param1";
$vars[] = "param2";
$vars[] = "param3";
return $vars;
});
Then on the shortcode function for each of custompage and new_custompage, accessing the parameters is where I am having trouble. If I run as separate functions it works, but it seems all of these can be in one function. Actually the first rule for custompage I can access param1 and param2. But it does not work for new_custompage. The parameter is null.
I have also tried
add_rewrite_rule('^custompage/([^/]*)/([^/]*)/?','index.php?page_id=1933¶m1=$matches[1]¶m2=$matches[2]','top');
add_rewrite_rule('^new_custompage/([^/]*)/?','index.php?page_id=2034¶m3=$matches[1]','top');
Note that I am using index.php?page_id=1933 as the filter so each is specific to a page.
ASKER
The URL will look like mysite.com/custompage/abc/ 123xyz And I need to extract the two parameters abc and 123xyz
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
Perfect solution!
ASKER
Thank you! This is what I used.
1. Why not add this directly to .htaccess?
2. What is the purpose of the query_vars hook?