Wordpress rewrite url not working on custom template - wordpress

The URL is:
mywebsite.com/custom/?var1=random_text
and I want
mywebsite.com/custom/random_text
here's the code in my functions.php file:
add_filter( 'query_vars', 'wpse12965_query_vars' );
function wpse12965_query_vars( $query_vars )
{
$query_vars[] = 'var1';
return $query_vars;
}
add_action( 'init', 'wpse12065_init' );
function wpse12065_init()
{
add_rewrite_rule(
'custom(/([^/]+))?/?',
'index.php?pagename=custom&var1=$matches[1]',
'top'
);
}
But it still returns 404 error. What am I doing wrong?

Your code is looking perfect try to add flush_rewrite_rules function.
add_filter( 'query_vars', 'wpse12965_query_vars' );
function wpse12965_query_vars( $query_vars )
{
$query_vars[] = 'var1';
return $query_vars;
}
add_action( 'init', 'wpse12065_init' );
function wpse12065_init(){
add_rewrite_rule(
'custom(/([^/]+))?/?',
'index.php?pagename=custom&var1=$matches[1]',
'top'
);
flush_rewrite_rules();
}

Related

Get url parameter in Wordpress get_query_var() does nothing

Wordpress codex says I can access URL parameters using get_query_var() when I register the variable to WP_Query using this code
function add_query_vars_filter( $vars ) {
$vars[] = "i_id";
return $vars;
}
add_filter( 'query_vars', 'add_query_vars_filter' );
https://codex.wordpress.org/Function_Reference/get_query_var
But that doesn't work the URL
https://example.com/contact-form/contact-de/?i_id=12345
doesn't give me any id parameter.
<?php
function add_query_vars_filter( $vars ) {
$vars[] = "i_id";
return $vars;
}
add_filter( 'query_vars', 'add_query_vars_filter' );
$i_id = get_query_var('i_id');
var_dump($i_id);
Always prints string(0) ""
What am I doing wrong here?
Try moving this part to your child theme's functions.php:
function add_query_vars_filter( $vars ) {
$vars[] = "i_id";
return $vars;
}
add_filter( 'query_vars', 'add_query_vars_filter' );
And keep this part in your template:
$i_id = get_query_var('i_id');
var_dump($i_id);

Wordpress custom url rewrite

Is it possible in wordpress to rewrite the following url.
http://www.example.com/aboutus/?city=newyork to http://www.example.com/aboutus/newyork
and then read out the get_query_var('city') , how do i accomplish this within wordpress?
This is the sollution:
add_filter( 'query_vars', 'add_query_vars_filter' );
function add_query_vars_filter( $vars ){
$vars[] = "city";
return $vars;
}
//https://thereforei.am/2011/10/28/advanced-taxonomy-queries-with-pretty-urls/
function eg_add_rewrite_rules() {
global $wp_rewrite;
$new_rules = array(
'aboutus/(.+?)/?$' => 'index.php?page_id=274&city=' . $wp_rewrite->preg_index(1)
);
$wp_rewrite->rules = $new_rules + $wp_rewrite->rules;
}
add_action( 'generate_rewrite_rules', 'eg_add_rewrite_rules' );
echo get_query_var('city');

rewrite url with custom plugin with permalink

I have developed plugin and uses shortcode to display.
So, there is two type of items to display like
if get title in url, display single item and if not all items so i have added into if else in condition.
So for that title, i have passed
add_query_arg( array('title' =>sanitize_title($data->get_title())), get_permalink($post_id) );
now url is generated by this is domain.com/post-slug/?title=nameoftitle
but i want to url like domain.com/post-slug/nameoftitle
I have tried following code but not working
function update_rewrite_rules() {
add_rewrite_tag( '%title%', '([^/]*)' );
add_rewrite_rule(
$newVarRegex,
'index.php?pagename=$matches[1]&title=$matches[2]',
'top'
);
}
add_action( 'init', 'update_rewrite_rules' );
but its not working
I got solution of it. working code is:
function js_update_rewrite_rules() {
add_rewrite_tag( '%title%', '([^/]*)' );
$rewrite_rules = get_option( 'rewrite_rules' );
$newVarRegex = '^([^/]*)/title/([^/]*)/?';
// check if the rule exists
if ( !isset( $rewrite_rules[$newVarRegex] ) ) {
add_rewrite_rule(
$newVarRegex,
'index.php?pagename=$matches[1]&title=$matches[2]',
'top'
);
flush_rewrite_rules();
}
}
function js_on_activation() {
js_update_rewrite_rules();
}
register_activation_hook( __FILE__, 'js_on_activation' );
function js_on_init() {
js_update_rewrite_rules();
}
add_action( 'init', 'js_on_init' );

