Rewrite rule for permalink on wordpress - wordpress

I am working on a wordpress site that is running in a subdomain.
I have added the subfolder on WP .htaccess file to let all the site and permalinks work, so my WP site is running under
http://example.com/subfolder/
Now I need to do the following:
I have this permalink structure that goes to a post:
example.com/subfolder/the-post-permalink
And I need to add a rule that send this URL:
example.com/subfolder/the-post-permalink-category
to:
example.com/subfolder/the-post-permalink?param=category
So the post page displayed will be the same, but I will get a GET parameter with "param" value that was sent in the rewrite rule.
I have tried this with the add_rewrite_rule() method on the functions.php file, but could not make it work. Tried adding or not the subdolfer in the rule.
add_action('init', 'add_htaccess_redirects' ,10, 0);
function add_htaccess_redirects()
{
add_rewrite_rule(
'^subfolder/the-post-permalink-(.*)',
'subfolder/the-post-permalink?param=$matches[1]',
'top'
);
}
and
add_action('init', 'add_htaccess_redirects' ,10, 0);
function add_htaccess_redirects()
{
add_rewrite_rule(
'^the-post-permalink-(.*)',
'the-post-permalink?param=$matches[1]',
'top'
);
}
Any help please?
Thanks.

Related

On WordPress, how to rewrite any URL but exclude existing pages and posts?

I need a rewrite rule to catch any URL on my WordPress except my existing pages and posts.
The following code in functions.php rewrites all URLs. How to make this exclude existing WordPress pages/posts?
function custom_rewrite_rule() {
add_rewrite_rule('^.([^/]*)?', 'index.php?page_id=5', 'top' );
}
add_action('init', 'custom_rewrite_rule', 10, 0);
Thanks.

Wordpress rewrites not working and shows 404 page

I want to load a page with this requests:
/foo/bar
/foo/bar/bar
But this isn't working and shows 404 page:
function custom_rewrite_rule() {
add_rewrite_rule('^foo\/','index.php?page_id=205533','top');
}
add_action('init', 'custom_rewrite_rule');
The same piece of code worked.
But the settings for the Permalinks needed to be saved again.
From WordPress Administration Screens, Select Settings -> Permalinks and just click Save Changes without any changes.
function wpd_foo_rewrite_rule() {
add_rewrite_rule(
'^foo/([^/]*)/?',
'index.php?page_id=$matches[1]&param=foo',
'top'
);
}
add_action( 'init', 'wpd_foo_rewrite_rule' );
This takes whatever comes after foo/ and sets that as pagename for the query, and then param gets the static value foo. If you need different URL patterns, you'll need extra rules for each unique pattern

Wordpress rewrite url not working

I 've create the page tag with page id 3055 and slug videos-tag. I want to add another segment to the url for queries like http://www.example.com/videos-tag/test so i added a rewrite rule.
add_action('init', 'custom_rewrite_tag', 10, 0);
function custom_rewrite_tag() {
add_rewrite_tag('%videos-tag%', '([^&]+)');
add_rewrite_rule('^videos-tag/([^/]*)/?','index.php?page_id=3055&q=$matches[1]','top');
}
When i click on this link http://www.example.com/videos-tag/football. I get 404 error page not found?
How do i solve?
Did you already add query_vars on your function ? If so you can change your rewrite function become this code bellow
in this case I see your query parameter is 'q', try to something more unique ie : vidq or something else.
add_action( 'init', 'wpse12065_init' );
function wpse12065_init() {
add_rewrite_rule(
'videos-tag(/([^/]+))?(/([^/]+))?/?',
'index.php?pagename=videos-tag&q=$matches[2]',
'top'
);
}
PS : Don't forget to save permalink
reference URL = http://www.rlmseo.com/blog/passing-get-query-string-parameters-in-wordpress-url/

Custom Rewrite Rule in Wordpress

I am trying to create a custom page in Wordpress with a special URL Rewrite and I am trying the following:
function custom_rewrite_rule() {
add_rewrite_rule('^services/service-in-([^/]*)/?','index.php?page_id=238&location=$matches[1]','top');
}
add_action('init', 'custom_rewrite_rule');
However, when I go to domain.com/services/service-in-london/ I just get a 404 message.
I have also tried this manually in htaccess but just get a 404.
Can you please try below code
function custom_rewrite_rule() {
add_rewrite_tag('%location%', '([^/]*)');
add_rewrite_rule('^services/([^/]*)/?$', 'index.php?page_id=238&location=$matches[1]', 'top');
flush_rewrite_rules();
}
add_action('init', 'custom_rewrite_rule');

Wordpress add_rewrite_rule gives 404

I want to change the permalink structure for specific custom post type.i.e
http://test.com/brand/calvin-klien?mtype=tab2
^this is dynamic
To
http://test.com/brand/calvin-klien/mtype/tab2
^this is dynamic
Here is a piece of code I tried.
Registering add_rewrite_tag
function custom_rewrite_tag() {
add_rewrite_tag('%mtype%', '([a-z0-9\-]+)');
}
add_action('init', 'custom_rewrite_tag', 10, 0);
add_action('init', 'wpse50530_journal_archive_rewrite', 10, 0);
Code1
function wpse50530_journal_archive_rewrite(){
add_rewrite_rule('brand/([a-z0-9\-]+)/([a-z0-9\-]+)/$','index.php?name=$matches[1]/?mtype=$matches[2]','top');
}
Code2
add_action('generate_rewrite_rules', 'work_list');
function work_list($wp_rewrite) {
$newrules = array();
$newrules['brand/([a-z0-9\-]+)/([a-z0-9\-]+)/$'] = 'index.php?name=$matches[1]&mtype=$matches[2]';
$wp_rewrite->rules = $newrules + $wp_rewrite->rules;
I have tried both above codes, flushed permalinks but still a 404. I dont know why it is creating $matches in htaccess as htacces doesnt know WHAT IS $matches
Also I have tried monkeyman-rewrite-analyzer plugin which is showing the correct matched result for my permalink but still word press showing 404. See attached screenshots for Code1 & Code2
The following code should help
add_action( 'init', 'so_27487849' );
function so_27487849() {
add_rewrite_rule(
'^brand/([^/]*)/mtype/([^/]*)/?',
'index.php?name=$matches[1]&mtype=$matches[2]',
'top');
}
Flush your permalinks and it should work.
I will continue Anand's code for some further changes. It was redirecting on name=$matches[1] and I need to stay at the same URL I hit, for this it must include the custom post type name.
add_action( 'init', 'so_27487849' );
function so_27487849() {
add_rewrite_rule('^brand/([^/]*)/([^/]*)/?','index.php?brand=$matches[1]&mtype=$matches[2]','top');
^--this
}
I got the Pretty URL... Yaaay!!!
BUT URL doesn't contain query string(i.e: mtype=tab1) and the rest of my code is useless, so we can achieve this by doing get_query_var('mtype') and I got the same value which was working in $_REQUEST['mtype'] and my code worked like a charm.
Also I deactivated the monkeyman pluggin
Just in case anyone has the same problem and checks out this page.
In the permalink settings page, check how the permalink structure is configured. The most common is to enter /%postname%/ in the custom structure field to let the rewrite_rules work properly.
before or after the call the function add_rewrite.. insert this code status_header(200);

Resources