Wordpress rewrite url with query parameters

I have post with categories based one year, month and date
Categories
2013
May 14
APRIL 10
2012
JUNE 6
I am creating the rewrite urls to particular date categories
by creating the url like category/slug-name/issues/year/month/date
My rewrite url is below
add_action('generate_rewrite_rules', 'past_issue_rewrite_rules');
function past_issue_rewrite_rules( $wp_rewrite ) {
$wp_rewrite->rules = array_merge( array('category/past-issues/issues/(.+)/(.+)/
(.+)/' => 'category/past-issues/?year='.$wp_rewrite->preg_index(1).'&month='.
$wp_rewrite->preg_index(2).'&day='.$wp_rewrite->preg_index(3)),
$wp_rewrite->rules );
}
add_filter( 'query_vars', 'setup_filter_query_vars' );
function setup_filter_query_vars( $query_vars )
{
$query_vars[] = 'year';
$query_vars[] = 'month';
$query_vars[] = 'day';
return $query_vars;
}
when I tried to access the page it is showing page not found.
what is the error?
Is it possible to send the parameters to category.php page
I am not sure. Please let me know if this is wrong.
I found the s0lution by myself and here is the code
function past_issue_rewrite_rules(){
add_rewrite_rule(
'category/past-issues/(\d+)/(\d+)/(\d+)/?$',
'index.php?category_name=past-issues&pyear=$matches[1]&pmonth=$matches[2]&pday=$matches[3]',
'top'
);
}
add_action( 'init', 'past_issue_rewrite_rules' );
add_filter( 'query_vars', 'setup_filter_query_vars' );
function setup_filter_query_vars( $query_vars )
{
$query_vars[] = 'pyear';
$query_vars[] = 'pmonth';
$query_vars[] = 'pday';
return $query_vars;
}

Custom rewrite permalinks WordPress

I have a page template that gets some variables added to the end of the url so I can display data based on what was passed.
ie: mysite.com/search-listins/listing/?address=123+The+Street&mls-number=00000
I need to convert this into a pretty permalink. Somthing like this:
mysite.com/search-listings/listing/123-The-Street OR mysite.com/search-listings/listing/00000-123-The-Street
I tried using this function. But nothing seems to be working. Any thoughts? These are not coming from a custom post type. As you can see, these are not a custom post type. These are MLS items that live outside the wp_ tables.
Function:
function setup_filter_rewrites(){
add_rewrite_rule('search-listings/listing/([^/]*)/?', 'index.php?pagename=search- listings/listing/?address=$matches[1]&mls-number=$matches[2]', 'top');
}
add_action( 'init', 'setup_filter_rewrites' );
function setup_filter_query_vars( $query_vars ){
$query_vars[] = 'listing';
return $query_vars;
}
add_filter( 'query_vars', 'setup_filter_query_vars' );`
I'm always using this code instead of add_rewrite_rule() function:
add_filter( 'query_vars', 'my_query_vars' );
function dlouhavidea_query_vars( $vars ) {
$vars[] = 'address';
$vars[] = 'miles';
return $vars;
}
add_action( 'generate_rewrite_rules', 'my_rewrite_rules' );
function ,y_rewrite_rules( $wp_rewrite )
{
$wp_rewrite->rules = array(
'search-listings/listing/address/?([^/]*)/?$' => $wp_rewrite->index . '?pagename=search-listings&address=' . $wp_rewrite->preg_index( 1 ),
'search-listings/listing/miles/?([0-9]{1,})/?$' => $wp_rewrite->index . '?pagename=search-listings&miles=' . $wp_rewrite->preg_index( 1 )
) + $wp_rewrite->rules;
}
You'll than find your vars in get_query_var('address') and get_query_var('miles');

Resources